這裡介紹如何使用 Vimdiff 來比較兩個檔案之間的差異,這個小工具可以讓開發者在檢查不同版本的程式碼時輕鬆很多。

一般在 Linux 系統中,如果要比較兩個文字檔案的差異,最常見的方式就是使用 diff 指令:

diff FILE_LEFT FILE_RIGHT

不過因為 diff 的功能有限,要靠 diff 來辨識檔案之間的差異處也不是很方便,如果您會使用 Vim 這個編輯器,那麼改用 vimdiff 會方便許多。


vimdiff 的使用方式跟 diff 類似:

vimdiff FILE_LEFT FILE_RIGHT

不過他會直接開啟 Vim 編輯器,以很直覺方式顯示檔案的差異,透過這樣的介面來閱覽程式碼會比直接看 diff 的輸出更好辨識。

vimdiff

如果您喜歡使用 GVim,也可以使用 gvimdiff,使用方式也都相同。

gvimdiff FILE_LEFT FILE_RIGHT

gvimdiff

除了以指令的方式呼叫 vimdiff 之外,在 Vim 的環境中也可以透過分割視窗的指令來啟動 diff 的功能。假設我們正在編輯一個檔案:

vim FILE_LEFT

這時候我們可以直接使用這樣的指令來啟用 diff 的功能:

:vertical diffsplit FILE_RIGHT
在 Windows 平台中,Vim 7.3 與 7.4 版 _vimrc 中的 MyDiff() 會造成 diff 的功能不正常,這裡有提供修正的版本,將原本 _vimrc 中的 MyDiff() 替換掉即可正常使用。

如果要在各個差異點之間快速移動,可以使用這兩個指令:

  • ]c:跳到下一個差異點。
  • [c:跳到前一個差異點。

卷軸與游標同步

vimdiff 預設的狀態下,左右兩邊的卷軸是保持同步的,也就是說不管您捲動哪一個檔案的卷軸,另一個檔案也會一起捲動,這個功能在比較檔案差異性時會很方便。而如果要取消卷軸同步的功能,可以使用這個 Vim 指令:

:set noscrollbind

而游標的同步功能也跟卷軸類似,若要取消可以使用

:set nocursorbind

唯讀模式

如果您只要查看檔案的差異,而不想更動到任何檔案內容,可以使用唯讀模式開啟 vimdiff

viewdiff FILE_LEFT FILE_RIGHT

或是使用 GVim:

gviewdiff FILE_LEFT FILE_RIGHT

自訂 vimdiff 環境

如果您想要針對 vimdiff 的環境設定一些 Vim 的選項(例如開啟行號),可以在 .vimrc 中加入以下設定:

if &diff
  " diff 模式設定
else
  " 非 diff 模式設定
endif

這樣就可以將 diff 模式與一般的編輯模式區分開來,做一些特別的設定。

參考資料:IBMvimdoc