vim录制宏的核心是记录按键动作而非结果,先按esc确保普通模式,再qa开始录制,执行操作后q停止;回放用@a、5@a或:%norm @a;寄存器内容可查:reg a、清空qqq、追加qa、编辑后存回;支持宏调用组合复杂流程。

vim 录制宏的核心是“记录按键动作→回放执行”,不是记录结果,而是复现你按下的每一步。只要操作逻辑一致,就能批量处理多行、多处重复任务。
怎么开始录制一个宏
确保在普通模式(按 Esc 确认),然后:
- 按 q + 一个字母(比如 a),即 qa —— 此时状态栏显示 recording,表示开始往寄存器 a 记录
- 接着做你要重复的操作:比如 ^iTODO:
j (跳行首 → 插入 TODO: → 退出插入 → 下移一行) - 再按一次 q 停止录制
注意:避免用方向键、鼠标或小键盘;优先用 hjkl、0/$/w/b 等原生移动命令,否则宏可能在其他位置失效。
怎么安全地回放和批量应用
光标放在第一处目标位置,再执行:
- @a:运行一次寄存器 a 中的宏
- 5@a:连续运行 5 次(适合固定行数)
- @@:重复上一次执行的宏(省得再输字母)
-
:%norm @a:对全文每一行都执行一次(等价于
:1,$norm @a) - :10,20norm @a:只对第 10 到 20 行执行
如果某次执行出错(比如某行格式不一致),按 u 撤销,调整光标位置后重试即可。
怎么查看、修正或追加宏内容
宏本质是存在寄存器里的按键序列,可读可改:
-
:reg a 查看寄存器 a 的原始按键(如显示为
^ITODO^Mj,其中^M是 Enter,^[是 Esc) - 若录错了,先用 qqq 清空寄存器 a(即 q + 任意字母 + q,快速启停)
- 想往已有宏追加操作:用大写字母继续录,比如已录 qa,再按 qA 就会在 a 寄存器末尾追加新命令
- 需要微调?把内容粘贴出来修改:先 "ay 复制当前寄存器内容,qqq 清空,再 "ap 粘贴到缓冲区编辑,最后 "ay 存回
怎么组合多个宏实现复杂流程
宏可以互相调用,把大任务拆成小步骤更清晰可靠:
- 先录 qb:比如 f:x(找到冒号,删其后第一个字符)
- 再录 qa:比如 0f:@b j(跳行首 → 找冒号 → 调用 b 宏 → 下行)
- 这样 @a 就自动完成“定位→删字符→换行”的整套动作
- 嵌套不限层级,但注意避免无限循环(比如 a 调用 b,b 又调用 a)
不复杂但容易忽略:宏依赖光标初始位置和上下文结构,录之前先手动走一遍流程,确认每步都能稳定复现。











