如何用vim中的yanked行替换搜索到的行?

时间:2012-07-09 22:09:17

标签: 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 replacement line
aaa / new replacement line

我试着在下面给出答案,但是也希望看到你对此的意见。 也许有一种我不知道的更成功的'vim golf'方法。也许我只是真的很蠢,而且有一个简单的命令。

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

2 个答案:

答案 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