11

嗨,我是新手ack(实际上是半小时前开始的)。我对搜索结果的质量印象深刻。

但是在我的源文件中有很多注释,如果我搜索一个类/函数名,我会得到大约 20 个带有注释行的结果和 2 个带有实际代码的结果。

有没有办法在之后//#之间排除文本/* */

4

2 回答 2

3

你可以用这样的东西跳过单行注释;

# ignore matches after //
ack '^[^//]*word'
# ignore matches after #
ack '^[^#]*word'

如果您ag改用它,请记住它会进行多行匹配:

# ignore matches after //
ag '^[^\n\r//]*word'
# ignore matches after #
ag '^[^\n\r#]*word'
于 2015-07-21T10:48:57.707 回答
0

你没有。相反,您标记您的来源。

跳过评论意味着动态解析输入,这通常会很慢。此外,每种编程语言都有不同的注释语法,这使得实现这一点变得不简单。虽然你可以滚动你自己的正则表达式——例如对于 C 使用这样的东西:\/\*(\*(?!\/)|[^*])*\*\/——这些模式是复杂的,而且比它们设计 ack、ag 和 grep 的快速搜索更麻烦。您真正在寻找的是一种通过函数和类来导航代码的方法;这就是标记代码的用途:查看universal-ctags,http ://docs.ctags.io/en/latest/ 。

于 2018-07-13T05:17:42.817 回答