如何在vim中通过单个搜索和替换命令替换一行的多个位置?
在vim中,我想将这种情况从print更改为print() 到 如果我跑如何在vim中通过单个搜索和替换命令替换一行的多个位置?,vim,Vim,在vim中,我想将这种情况从print更改为print() 到 如果我跑 :%s/print /print\(/g 这一部分只完成了第一部分,如何一次性更换?您需要捕获中间部分才能跟踪它: :%s/\vprint (\w+)/print(\1)/g 与: \v:使用magic模式(请参见:h magic)。这里主要是不必转义括号和+(否则您将编写print\(\w\+\)) print(带尾随空格):简单匹配,您可能希望用\s+替换空格以匹配多个空格(空格/制表符) (\w+):匹配一个或
:%s/print /print\(/g
这一部分只完成了第一部分,如何一次性更换?您需要捕获中间部分才能跟踪它:
:%s/\vprint (\w+)/print(\1)/g
与:
:使用\v
模式(请参见magic
)。这里主要是不必转义括号和:h magic
(否则您将编写+
)print\(\w\+\)
(带尾随空格):简单匹配,您可能希望用print
替换空格以匹配多个空格(空格/制表符)\s+
:匹配一个或多个单词字符((\w+)
,有关更多信息和类,请参见[0-9A-Za-z!]
)并捕获它(括号):h/字符类
:此处括号没有特殊含义,/print(\1)
表示第一个捕获的组\1
\v
的用途好吗?非常感谢。我想最好能解释一下。编辑我的答案解释一下正则表达式谢谢!!所以这就是sed
中的-r
,nice:)
:%s/print /print\(/g
:%s/\vprint (\w+)/print(\1)/g