技巧 Vimdiff 使用

2022-05-02 10:06:08 字數 2854 閱讀 1843

**:

源程式檔案(通常是純文字檔案)比較和合併工具一直是軟體開發過程中比較重要的組成部分。現在市場上很多功能很強大的專用比較和合併工具,比如 beyondcompare;很多ide 或者軟體配置管理系統,比如eclipse, rational clearcase都提供了內建的功能來支援檔案的比較和合併。

當遠端工作在unix/linux平台上的時候,恐怕最簡單而且到處存在的 就是命令列工具,比如diff。可惜diff的功能有限,使用起來也不是很方便。作為命令列的比較工具,我們仍然希望能擁有簡單明瞭的介面,可以使我們能 夠對比較結果一目了然;我們還希望能夠在比較出來的多處差異之間快速定位,希望能夠很容易的進行檔案合併……。而vim提供的diff模式,通常稱作 vimdiff,就是這樣乙個能滿足所有這些需求,甚至能夠提供更多的強力工具。在最近的工作中,因為需要做很多的檔案比較和合併的工作,因此對 vimdiff的使用做了乙個簡單的總結。我們先來看看vimdiff的基本使用。

首先保證系統中的diff命令是可用的。vim的diff模式是依賴於diff命令的。vimdiff的基本用法就是:

# vimdiff  file_left  file_right
或者

# vim -d  file_left  file_right
圖一就是vimdiff命令的執行結果的畫面。

從上圖我們可以看到乙個清晰的比較結果。螢幕被垂直分割,左右兩側分別顯示被比較的兩個檔案。兩個檔案中連續的相 同的行被摺疊了起來,以便使用者能把注意力集中在兩個檔案的差異上。只在某一檔案中存在的行的背景色被設定為藍色,而在另一檔案中的對應位置被顯示為綠 色。兩個檔案中都存在,但是包含差異的行顯示為粉色背景,引起差異的文字用紅色背景加以突出。

除了用這種方法啟動vim的diff模式之外,我們還可以用分割視窗命令來啟動diff模式:

# vim file_left
然後在vim的ex模式(也就是"冒號"模式)下輸入:

:vertical diffsplit file_right
也可以達到同樣的效果。如果希望交換兩個視窗的位置,或者希望改變視窗的分割方式,可以使用下列命令:

1. ctrl-w k(把當前視窗移到最上邊)

2. ctrl-w h(把當前視窗移到最左邊)

3. ctrl-w j(把當前視窗移到最下邊)

4. ctrl-w l(把當前視窗移到最右邊)

其中1和3兩個操作會把視窗改成水平分割方式。

接下來試試在行間移動游標,可以看到左右兩側的螢幕滾動是同步的。這是因為"scrollbind"選項被設定了的結果,vim會盡力保證兩側檔案的對齊。如果不想要這個特性,可以設定:

:set noscrollbind

]c
反向跳轉是:

[c
如果在命令前加上數字的話,可以跳過乙個或數個差異點,從而實現跳的更遠。比如如果在位於第乙個差異點的行輸入"2]c",將越過下乙個差異點,跳轉到第三個差異點。

檔案比較的最終目的之一就是合併,以消除差異。如果希望把乙個差異點中當前檔案的內容複製到另乙個檔案裡,可以使用命令

dp(diff "put")
如果希望把另乙個檔案的內容複製到當前行中,可以使用命令

do(diff "get",之所以不用dg,是因為dg已經被另乙個命令占用了)
如果希望手工修改某一行,可以使用通常的vim操作。如果希望在兩個檔案之間來回跳轉,可以用下列命令序列:

ctrl-w, w
在修改乙個或兩個檔案之後,vimdiff會試圖自動來重新比較檔案,來實時反映比較結果。但是也會有處理失敗的情況,這個時候需要手工來重新整理比較結果:

:diffupdate
如果希望撤銷修改,可以和平常用vim編輯一樣,直接

, u
但是要注意一定要將游標移動到需要撤銷修改的檔案視窗中。

在比較和合併告一段落之後,可以用下列命令對兩個檔案同時進行操作。比如同時退出:

:qa(quit all)
如果希望儲存全部檔案:

:wa(write all)
或者是兩者的合併命令,儲存全部檔案,然後退出:

:wqa(write, then quit all)
如果在退出的時候不希望儲存任何操作的結果:

:qa!(force to quit all)
比較和合併檔案的時候經常需要結合上下文來確定最終要採取的操作。vimdiff 預設是會把不同之處上下各 6 行的文字都顯示出來以供參考。其他的相同的文字行被自動摺疊。如果希望修改預設的上下文行數,可以這樣設定:

:set diffopt=context:3
可以用簡單的摺疊命令來臨時展開被摺疊的相同的文字行:

zo(folding open,之所以用z這個字母,是因為它看上去比較像摺疊著的紙)
然後可以用下列命令來重新摺疊:

zc(folding close)
下圖是設定上下文為3行,並展開了部分相同文字的vimdiff螢幕:

使用vimdiff替換預設的 svn diff

目標 vimdiff可以快速wrap很長的一行資訊自動換行 vimrc begin for vimdiff func wrap set wrap endfunc map call wrap call wrap imap call wrap call wrap end for vimdiff 目標 替...

vimdiff比較日誌

vimdiff比較日誌確實好用 實用的vim下比較兩個檔案命令 1 vimdiff file1 file2 終端下輸入該命令進入vim,垂直分隔視窗進行比較 2 vimdiff o file1 file2 vim下加入file1和當前游標所在視窗進行比較,水平分隔視窗 11 vert diffs f...

git 使用vimdiff 格式顯示比對檔案

可以指定外邊的diff工具來顯示檔案差異,可以使用 git difftool tool help 檢視difftool可用的工具 如果不指定預設的difftool工具,需要使用 extcmd 引數指定具體的diff工具,比如 git difftool extcmd vimdiff cache pri...