vimdiff 命令相当于 vim -d a.txt b.txt,用来查看两个文件的 diff。 可以通过 :highlight 命令来进行 diff 配色,也可以将 vimdiff 设置到 Git 的 diff 工具。

vimdiff

基本使用

查看两个文件的 Diff:

vimdiff a.txt b.txt
# 相当于
vim -d a.txt b.txt

退出 Diff 查看需要关闭两个文件,可以按下 :qa 来关闭所有。

diff 的配色

Vim 配置 中可以使用 highlight(缩写为 hi)命令来配置各种高亮颜色, 比如我们在 Vim 搜索配置 中提到的匹配文字的前景色与背景色:

highlight Search ctermbg=yellow ctermfg=black 

可以通过 :help highlight-groups 查看所有可配置的高亮。比如在 Diff 高亮中, 你可能需要配置以下 4 个高亮组:

" 新增的行
hi DiffAdd    ctermbg=235  ctermfg=108  guibg=#262626 guifg=#87af87 cterm=reverse gui=reverse
" 变化的行
hi DiffChange ctermbg=235  ctermfg=103  guibg=#262626 guifg=#8787af cterm=reverse gui=reverse
" 删除的行
hi DiffDelete ctermbg=235  ctermfg=131  guibg=#262626 guifg=#af5f5f cterm=reverse gui=reverse
" 变化的文字
hi DiffText   ctermbg=235  ctermfg=208  guibg=#262626 guifg=#ff8700 cterm=reverse gui=reverse

xterm 支持 256 种颜色,这里给了一个列表:http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim。通过数字就可以引用对应的颜色,比如 ctermfg=226 等价于 ctermfg=yellow

Colors in Xterm

Tmux 256 色终端

在 Tmux 中打开的 Vim 颜色配置可能是失效的。 这是因为 Tmux 的默认 终端 设置为 screen,需要把它设置为 screen-256color。 在 ~/.tmux.conf 中添加如下 Tmux 配置

set -g default-terminal "screen-256color"

在 Tmux 中通过 tmux show -g 来查看当前的 Tmux 设置。

Git 使用 vimdiff

为了使用自定义的 diff 工具,Git 提供了 git difftool 命令在这时替代 git diff。 我们把它的命令行工具配置到 vimdiff

git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

gitdiff 在打开每一个文件的 diff 时都会进行输入确认,设置 difftool.prompt 可以禁用这一行为。

此后使用 git difftool 时 Git 便会调用 vimdiff 逐一打开每个文件的 Diff。 查看完成一个文件的 diff 后使用 :qa 关闭该文件 diff。这时 Git 会自动打开下一个文件的 diff。 如果中止本次 Diff 呢?首先需要让 Git 信任 difftool 的返回码:

git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true

然后让 vimdiff 返回 1::cq:help cquit)退出 Vim。

本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2017/05/31/vimdiff.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。