You need to enable JavaScript to run this app. VIM中如何实现重复复制粘贴,批量替换json文件内多处多行相同字段
优惠活动
大模型
产品
解决方案
定价
更多

VIM中如何实现重复复制粘贴,批量替换json文件内多处多行相同字段

Vim下批量替换多行field1块为粘贴内容的实现方法

前置准备

先把你要替换进去的多行新内容提前存入Vim寄存器,避免后续操作反复选内容粘贴:

  • 在文档末尾空白位置输入/粘贴好你要替换的完整新内容
  • 按V进入可视行模式,选中整段新内容的所有行
  • 按"ay将选中内容复制到a寄存器(寄存器标识可以换成任意没在用的,方便记忆即可)
  • 删掉刚才临时放在文档末尾的这段内容,别留残留垃圾

方法1:宏录制重复操作(新手友好,不易误删)

这个方法不用记复杂的正则规则,操作逻辑和手动修改完全一致,录一次就能无限重复:

  1. 按qa开始录制操作宏到a寄存器
  2. 按/^\s\{4\}field1:<回车>,自动定位到第一个匹配的field1行位置 如果你的文件用2空格缩进,就把\s\{4\}换成\s\{2\}匹配对应缩进,否则容易误匹配其他内容
  3. 按V进入可视行模式,接着按/^\s\{4\}field2:<回车>,直接选中从当前field1行到下一个field2行的所有内容
  4. 按k上移一行,把field2那行从选中范围里排除,此时选中范围刚好完整覆盖要替换的旧field1块
  5. 按d删掉选中的旧内容
  6. 按"ap粘贴之前存在a寄存器里的新内容
  7. 按q停止宏录制
  8. 后续所有匹配的field1块,直接按@a就会自动完成一次替换;如果有几十处要改,直接输入30@a就能一次性跑完30次替换,不用反复按。

方法2:全局ex命令批量替换(速度更快,适合大文件)

完成上面的新内容寄存器存储后,直接在普通模式下输入执行下面的命令,就能一次性改完所有匹配块:

:g/^\s\{4\}field1:/+/^\s\{4\}field2/-1d | put! a

每个部分的作用:

  • :g/^\s\{4\}field1:/:全局匹配所有和field1同缩进的目标起始行
  • +/^\s\{4\}field2/-1d:从匹配到的field1行开始,向下定位到同缩进的field2行,删掉两行之间的所有旧field1内容
  • | put! a:在删掉内容的位置上方插入之前存在a寄存器里的新内容

常见问题调整

  • 如果粘贴多行内容时出现缩进错乱,先执行:set paste开启粘贴模式再做临时粘贴操作,粘贴完执行:set nopaste恢复正常配置就行
  • 替换完如果缩进不对,直接按gg=G触发Vim全文档自动缩进校正即可(只要当前文件类型的缩进规则正常加载,就能自动对齐)
  • 实际用的时候一定要根据自己文件的真实缩进量,调整命令里的\s\{4\}的数字,别因为缩进不对误删其他有效内容。

内容的提问来源于stack exchange,提问作者J_yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 17:54:03