如何在vim中通过单个搜索和替换命令替换一行的多个位置?

如何在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+):匹配一个或

在vim中,我想将这种情况从print更改为print()

如果我跑

:%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