如何在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.*/\=@"