Vim 效率组合技:dot 命令与重复的艺术
更新时间:2026-08-30。本文是
languages/vim/主题高手层第 9 篇(A2:PlantUML + 机制 + ≥2 实测 + ≥2 交叉引用)。
本文要回答的问题
.点命令到底重复什么?不重复什么?- 怎么把一次编辑"设计成可重复"?
- 点命令和宏(macro)各自的甜区在哪?
一、机制:. 重复"上一次修改"
. 重复的是上一次改变缓冲区的操作(一次完整的"动词+对象"或插入动作),但不包括移动。这是 Vim 哲学的核心:把编辑拆成可重复的原子动作。
二、实战:逐处同样改
把三行的 temp 改成 result:
vim
/temp<Enter> " 跳到第一处
ciwresult<Esc> " 改词为 result(这是一个可重复动作)
n " 下一处
. " 重复 ciwresult → 第二处搞定
n " 下一处
. " 第三处搞定n 跳、\. 改,比宏轻量,适合"改动一致、数量不多"的场景。
三、设计可重复操作
关键:让一次操作自包含。比如想给每行结尾加分号,用 A;<Esc>(append 到行尾加分号)是一个完整动作,. 就能在每行重复;而 $(本行尾)a;(先移动到行尾再 append)里混了移动,. 只重复 a; 不重复移动,反而更可控——取决于你想重复到什么粒度。
四、dot vs 宏
| 维度 | . 点命令 | 宏 @a |
|---|---|---|
| 复杂度 | 单步动作 | 多步序列 |
| 适用 | 改动一致、逐处跳着改 | 动作复杂、需跨多步 |
| 心智 | 零成本 | 需录制 |
经验:先用 .,不够再加宏(见 宏)。
五、与金字塔衔接
一句话总结
. 重复上一次修改动作(不含移动);把编辑设计成自包含的原子动作后,用 n 跳、. 改,逐处一致地改——轻量于宏,是 Vim 重复艺术的精髓。
上一篇:Vim 会话、书签与标记 下一篇:Vim vimscript 函数与数据结构