Vim文件差别比较工具vimdiff和vim -d命令详细

vimdiff命令是Vim提供的文件差别比较工具,vimdiff的做用与打开Vim时增长启动参数 -d 彻底一致,即 vimdiff file1 file2 等价于 vim -d file1 file2 。下文仅以vimdiff工具的使用为例讲解Vim针对文件差别比较提供的能力。html

1. 启动Vim diff模式

默认状况下,vimdiff打开的窗口都是垂直分割的 (等价于启动Vim时使用了 -O 参数),若是想使用水平分割Vim窗口的方式显示文件的diff结果,可使用 vimdiff -o file1 file2。关于Vim多窗口显示下的窗口切换等操做,能够参考Vim窗口分割方法vim

若是真正diff的某个文件进行了修改,vimdiff会自动从新比较文件参与,若是实时diff失败了,能够经过Vim命令行窗口 :diffupdate 来手工刷新比较结果。bash

若是已经打开了Vim,仍然能够经过Vim命令行命令 :diffsplit:diffthis:diffpatch 三个命令进入diff模式。工具

打开Vim的diff窗口后,可使用 :qa 命令退出全部窗口,关于Vim的退出,推荐阅读14种退出Vim的方法及区别ui

2. vimdiff配色设置

默认状况下,被diff的两个文件中连续相同的多个行会被折叠起来,只在某一文件中存在的行以蓝色背显示,而在另外一文件中的对应位置将显示绿色;两个文件中都存在但包含差别的行会以粉色背景显示,而引发差别的文字将用红色背景突出显示。this

vimdiff配置

能够经过Vim命令行模式或在Vim配置文件中使用 :highlight 命令对vimdiff的各类配色进行个性化设置,例如,:highlight DiffAdd 可用来设置新增行的颜色,:highlight highlight DiffText 可用来设置具备差别的文件的颜色。spa

xterm 可支持显示 256 种颜色,能经过数字直接引用对应的颜色,例如,一个可用的个性化vimdiff配色方案以下:命令行

" 新增的行 "
highlight DiffAdd ctermbg=235  ctermfg=108  guibg=#262626 guifg=#87af87 cterm=reverse gui=reverse
" 删除的行 "
highlight DiffDelete ctermbg=235  ctermfg=131  guibg=#262626 guifg=#af5f5f cterm=reverse gui=reverse
" 差别的行 "
highlight DiffChange ctermbg=235  ctermfg=103  guibg=#262626 guifg=#8787af cterm=reverse gui=reverse
" 差别的文字 "
highlight DiffText ctermbg=235  ctermfg=208  guibg=#262626 guifg=#ff8700 cterm=reverse gui=reverse
复制代码

上述配置的显示效果以下图所示。code

vimdiff颜色

3. 差别结果跳转

默认状况下,在某个窗口中移动光标时,对应的另外一侧屏幕也会同步进行滚动。能够在Vim普通模式下使用 ]c 命令正向跳转到当前diff结果的下一个差别点,若是要反向跳转到上一个差别点,可使用 [c 命令。cdn

此外,如谈谈Vim中的操做符和动做命令一文所介绍,还能够在跳转命令前加上执行次数指示Vim 重复执行 相应次数的跳转命令,实现一次跳过多个差别点的效果。

例如,若是当前光标位于第 1 个差别点,普通模式下执行 2]c 命令后会直接跳过下一个差别点,将光标跳转到第 3* 个差别点处。

4. vimdiff折叠和展开

默认状况下,vimdiff会把不一样之处上下各 6 行的文本显示出来以供参考。其余的相同文本行会被自动折叠。若是但愿修改缺省的上下文行数,能够经过 diffopt=context 选项进行设置,例如,:set diffopt=context:10 将设置diff相同文本的上下文行数为10。

也能够用Vim折叠命令 zo 来展开被折叠的相同文本行,若是但愿从新折叠相同的文本行,能够在Vim普通模式下使用 zc 命令进行折叠关闭操做。此外,无论是打开仍是关闭Vim折叠,均可以使用 za 命令,推荐阅读Vim代码折叠

vimdiff折叠

5. 文件合并

大多数状况下,对文件进行diff操做后都会进行文件合并。针对当前光标所在差别点,若是但愿把当前文件中的内容复制到另外一个文件里,可使用 dp 命令 (dp的含义是diff put)。

相似地,若是但愿把另外一个文件的内容复制到当前行中,可使用 do 命令 (do的含义是 diff get,但因为 dg 已经做为Vim diff模式的设置选项 digraph 的缩写形式,因此使用diff obtain来表示)。

vimdiff-put-get

6. 在vimrc文件中个性化设置vimdiff

Vim的配置文件 .vimrc能够显式地针对Vim diff模式进行差别化设置,对应配置的基本结构以下:

if &diff
    " vim diff 模式下的特殊配置 "
    set nonu
else
    ....
endif
复制代码
相关文章
相关标签/搜索