我有一些文本行遵循某种模式,而有些则不遵循。我想复制遵循这种模式的行,然后将它们复制/拖放到寄存器中,这样我就可以将它们原样粘贴到其他地方。
例子:
def function_1(param1,param2):
// do something1
// do something2
// do something3
return
def function_Nullify(param=None):
// does nothing
pass
现在我基本上想选择匹配的行def.*$
,复制并粘贴它们。
因此输出看起来会像这样:
def function_1(param1,param2):
def function_Nullify(param=None):
我想知道是否可以在 vim 中做到这一点。
类似于将匹配的正则表达式行复制到寄存器“m”中。然后我可以在需要的地方执行“mp”。
我知道带有一些重定向运算符的 sed、awk 或 grep 之类的程序可能更适合这项任务,但我想知道是否可以使用 vim 来执行此任务。
答案1
您可以使用"Myy
(大写字母 M)附加到寄存器 m。这允许您编写一个全局命令来提取所有匹配的行def.*$
,并将所有行提取到 m 寄存器中。然后您所要做的就是粘贴 m 寄存器以获取内容"mp
:g/def.*$/normal "Myy
上述全局命令告诉您找到所有与模式匹配的行def.*$
并"Myy
以正常模式执行该命令。
但是这有一个问题。如果启动时 m 寄存器不为空,会发生什么情况?那么,您最终会得到上次放入寄存器的内容加上您附加的所有内容。
要清空寄存器,您可以使用将寄存器设置为空字符串。
:let @m=''
因此在 vim 中你可以输入
:let @m=''
:g/def.*$/normal "Myy
将所有匹配的内容def.*$
放入 m 寄存器中。