Vim diff 模式:对比文件与三方合并
更新时间:2026-08-30。本文是
languages/vim/主题高手层第 5 篇(A2:PlantUML + 机制 + ≥2 实测 + ≥2 交叉引用)。
本文要回答的问题
- 怎么用 Vim 对比两个文件?
- 差异块怎么跳?怎么把一边改应用到另一边?
- 三方合并(3-way)怎么用?
一、机制:diff 模式并排比对
vim -d 启动 diff 模式,Vim 调用内部 diff 算法算出两文件差异,并排显示、高亮不同块,自动 foldmethod=diff 折起相同部分。
二、启动与导航
bash
vim -d config.old config.new # 命令行启动
# 或已在 Vim 内:
:vertical diffsplit other.py # 当前文件右分屏对比 other.py| 键 / 命令 | 作用 |
|---|---|
]c / [c | 跳到下一个 / 上一个差异块 |
do | 把对方的改动取到当前窗(diff obtain) |
dp | 把当前窗的改动推给对方(diff put) |
:diffupdate | 改完刷新差异高亮 |
zo / zc | 展开 / 折叠相同区段 |
三、实战:合并配置改动
左窗 nginx.conf.old,右窗 nginx.conf.new。想把右窗新增的一段 server 块搬过来:
vim
]c " 跳到该差异块
do " 取到当前(左)窗
:diffupdate " 刷新do=从对方拿,dp=推给对方,记不清就联想 obtain / put。
四、三方合并(3-way)
Git 合并冲突时,可让 Git 用 Vim 作 mergetool:
bash
git config --global merge.tool vimdiff
git mergetool # 打开 LOCAL / BASE / REMOTE 三窗 + 结果窗在结果窗(最左或指定)里 :diffget BASE 等取各路改动,存盘即解决冲突。
五、与金字塔衔接
一句话总结
vim -d a b 并排高亮差异;]c/[c 跳块、do 取对方/dp 推给对方合并、:diffupdate 刷新;配合 git mergetool 还能做三方合并——review 与合并配置的利器。