嗨,我是新手ack
(实际上是半小时前开始的)。我对搜索结果的质量印象深刻。
但是在我的源文件中有很多注释,如果我搜索一个类/函数名,我会得到大约 20 个带有注释行的结果和 2 个带有实际代码的结果。
有没有办法在之后//
和#
之间排除文本/* */
?
嗨,我是新手ack
(实际上是半小时前开始的)。我对搜索结果的质量印象深刻。
但是在我的源文件中有很多注释,如果我搜索一个类/函数名,我会得到大约 20 个带有注释行的结果和 2 个带有实际代码的结果。
有没有办法在之后//
和#
之间排除文本/* */
?
你可以用这样的东西跳过单行注释;
# 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'
你没有。相反,您标记您的来源。
跳过评论意味着动态解析输入,这通常会很慢。此外,每种编程语言都有不同的注释语法,这使得实现这一点变得不简单。虽然你可以滚动你自己的正则表达式——例如对于 C 使用这样的东西:\/\*(\*(?!\/)|[^*])*\*\/
——这些模式是复杂的,而且比它们设计 ack、ag 和 grep 的快速搜索更麻烦。您真正在寻找的是一种通过函数和类来导航代码的方法;这就是标记代码的用途:查看universal-ctags,http ://docs.ctags.io/en/latest/ 。