ag Silver Searcher:前后查找模式的规则?

27

我在Vim中使用ag进行字符串/文件搜索,效果很好。

然而,似乎没有太多的文档介绍如何构建用于ag的模式。

我试图在《实用 Vim》一书的示例中使用ag代替vimgrep。

我想在一个目录下递归地查找“Pragmatic Vim”的所有出现,并将此字符串替换为“Practical Vim”。有些文件中还有“Pragmatic Bookshelf”,这个字符串必须保留。

这本书建议采用以下方法:

/Pragmatic\ze Vim
:vimgrep /<C-r>// **/*.txt

在执行完该步骤后,请使用:Qargs插件命令填充quickfix列表,最后执行:argdo %s//Practical/g

现在,我如何使用ag指定/Pragmatic\ze模式?

ag是否设计用于我在这里尝试做的事情?

1个回答

32

The Silver Searcher工具使用PCRE(Perl-Compatible Regular Expression)语法。因此,您需要使用Perl语法来表示正向预查,而不是Vim的\ze(?=pattern)。(对于\zs,相应的反向预查将是(?<=pattern)。)

我在命令行上展示了您的示例,但在Vim中操作也应该是完全一样的:

$ ag 'Pragmatic(?= Vim)'

1
谢谢。在目录中使用 $ ag '(?<=Pragmatic )Vim' 可以找到 Vim,我正在尝试找到 Pragmatic 部分。然而,由于我正在尝试用相关文件填充 quickfix,这个命令似乎限制了列表到所需的文件。我想我需要阅读有关 PCRE 的资料。看来,我仍然需要使用 /Practical\ze 来完成 :argdo %s//Pragmatic/ge 部分? - user3156459
哦,抱歉,我搞混了。现在已经更正了。感谢您接受我的答案! - Ingo Karkat
你说得对,PCRE语法仅适用于外部的ag命令。在Vim内部的:s命令中,你仍然需要使用\ze - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接