日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

非常強(qiáng)大的文件比較工具:Vimdiff

系統(tǒng) 1827 0
各種 IDE 大行其道的同時(shí),傳統(tǒng)的命令行工具以其短小精悍,隨手可得的特點(diǎn)仍有很大的生存空間,這篇短文介紹了一個(gè)文本比較和合并的小工具:vimdiff。希望能對(duì)在 Unix/Linux 系統(tǒng)上進(jìn)行開(kāi)發(fā)的朋友有所幫助。

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

當(dāng)遠(yuǎn)程工作在Unix/Linux平臺(tái)上的時(shí)候,恐怕最簡(jiǎn)單而且到處存在的就是命令行工具,比如diff。可惜diff的功能有限,使用起來(lái)也不是很方便。作為命令行的比較工具,我們?nèi)匀幌M軗碛泻?jiǎn)單明了的界面,可以使我們能夠?qū)Ρ容^結(jié)果一目了然;我們還希望能夠在比較出來(lái)的多處差異之間快速定位,希望能夠很容易的進(jìn)行文件合并……。而Vim提供的diff模式,通常稱作vimdiff,就是這樣一個(gè)能滿足所有這些需求,甚至能夠提供更多的強(qiáng)力工具。在最近的工作中,因?yàn)樾枰龊芏嗟奈募容^和合并的工作,因此對(duì)Vimdiff的使用做了一個(gè)簡(jiǎn)單的總結(jié)。我們先來(lái)看看vimdiff的基本使用。

啟動(dòng)方法

首先保證系統(tǒng)中的diff命令是可用的。Vim的diff模式是依賴于diff命令的。Vimdiff的基本用法就是:


            # vimdiff  FILE_LEFT  FILE_RIGHT

          

或者


            # vim -d  FILE_LEFT  FILE_RIGHT

          

圖一就是vimdiff命令的執(zhí)行結(jié)果的畫(huà)面。


圖1

從上圖我們可以看到一個(gè)清晰的比較結(jié)果。屏幕被垂直分割,左右兩側(cè)分別顯示被比較的兩個(gè)文件。兩個(gè)文件中連續(xù)的相同的行被折疊了起來(lái),以便使用者能把注意力集中在兩個(gè)文件的差異上。只在某一文件中存在的行的背景色被設(shè)置為藍(lán)色,而在另一文件中的對(duì)應(yīng)位置被顯示為綠色。兩個(gè)文件中都存在,但是包含差異的行顯示為粉色背景,引起差異的文字用紅色背景加以突出。

除了用這種方法啟動(dòng)vim的diff模式之外,我們還可以用分割窗口命令來(lái)啟動(dòng)diff模式:


            # vim FILE_LEFT

          

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


            :vertical diffsplit FILE_RIGHT

          

也可以達(dá)到同樣的效果。如果希望交換兩個(gè)窗口的位置,或者希望改變窗口的分割方式,可以使用下列命令:

1. Ctrl-w K(把當(dāng)前窗口移到最上邊)
2. Ctrl-w H(把當(dāng)前窗口移到最左邊)
3. Ctrl-w J(把當(dāng)前窗口移到最下邊)
4. Ctrl-w L(把當(dāng)前窗口移到最右邊)

其中1和3兩個(gè)操作會(huì)把窗口改成水平分割方式。




回頁(yè)首


光標(biāo)移動(dòng)

接下來(lái)試試在行間移動(dòng)光標(biāo),可以看到左右兩側(cè)的屏幕滾動(dòng)是同步的。這是因?yàn)?scrollbind"選項(xiàng)被設(shè)置了的結(jié)果,vim會(huì)盡力保證兩側(cè)文件的對(duì)齊。如果不想要這個(gè)特性,可以設(shè)置:


            :set noscrollbind

          

可以使用快捷鍵在各個(gè)差異點(diǎn)之間快速移動(dòng)。跳轉(zhuǎn)到下一個(gè)差異點(diǎn):


            ]c


          

反向跳轉(zhuǎn)是:


            [c

          

如果在命令前加上數(shù)字的話,可以跳過(guò)一個(gè)或數(shù)個(gè)差異點(diǎn),從而實(shí)現(xiàn)跳的更遠(yuǎn)。比如如果在位于第一個(gè)差異點(diǎn)的行輸入"2]c",將越過(guò)下一個(gè)差異點(diǎn),跳轉(zhuǎn)到第三個(gè)差異點(diǎn)。




回頁(yè)首


文件合并

文件比較的最終目的之一就是合并,以消除差異。如果希望把一個(gè)差異點(diǎn)中當(dāng)前文件的內(nèi)容復(fù)制到另一個(gè)文件里,可以使用命令


            dp (diff "put")

          

如果希望把另一個(gè)文件的內(nèi)容復(fù)制到當(dāng)前行中,可以使用命令


            do (diff "get",之所以不用dg,是因?yàn)閐g已經(jīng)被另一個(gè)命令占用了)

          

如果希望手工修改某一行,可以使用通常的vim操作。如果希望在兩個(gè)文件之間來(lái)回跳轉(zhuǎn),可以用下列命令序列:


            Ctrl-w, w

          

在修改一個(gè)或兩個(gè)文件之后,vimdiff會(huì)試圖自動(dòng)來(lái)重新比較文件,來(lái)實(shí)時(shí)反映比較結(jié)果。但是也會(huì)有處理失敗的情況,這個(gè)時(shí)候需要手工來(lái)刷新比較結(jié)果:


            :diffupdate

          

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


            <ESC>, u

          

但是要注意一定要將光標(biāo)移動(dòng)到需要撤銷修改的文件窗口中。




回頁(yè)首


同時(shí)操作兩個(gè)文件

在比較和合并告一段落之后,可以用下列命令對(duì)兩個(gè)文件同時(shí)進(jìn)行操作。比如同時(shí)退出:


            :qa (quit all)

          

如果希望保存全部文件:


            :wa (write all)

          

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


            :wqa (write, then quit all)

          

如果在退出的時(shí)候不希望保存任何操作的結(jié)果:


            :qa! (force to quit all)

          




回頁(yè)


上下文的展開(kāi)和查看

比較和合并文件的時(shí)候經(jīng)常需要結(jié)合上下文來(lái)確定最終要采取的操作。Vimdiff 缺省是會(huì)把不同之處上下各 6 行的文本都顯示出來(lái)以供參考。其他的相同的文本行被自動(dòng)折疊。如果希望修改缺省的上下文行數(shù),可以這樣設(shè)置:


            :set diffopt=context:3

          

可以用簡(jiǎn)單的折疊命令來(lái)臨時(shí)展開(kāi)被折疊的相同的文本行:


            zo (folding open,之所以用z這個(gè)字母,是因?yàn)樗瓷先ケ容^像折疊著的紙)

          

然后可以用下列命令來(lái)重新折疊:


            zc (folding close)

          

下圖是設(shè)置上下文為3行,并展開(kāi)了部分相同文本的vimdiff屏幕:


非常強(qiáng)大的文件比較工具:Vimdiff





結(jié)論

在無(wú)法使用圖形化的比較工具的時(shí)候,或者在需要快速比較和合并少量文件的時(shí)候,Vimdiff是最好的選擇。

非常強(qiáng)大的文件比較工具:Vimdiff


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 玉溪市| 定远县| 南丰县| 邛崃市| 通化县| 慈利县| 静宁县| 柘城县| 揭阳市| 司法| 富宁县| 罗定市| 门源| 琼海市| 满洲里市| 青神县| 桦甸市| 自治县| 沧州市| 南丰县| 措勤县| 永春县| 韶山市| 梧州市| 炎陵县| 宣汉县| 六枝特区| 徐水县| 宽甸| 苗栗县| 汤原县| 牡丹江市| 昌江| 酒泉市| 开封市| 通州市| 罗平县| 灌南县| 清远市| 磴口县| 乃东县|