【问题标题】:How to replace searched lines with yanked line in vim?如何在vim中用抽出的行替换搜索到的行?
【发布时间】:2012-07-09 09:00:46
【问题描述】:

如果我有文件:

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

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

【问题讨论】:

    标签: vim


    【解决方案1】:

    我首先使用"aY 获取“aaa / 新替换行”,保存到寄存器 a

    然后我使用以下内容从remove newlines from a register in vim? 中删除回车:

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

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

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

    :g/old target line/s/.*/\=@a
    

    【讨论】:

    • 一个改进是我应该使用视觉选择模式v 并拉出该行,从而从注册步骤中删除删除换行符。
    【解决方案2】:

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

    然后使用:

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

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

    【讨论】:

    • 甜,比以前更有效率了!
    猜你喜欢
    • 2011-06-15
    • 2011-11-02
    • 2015-02-15
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2014-03-22
    • 2017-09-21
    相关资源
    最近更新 更多