有没有办法使用 RipGrep(或类似工具)等来搜索模式,*但忽略注释中的结果?*

有没有办法使用 RipGrep(或类似工具)等来搜索模式,*但忽略注释中的结果?*

我是 RipGrep 的常规用户rg,但有一件事我始终搞不懂,而且经常发现自己想要搜索仅有的不是评论

很遗憾,

  1. 这看起来不像是一个一流的功能;
  2. 看起来,rg的多表达式支持(rg -e "a" -e "b")只能是布尔或,而不是布尔与——即,它添加了额外的结果,而不是删除以前的结果;
  3. 最简单的解决方案是使用 shell ( rg 'a' | rg 'b'),但它有足够多的缺点,让人觉得它不是一个解决方案¹。

因此,我正在寻找一种真正使此行为变得顺畅的流程或替代方案。有人有喜欢或惯用的方式来做到这一点吗?


  1. 尽管管道两次通过的方法在某种程度上是可行的,但它在很多对我来说很重要的方面都失败了:

    • 无法在 Vim 内部使用,我大部分的搜索都是在 Vim 内部用:Ack或类似方法进行的;
    • 即使在命令行,也会丢失上下文和设置:各种功能,例如打印行号、用 ANSI 代码为结果着色(包括上下文行),在两个互不了解的独立进程中重新启用/重新实现变得非常复杂和脆弱;
    • 最糟糕的是,使用第二个正则表达式意味着您失去了多文件类型感知能力 — 即,grep 出不以 开头的解决方案^\s*#将捕获 Ruby 代码库中的大多数注释,但对 JavaScript 或 C 部分则无能为力。您是否链接了更多调用?编写一个超级复杂的多语言注释捕获正则表达式?

相关内容