3

如果我有一个文件:

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 高尔夫”方法。也许我真的很笨,有一个简单的命令。

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

4

2 回答 2

6

用于0y$拉出您的替换行 - 这不包括换行符。

然后使用:

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

用寄存器的内容替换目标行unnamed,其中将包含最后一个 yank。

于 2012-07-09T22:22:17.073 回答
0

我首先使用 'aaa / new replacement line'"aY保存到寄存器 a

然后我使用以下内容删除回车符,从vim中的寄存器中删除换行符?

:let @a=substitute(strtrans(@a),'\^@',' ','g')

或者,我可以简单地使用视觉选择v并抓住线而不返回(这更容易)。

然后我可以使用全局命令来执行替换:

:g/old target line/s/.*/\=@a
于 2012-07-09T22:09:17.473 回答