【vimdiff 】 vimdiff 使用教程

各種 IDE 大行其道的同時爽航,傳統(tǒng)的命令行工具以其短小精悍,隨手可得的特點仍有很大的生存空間秋秤,這篇短文介紹了一個文本比較和合并的小工具:vimdiff拖刃。希望能對在 Unix/Linux 系統(tǒng)上進行開發(fā)的朋友有所幫助。

源程序文件(通常是純文本文件)比較和合并工具一直是軟件開發(fā)過程中比較重要的組成部分☆砉眨現(xiàn)在市場上很多功能很強大的專用比較和合并工具徘键,比如 BeyondCompare;很多IDE 或者軟件配置管理系統(tǒng)遍蟋,比如Eclipse, Rational ClearCase都提供了內(nèi)建的功能來支持文件的比較和合并吹害。

當遠程工作在Unix/Linux平臺上的時候,恐怕最簡單而且到處存在的就是命令行工具匿值,比如diff赠制。可惜diff的功能有限挟憔,使用起來也不是很方便钟些。作為命令行的比較工具,我們?nèi)匀幌M軗碛泻唵蚊髁说慕缑姘硖罚梢允刮覀兡軌驅Ρ容^結果一目了然政恍;我們還希望能夠在比較出來的多處差異之間快速定位,希望能夠很容易的進行文件合并……达传。而vim提供的diff模式篙耗,通常稱作vimdiff迫筑,就是這樣一個能滿足所有這些需求,甚至能夠提供更多的強力工具宗弯。在最近的工作中脯燃,因為需要做很多的文件比較和合并的工作,因此對vimdiff的使用做了一個簡單的總結蒙保。

一辕棚、啟動方法

首先保證系統(tǒng)中的diff命令是可用的,vim的diff模式依賴于diff命令邓厕。

vimdiff的基本用法就是:

# vimdiff ? ? ? ? ? ? ?FILE_LEFT ? ????FILE_RIGHT

# vimdiff ? -d ? ? ? ?FILE_LEFT ? ??FILE_RIGHT??//左右豎屏

# vimdiff ? -o ? ? ? ? FILE_LEFT ? ??FILE_RIGHT?//上下橫屏

vimdiff命令的執(zhí)行結果

從上圖我們可以看到一個清晰的比較結果逝嚎。屏幕被垂直分割,左右兩側分別顯示被比較的兩個文件详恼。

兩個文件中連續(xù)的相同的行被折疊了起來补君,以便使用者能把注意力集中在兩個文件的差異上。

只在某一文件中存在的行的背景色被設置為藍色昧互,而在另一文件中的對應位置被顯示為綠色挽铁。

兩個文件中都存在,但是包含差異的行顯示為粉色背景硅堆,引起差異的文字用紅色背景加以突出屿储。

除了用這種方法啟動vim的diff模式之外,我們還可以用分割窗口命令來啟動diff模式渐逃,也可以達到同樣的效果:

# vim FILE_LEFT

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

:vertical diffsplit ?FILE_RIGHT

如果希望交換兩個窗口的位置够掠,或者希望改變窗口的分割方式,可以使用下列命令:

1.Ctrl-w ?K(把當前窗口移到最上邊)

2.Ctrl-w ?J(把當前窗口移到最下邊)

3.Ctrl-w ? H(把當前窗口移到最左邊)

4.Ctrl-w ? L(把當前窗口移到最右邊)

二茄菊、光標移動

試試在行間移動光標疯潭,可以看到左右兩側的屏幕滾動是同步的。

這是因為"scrollbind"選項被設置了的結果面殖,vim會盡力保證兩側文件的對齊竖哩。

如果不想要這個特性,可以設置:

:set noscrollbind

可以使用快捷鍵在各個差異點之間快速移動

跳轉到下一個差異點:]c

反向跳轉是:[c

如果在命令前加上數(shù)字的話脊僚,可以跳過一個或數(shù)個差異點相叁,從而實現(xiàn)跳的更遠。

如果在位于第一個差異點的行輸入"2]c"辽幌,將越過下一個差異點增淹,跳轉到第三個差異點。

三乌企、文件合并

文件比較的最終目的之一就是合并虑润,以消除差異。

如果希望把一個差異點中當前文件的內(nèi)容復制到另一個文件里加酵,可以使用命令:

dp?(diff "put")

//從當前復制到另一個

如果希望把另一個文件的內(nèi)容復制到當前行中拳喻,可以使用命令:

do(diff "obtain")

//從另一個復制到當前

之所以不用dg(diff "obtain")哭当,是因為dg已經(jīng)被另一個命令占用了

指定范圍的合并

1.先指定范圍1-100行,再用另外一個窗口的不同處替換當前:

:1,100 diffg?或者:1,100 diffget

這里冗澈,等同于do(diff obtain)不過指定了范圍钦勘,如果有緩沖還可在diffg后面指定緩沖名字

2.先指定范圍1-100行,再用另外一個窗口的不同處替換當前:

:1,100 diffpu?或者??:1,100 diffput

這里渗柿,等同于dp(diff put)不過指定了范圍个盆,如果有緩沖還可在diffpu后面指定緩沖名字

如果希望手工修改某一行,可以使用通常的vim操作朵栖。

如果希望在兩個文件之間來回跳轉,可以用下列命令序列:

Ctrl-w, w

在修改一個或兩個文件之后柴梆,vimdiff會試圖自動來重新比較文件陨溅,來實時反映比較結果。但是也會有處理失敗的情況绍在,這個時候需要手工來刷新比較結果:

:diffupdate

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

?u

注意:一定要將光標移動到需要撤銷修改的文件窗口中

四偿渡、同時操作兩個文件

比較和合并告一段落之后臼寄,可以用下列命令對兩個文件同時進行操作。

同時退出:

:qa (quit all)

如果希望保存全部文件:

:wa (write all)

或者是兩者的合并命令溜宽,保存全部文件吉拳,然后退出:

:wqa (write, then quit all)

如果在退出的時候不希望保存任何操作的結果:

:qa! (force to quit all)

五、上下文的展開和查看

比較和合并文件的時候經(jīng)常需要結合上下文來確定最終要采取的操作适揉。

vimdiff 缺省是會把不同之處上下各 6 行的文本都顯示出來以供參考留攒,其他的相同的文本行被自動折疊。

如果希望修改缺省的上下文行數(shù)嫉嘀,可以這樣設置:

:set diffopt=context:3

用簡單的折疊命令來臨時展開被折疊的相同的文本行:

zo (folding open)

用下列命令來重新折疊:

zc (folding close)

之所以用z這個字母炼邀,是因為它看上去比較像折疊著的紙

注意:展開折疊需要將光標移至折疊處

下圖是設置上下文為3行,并展開了部分相同文本的vimdiff屏幕:

六剪侮、結論

在無法使用圖形化的比較工具的時候拭宁,或者在需要快速比較和合并少量文件的時候,vimdiff是最好的選擇瓣俯。

參考資料

vim主頁:http://www.vim.org

vim中文幫助:http://man.chinaunix.net/newsoft/vi/doc/help.html

vi/vim使用進階:

http://easwy.com/blog/archives/advanced-vim-skills-catalog/

http://www.ibm.com/developerworks/cn/linux/l-vimdiff/

http://hi.baidu.com/_jg_/blog/item/ff62e6d5d9ecf315a08bb77c.html

http://hi.baidu.com/nkhzj/blog/item/e6b5a7017222100a1d958307.html

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杰标,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子降铸,更是在濱河造成了極大的恐慌在旱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件推掸,死亡現(xiàn)場離奇詭異桶蝎,居然都是意外死亡驻仅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門登渣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來噪服,“玉大人,你說我怎么就攤上這事胜茧≌秤牛” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵呻顽,是天一觀的道長雹顺。 經(jīng)常有香客問我,道長廊遍,這世上最難降的妖魔是什么嬉愧? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮喉前,結果婚禮上没酣,老公的妹妹穿的比我還像新娘。我一直安慰自己卵迂,他們只是感情好裕便,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著见咒,像睡著了一般偿衰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上论颅,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天哎垦,我揣著相機與錄音,去河邊找鬼恃疯。 笑死漏设,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的今妄。 我是一名探鬼主播郑口,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盾鳞!你這毒婦竟也來了犬性?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腾仅,失蹤者是張志新(化名)和其女友劉穎乒裆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體推励,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鹤耍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年肉迫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稿黄。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡喊衫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杆怕,到底是詐尸還是另有隱情族购,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布陵珍,位于F島的核電站寝杖,受9級特大地震影響,放射性物質發(fā)生泄漏撑教。R本人自食惡果不足惜朝墩,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伟姐。 院中可真熱鬧,春花似錦亿卤、人聲如沸愤兵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秆乳。三九已至,卻和暖如春钻哩,著一層夾襖步出監(jiān)牢的瞬間屹堰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工街氢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扯键,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓珊肃,卻偏偏與公主長得像荣刑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伦乔,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容