【问题标题】:ag Silver Searcher: rules for lookahead/lookbehind patterns?ag Silver Searcher:前瞻/后瞻模式的规则?
【发布时间】:2014-03-05 06:32:14
【问题描述】:

我在 Vim 中使用 ag 对字符串/文件搜索有很好的结果。

然而,关于如何为 ag 构建模式的文档似乎并不多。

我正在尝试在 Practical Vim 书中的示例中使用 ag 而不是 vimgrep。

我想递归地在目录中的所有文件中查找“Pragmatic Vim”的每一个出现,并用“Practical Vim”替换这个字符串。某些文件中还有“实用书架”,该字符串必须保留。

这本书提出了这种方法:

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

在这一步之后,使用:Qargs 插件命令填充快速修复列表,最后是:argdo %s//Practical/g

现在,如何使用ag 指定/Pragmatic\zepattern?

ag 是否完全适合我在这里尝试做的事情?

【问题讨论】:

    标签: regex vim vimgrep


    【解决方案1】:

    Silver Searcher 工具使用 PCRE(Perl 兼容正则表达式)语法。因此,您需要使用 Perl 语法而不是 Vim 的 \zepositive lookahead(?=pattern)。 (\zs 对应的 lookbehind 将是 (?&lt;=pattern)。)

    我在命令行上展示了你的示例,但它在 Vim 中应该是相同的:

    $ ag 'Pragmatic(?= Vim)'
    

    【讨论】:

    • 谢谢。在目录中使用$ ag '(?&lt;=Pragmatic )Vim' 会找到Vim,我试图找到Pragmatic 部分。但是,由于我正在尝试使用相关文件填充 quickfix,因此此命令似乎将列表限制为所需文件。我想我需要阅读 PCRE。看来,我仍然需要将/Practical\ze 用于:argdo %s//Pragmatic/ge 部分?
    • 哦,对不起,我搞混了。现在已更正。感谢您接受我的回答!
    • PCRE 语法仅适用于外部ag 命令是正确的。对于 Vim 中的:s,您仍然必须使用\ze
    猜你喜欢
    • 2015-09-13
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多