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
複製代碼
相關文章
相關標籤/搜索