2012-05-02 111 views

回答

16

这是Perl语法,而不是Vim。在Vim正则表达式中,至少默认情况下,括号匹配自身,反斜杠括号捕获 - 与Perl相反。此外,Vim不会理解非贪婪修改?,并且捕获组与\ñ,不$ñ插值。试试这个:

%s/hello(\([^)]*\))/hello[\1]/ 

或者,你可以使用\v(“非常神奇”)修改作出关于特殊字符和反斜杠更多类似Perl的行为,虽然它并不要使Vim理解*?或改变其插语法:

%s/\vhello\(([^)]*)\)/hello[\1]/ 

另外请注意,您不需要在方括号中替换文本反斜杠 - 一个替换命令的右手边是正则表达式,所以你不要不必担心大部分人物在一个特别的。几乎只有反斜杠本身是特殊的,并且可以用来包含捕获组或它自己的文字实例或分隔符。