28

Vim文件差异比较工具vimdiff和vim -d命令详细 | vim教程网

 5 years ago
source link: https://vimjc.com/vimdiff.html?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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窗口分割方法

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

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

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

2. vimdiff配色设置

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

vimdiff配置

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

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

1
2
3
4
5
6
7
8
" 新增的行 "
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

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

vimdiff颜色

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代码折叠

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模式进行差异化设置,对应配置的基本结构如下:

1
2
3
4
5
6
if &diff
" vim diff 模式下的特殊配置 "
set nonu
else
....
endif
qrcode.jpg

《女程序员说》

原创不易,希望能给小女子的公众号加个关注~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK