用vim替换,带有特殊字符

时间:2017-06-28 09:31:41

标签: vim substitution

我试图在vim中使用substitute命令来包含特定模式的所有出现

\cite{author1}
\cite{author2}

(\cite{author1})
(\cite{author2})

基于堆栈交换中的其他答案,我使用了以下vim命令

%s/\\cite{(\w\+)}/(\\cite{\1})/g

但是,没有运气。它说“找不到匹配”。我把两个反斜杠,其中一个应该是转义字符。请帮助。

我知道我可以使用其他编辑器来完成这项工作,但我想知道我的错误。谢谢。

4 个答案:

答案 0 :(得分:4)

请退出()

%s/\\cite{\(\w\+\)}/(\\cite{\1})/g

答案 1 :(得分:3)

作为mentioned,通常你需要转义括号。

您可以使用very magic mode\v)使正则表达式更简单;消除了许多正则表达式部分的需要,包括用于捕获的括号:

%s/\v(\\cite\{\w+\})/(\1)/g

答案 2 :(得分:3)

您不需要捕获组来获得整个匹配。您可以在替换的替换部分中使用\0&进行整场比赛。

:%s/\\cite{\w\+}/(&)/g

如果您确实想使用捕获组,则需要转义捕获组/括号。

:%s/\(foo\)/(\1)/g

如需更多帮助,请参阅:

:h :s%
:h /magic

答案 3 :(得分:0)

了解正则表达式中每个符号在vim中的作用有时非常 特别是对于所有的模式和配置变量而言 取决于。因此,视觉反馈对 在制作常规文字时,我们在任何时候真正匹配的文字是什么 表达式。

如果您使用neovim,则有一个名为'inccommand'的特殊选项 可以实时预览比赛和替换。这样你就可以算 更快地找出错误。此功能很可能也包含在其中 将来的vim,但除此之外,您还可以使用简单的vim 如果您激活“ incsearch”选项,则会为您提供视觉反馈。

设置“ incsearch”后,您可以观看/和?的匹配项。当你写它们的时候 只是要确保模式正确。以后你可以爆炸一个不错的 替换功能:如果您将第一个部分留空,则最后一个 搜索。

因此您可以先进行搜索:

/\\cite{\w\+}/(&)/g

与此同时,vim将以可视方式向您显示匹配的文本。一旦您 确保图案正确无误,然后按Enter键,最后键入:

:%s//(\1)<Enter>

此外,如果您想要的东西比这个简单的技巧更强大,则可以 对于我的插件Extend.vim, 借助出色的视觉反馈,可以做到更多。