如果我有一个文件:
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
我试图在下面找到答案,但也希望看到你对此的意见。也许还有一种我不知道的更成功的"活力高尔夫"方法。也许我只是真的很笨,有一个简单的命令。
基本上,问题是:如果我有一行被拉入寄存器,我如何完全替换匹配"旧目标行"的搜索行?
使用0y$拉取替换行-这不包括换行符。
然后使用:
%s/.*old target line.*/=@"
用unnamed
寄存器的内容替换目标行,该寄存器将包含最后一次扬克。
我首先使用"aY
获取"aaa/新替换行",将保存到寄存器中
然后,我使用以下命令删除回车,从vim?中的寄存器中删除换行符:
:let @a=substitute(strtrans(@a),'^@',' ','g')
或者,我可以简单地使用v
的视觉选择,并在没有返回的情况下抓取行(这要容易得多)。
然后我可以使用全局命令来执行替换:
:g/old target line/s/.*/=@a