2010-02-09 52 views
2

標題真的說了一切。有-O選項可以垂直打開分割,而-o可以水平分割,但是嘗試混合它們似乎不起作用。在命令行中混合vim中的垂直和水平分割

我的目標是使用g/vimdiff進行mercurial中的3路文件合併,其方式更像kdiff3。這個方法可以將3個文件合併爲頂部(我的本地版本,我正在合併的文件的另一版本,以及兩者之間的基本版本)的3個垂直製表符,而「輸出」或合併的結果,是一個橫跨底部的大型水平標籤。

回答

2

這是一個小缺憾,但它的工作原理:

vim -c "wincmd J" -O base diff1 diff2 

(這是一個逐字控制-W有)

也許有一個更優雅的方法,但這只是將它們全部加載爲垂直,然後將活動(第一個)移動到底部。

+0

「更優雅」的方式是使用'wincmd J'代替。 – jamessan 2010-02-09 15:09:09

+0

嗯,你的更多是我所認爲的優雅,儘管你是對的。 (當然我不確定'wincmd {arg}'和'normal^W {arg}'之間在內部有多大的差異) – Cascabel 2010-02-09 15:39:18

+0

我喜歡一個好的混合物,而且這是做這個工作的。具體在.hgrc中添加一點:filemerge.args = -c「wincmd J」-g -d -O $ output $ local $ other $ base – user17925 2010-02-09 16:24:18

1

儘管Vim允許您提供超過2個文件進行擴散,但它並不是特別適用於比雙向比較更好的操作。

無論如何,您無法指定使用-O-o進行分割的不同方法。您將獲得的最好方法是採購腳本以運行(通過-S 3way.vim)或使用--cmd參數來設置拆分並更改在這些拆分中顯示哪些緩衝區。

潛在3way.vim,假設你調用VIM爲vim -S 3way.vim localfile otherversion baseversion merged

botright vsplit +b2 " Opens a split and focuses otherversion 
botright vsplit +b3 " Opens a split and focuses baseversion 
botright split +b4 " Opens a split and focuses merged 
wincmd =    " Resize all windows so they share space equally