2017-06-28 40 views
1

我想在vim中使用替换命令附上一个特定的模式出现的所有替代在vim,有特殊字符

\cite{author1} 
\cite{author2} 

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

基于堆栈exchangeI其他的答案中使用以下vim命令

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

但是,没有运气。它说“找不到匹配”。我放了两个反斜杠,其中一个应该是逃跑角色。请帮助。

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

回答

4

请逃脱()

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

工作,没有任何问题。非常感谢你 –

3

由于mentioned,通常你需要躲避括号。

您可以使用very magic mode\v)使正则表达式更简单;删除需要摆脱大量的正则表达式的部分,包括括号捕获:

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

非常感谢 –

3

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

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

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

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

如需更多帮助,请参见:

:h :s% 
:h /magic