【发布时间】:2012-05-02 05:31:29
【问题描述】:
我正在尝试将所有出现的hello(...) 替换为hello[...]
我尝试了%s/hello\((.*?)\)/hello\[$1\]/ 之类的方法,但没有成功
有什么帮助吗?
【问题讨论】:
我正在尝试将所有出现的hello(...) 替换为hello[...]
我尝试了%s/hello\((.*?)\)/hello\[$1\]/ 之类的方法,但没有成功
有什么帮助吗?
【问题讨论】:
这是 Perl 语法,不是 Vim。在 Vim 正则表达式中,至少在默认情况下,括号匹配自己并且反斜杠括号捕获 - 与 Perl 相反。此外,Vim 不理解非贪婪修饰符 ?,并且捕获组被插入 \n,而不是 $n。试试这个:
%s/hello(\([^)]*\))/hello[\1]/
或者,您可以使用\v(“非常神奇”)修饰符使特殊字符和反斜杠的行为更像 Perl,尽管它不会让 Vim 理解 *? 或更改其插值语法:
%s/\vhello\(([^)]*)\)/hello[\1]/
另外,请注意,替换文本中的方括号不需要反斜杠 - 替换命令的右侧 不是 正则表达式,因此您不必担心大多数特殊的字符。几乎只有反斜杠本身是特殊的,可用于包含捕获组或自身的文字实例或分隔符。
【讨论】: