嗨,我是新来的
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/。