如果我有文件:
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'方法。也许我只是真的很蠢,而且有一个简单的命令。
基本上,问题是:如果我将一条线拉入寄存器,如何完全替换匹配“旧目标线”的搜索线?
答案 0 :(得分:6)
使用 0y $ 来抽取替换线 - 这不包括换行符。
然后使用:
%s/.*old target line.*/\=@"
使用unnamed
寄存器的内容替换目标行,该寄存器将包含最后一次扫描。
答案 1 :(得分:0)
我首先使用"aY
抓住'aaa / new replacement line',保存到注册
然后我从remove newlines from a register in vim?:
使用以下内容删除回车:let @a=substitute(strtrans(@a),'\^@',' ','g')
或者,我可以简单地使用v
进行视觉选择并抓住没有返回的行(这更容易)。
然后我可以使用global命令执行替换:
:g/old target line/s/.*/\=@a