我正在尝试将所有hello(...)
替换为hello[...]
我尝试%s/hello\((.*?)\)/hello\[$1\]/
之类的事情没有成功
有任何帮助吗?
答案 0 :(得分:16)
这是Perl语法,而不是Vim。在Vim正则表达式中,至少在默认情况下,括号与自身匹配并且反斜杠括号捕获 - 与Perl相反。此外,Vim不理解非贪婪修饰符?
,并且捕获组使用\
n 进行插值,而不是$
n 。试试这个:
%s/hello(\([^)]*\))/hello[\1]/
或者,您可以使用\v
(“非常魔法”)修饰符使特殊字符和反斜杠的行为更像Perl,但它不会使Vim理解*?
或更改其插值语法:
%s/\vhello\(([^)]*)\)/hello[\1]/
另外,请注意,替换文本中的方括号不需要反斜杠 - 替换命令的右侧是而不是正则表达式,因此您不必担心大多数特殊字符。几乎只有反斜杠本身是特殊的,可以用来包括捕获组或它自己的文字实例或分隔符。