我试图在vim中使用substitute命令来包含特定模式的所有出现
\cite{author1}
\cite{author2}
与
(\cite{author1})
(\cite{author2})
基于堆栈交换中的其他答案,我使用了以下vim命令
%s/\\cite{(\w\+)}/(\\cite{\1})/g
但是,没有运气。它说“找不到匹配”。我把两个反斜杠,其中一个应该是转义字符。请帮助。
我知道我可以使用其他编辑器来完成这项工作,但我想知道我的错误。谢谢。
答案 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, 借助出色的视觉反馈,可以做到更多。