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