vim搜索替换正则表达式

时间:2012-05-02 05:31:30

标签: regex vim replace

我正在尝试将所有hello(...)替换为hello[...]

我尝试%s/hello\((.*?)\)/hello\[$1\]/之类的事情没有成功

有任何帮助吗?

1 个答案:

答案 0 :(得分:16)

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

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

或者,您可以使用\v(“非常魔法”)修饰符使特殊字符和反斜杠的行为更像Perl,但它不会使Vim理解*?或更改其插值语法:

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

另外,请注意,替换文本中的方括号不需要反斜杠 - 替换命令的右侧是而不是正则表达式,因此您不必担心大多数特殊字符。几乎只有反斜杠本身是特殊的,可以用来包括捕获组或它自己的文字实例或分隔符。