卡拉图

您现在的位置是:首页 > vim教程网 > vim比较文件内容不同和vim差异比较工具vimdiffe及vim -d命令详细

vim比较文件内容不同和vim差异比较工具vimdiffe及vim -d命令详细

筱程SEO2019-06-30vim教程网
vimdiff命令是Vim提供的文件差异比较工具,vimdiff的作用与启动Vim时增加启动参数 -d 完全一致
即 vimdiff file1 file2 等价于 vim -d file1 file2 。本文仅以vimdiff差异比较工具的使用为例讲解Vim针对文件差异比较提供的能力。

1. 启动Vim diff模式

默认情况下,vimdiff打开的窗口都是垂直分割的 (等价于启动Vim时使用了 -O 参数),如果想使用水平分割Vim窗口的方式显示文件的diff结果,可以使用 vimdiff -o file1 file2。

关于Vim多窗口显示下的窗口切换等操作,您可以参考Vim分屏命令及Vim屏幕分割分屏技巧总结

如果已经打开了Vim,仍然可以通过Vim命令行命令 :diffsplit、:diffthis 或 :diffpatch 三个命令进入diff模式。

打开Vim的diff窗口后,可以使用 :qa 命令退出所有窗口,关于Vim的退出,推荐阅读Vim 退出命令详解及14种退出Vim的方法和区别 - Vim入门教程。。

如果正在diff的状态的某个文件进行了修改,vimdiff会自动重新比较文件参与,如果实时diff失败了,可以通过Vim命令行窗口 :diffupdate 来进行手工刷新比较差异结果。

2. vimdiff配色设置

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

vimdiff配置


可以通过Vim命令行模式或在Vim配置文件中使用 :highlight 命令对vimdiff的各种配色进行个性化设置,例如,:highlight DiffAdd 可用来设置新增行的颜色,:highlight highlight DiffText 可用来设置具有差异的文件的颜色。

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

3. 差异结果跳转

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

此外,如谈谈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代码折叠。

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

扩展阅读

文章评论