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