Jas*_*nce 11 regex vim replace
我想,以取代所有发生hello(...)
的hello[...]
我尝试过%s/hello\((.*?)\)/hello\[$1\]/
没有任何成功的事情
有任何帮助吗?
Mar*_*eed 16
这是Perl语法,而不是Vim.在Vim正则表达式中,至少在默认情况下,括号与自身匹配并且反斜杠括号捕获 - 与Perl相反.此外,Vim不理解非贪婪修饰符?
,并且捕获组使用\
n而不是$
n进行插值.试试这个:
%s/hello(\([^)]*\))/hello[\1]/
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用\v
("非常神奇")修饰符使特殊字符和反斜杠的行为更像Perl,但它不会使Vim理解*?
或更改其插值语法:
%s/\vhello\(([^)]*)\)/hello[\1]/
Run Code Online (Sandbox Code Playgroud)
另外,请注意,替换文本中的方括号不需要反斜杠 - 替换命令的右侧不是正则表达式,因此您不必担心大多数特殊字符一.几乎只有反斜杠本身是特殊的,并且可以用于包括捕获组或其自身或分隔符的文字实例.