首页 > 解决方案 > 如何在 VIM 中重复复制粘贴?

问题描述

我正在编辑一些 json 文件,我想在多个地方替换相同的字段。我正在使用 VIM,我不确定什么是快速简便的方法。例如:

data1:
    field1:
        {Some data}
    field2:
        {Some data}
data2:
    field1:
        {Some data}
    field2:
        {Some data}
data3:
    field1:
        {Some data}
    field2:
        {Some data}
data3:
    field1:
        {Some data}
    field2:
        {Some data}

我想field1: {some data}通过粘贴所有条目来替换其他内容。我怎样才能做到这一点?某种粘贴和重复会很好。请注意some data,可能是另一个带有缩进的多行块,而不仅仅是单行数据。

非常感谢。

标签: vim

解决方案


使用:help :globaland :help :normal,假设您要“粘贴”的是最后一件事:

:g/field1/normal V/field2/-^M"0]p

^M获得<C-v><CR>

打破它:

  • :g/<pattern>/<command><command>在匹配的每一行上执行<pattern>
  • field1是你的<pattern>,匹配每一行包含field1. 我将由您来为您的实际用例找出正确的模式。
  • normal ...从命令行执行以下正常模式宏。
  • V/field2/-^M进入视觉线模式并将其扩展到 next 上方的行field2。同样,使用适合您的任何模式。
  • "0]p将寄存器中的文本0放在视觉选择上,尊重选择的第一行的缩进。

推荐阅读