如何在 VIM 中重复复制粘贴?

时间:2021-03-10 13:52:22

标签: 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 可能是另一个带有缩进的多行块,而不仅仅是一行数据。

非常感谢。

2 个答案:

答案 0 :(得分:0)

只需使用全局替换 :%s/field1: {some data}/something else 即可。

或者实际上,由于 field1:{Some data} 不在同一行上,因此类似于 :%s/field:\n\s\+{Some data}/something else\n 匹配换行符,而 {{1} } 一个或多个空白字符)。

有关详细信息,请在 vim 中执行 \s\+

答案 1 :(得分:0)

对于 :help :global: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 进入视线模式并将其扩展到下一个 field2 上方的行。同样,使用适合您的任何模式。
  • "0]p 将寄存器 0 中的文本放在视觉选择上,尊重选择第一行的缩进。