如何在vim中将搜索到的线替换为拉断的线?

如何在vim中将搜索到的线替换为拉断的线?,vim,Vim,如果我有文件: aaa / new replacement line AAA / old target line random line random line BBB / old target line CCC / old target line 在本例中,有4个替换,因此最终的文件应该是这样的: aaa / new replacement line aaa / new replacement line random line random line aaa / new replacem

如果我有文件:

aaa / new replacement line
AAA / old target line
random line
random line 
BBB / old target line
CCC / old target line
在本例中,有4个替换,因此最终的文件应该是这样的:

aaa / new replacement line
aaa / new replacement line
random line
random line 
aaa / new replacement line
aaa / new replacement line
我试图在下面给出一个答案,但也希望看到您对此的意见。 也许有一种更成功的“vim golf”方法我不知道。也许我真的很笨,有一个简单的命令


基本上,问题是:如果我将一行拉入寄存器,如何完全替换匹配“旧目标行”的搜索行?

我首先使用
“aY
获取“aaa/新替换行”,将其保存到寄存器a中

然后,我使用以下命令从中删除回车符:

或者,我可以简单地使用带有
v
的视觉选择,在不返回的情况下抓取行(这要容易得多)

然后,我可以使用global命令执行替换:

:g/old target line/s/.*/\=@a
使用0y$拉下您的替换线-这不包括换行

然后使用:

%s/.*old target line.*/\=@"

要用
未命名
寄存器的内容替换目标行,该寄存器将包含最后一次拉伸。

一个改进是,我应该使用视觉选择模式
v
并拉伸该行,从而从寄存器步骤中删除删除换行符。很好,这比以前更有效!
%s/.*old target line.*/\=@"