我想替换所有出现的hello(...)
为hello[...]
我尝试了一些类似于%s/hello\((.*?)\)/hello\[$1\]/
的东西,但都没有成功。
请帮忙吗?
那是Perl语法,不是Vim. 在Vim的正则表达式中,默认情况下,括号匹配自身,反斜杠括号捕获 - 与Perl相反。而且,Vim不理解非贪婪修饰符?
,捕获组使用\
n进行插值,而不是$
n。尝试这个:
%s/hello(\([^)]*\))/hello[\1]/
或者,你可以使用\v
(“非常魔法”)修饰符,使其对特殊字符和反斜杠的行为更像Perl,尽管它不会使Vim理解*?
或更改其插值语法:
%s/\vhello\(([^)]*)\)/hello[\1]/
另外,请注意在替换文本中方括号不需要反斜杠 - 替换命令的右侧不是正则表达式,所以你不必担心大多数在正则表达式中特殊的字符。基本上只有反斜杠本身是特殊的,可以用于包括捕获组或自身或分隔符的文字。