vimdiff用法
手工做code merge的時候,經(jīng)常會用到文件比較與同步的工具。vimdiff是我比較喜歡的。
首先保證系統(tǒng)中的diff命令是可用的。Vim的diff模式是依賴于diff命令的。
Vimdiff的基本用法就是:
vimdiff FILE_LEFT FILE_RIGHT
或者
vim -d FILE_LEFT FILE_RIGHT
屏幕被垂直分割,左右兩側(cè)分別顯示被比較的兩個文件。兩個文件中連續(xù)的相同的行被折疊了起來,以便使用者能 把注意力集中在兩個文件的差異上。只在某一文件中存在的行的背景色被設(shè)置為藍(lán)色,而在另一文件中的對應(yīng)位置被顯示為綠色。兩個文件中都存在,但是包含差異 的行顯示為粉色背景,引起差異的文字用紅色背景加以突出。
除了用這種方法啟動vim的diff模式之外,我們還可以用分割窗口命令來啟動diff模式:
vim FILE_LEFT
然后在vim的ex模式(也就是”冒號”模式)下輸入:
:vertical diffsplit FILE_RIGHT
也可以達(dá)到同樣的效果。
如果希望交換兩個窗口的位置,或者希望改變窗口的分割方式,可以使用下列命令:
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兩個操作會把窗口改成水平分割方式。
光標(biāo)移動
接下來試試在行間移動光標(biāo),可以看到左右兩側(cè)的屏幕滾動是同步的。這是因?yàn)椤眘crollbind”選項(xiàng)被設(shè)置了的結(jié)果,vim會盡力保證兩側(cè)文件的對齊。如果不想要這個特性,可以設(shè)置:
:set noscrollbind
可以使用快捷鍵在各個差異點(diǎn)之間快速移動。跳轉(zhuǎn)到下一個差異點(diǎn):
]c
反向跳轉(zhuǎn)是:
[c
如果在命令前加上數(shù)字的話,可以跳過一個或數(shù)個差異點(diǎn),從而實(shí)現(xiàn)跳的更遠(yuǎn)。比如如果在位于第一個差異點(diǎn)的行輸入”2]c”,將越過下一個差異點(diǎn),跳轉(zhuǎn)到第三個差異點(diǎn)。
文件合并
文件比較的最終目的之一就是合并,以消除差異。如果希望把一個差異點(diǎn)中當(dāng)前文件的內(nèi)容復(fù)制到另一個文件里,可以使用命令
dp (diff “put”)
如果希望把另一個文件的內(nèi)容復(fù)制到當(dāng)前行中,可以使用命令
do (diff “get”,之所以不用dg,是因?yàn)閐g已經(jīng)被另一個命令占用了)
如果希望手工修改某一行,可以使用通常的vim操作。如果希望在兩個文件之間來回跳轉(zhuǎn),可以用下列命令序列:
Ctrl-w, w
在修改一個或兩個文件之后,vimdiff會試圖自動來重新比較文件,來實(shí)時反映比較結(jié)果。但是也會有處理失敗的情況,這個時候需要手工來刷新比較結(jié)果:
:diffupdate
如果希望撤銷修改,可以和平常用vim編輯一樣,直接
, u
但是要注意一定要將光標(biāo)移動到需要撤銷修改的文件窗口中。
同時操作兩個文件
在比較和合并告一段落之后,可以用下列命令對兩個文件同時進(jìn)行操作。比如同時退出:
:qa (quit all)
如果希望保存全部文件:
:wa (write all)
或者是兩者的合并命令,保存全部文件,然后退出:
:wqa (write, then quit all)
如果在退出的時候不希望保存任何操作的結(jié)果:
:qa! (force to quit all)
上下文的展開和查看
比較和合并文件的時候經(jīng)常需要結(jié)合上下文來確定最終要采取的操作。Vimdiff 缺省是會把不同之處上下各6行的文本都顯示出來以供參考。其他的相同的文本行被自動折疊。如果希望修改缺省的上下文行數(shù),可以這樣設(shè)置:
:set diffopt=context:3
可以用簡單的折疊命令來臨時展開被折疊的相同的文本行:
zo (folding open,之所以用z這個字母,是因?yàn)樗瓷先ケ容^像折疊著的紙)
然后可以用下列命令來重新折疊:
zc (folding close)
總結(jié)
- 上一篇: 栈链式结构简单操作
- 下一篇: 7.scala初识 柯里化、隐式参数、隐