2011-04-25 81 views
5

我正在研究一個變得相當複雜的腳本。我懷疑有幾個部分具有幾乎相同的代碼。我可以(以及如何)在vim中打開文件,在緩衝區上有兩個(或多個)窗口,並將窗口的內容在同一個文件中進行區分? vimdiff似乎只適用於兩個文件。如果我製作了該文件的副本並嘗試使用vimdiff這兩個版本,則diff起始位置將保持鎖定在文件的開頭。雖然我可以解除鎖定窗口,並將窗口移動到文件的某些部分,但我想比較這些差異並不顯示出來。任何提示或提示?我可以將需要比較的部分剪切並粘貼到不同的文件中,然後應用vimdiff,但是當我嘗試將單獨的文件修補到一起時,我可能會迷失在從哪裏來的部分,我確信必須有更直接的方法,更簡單的方法。vim中的差異窗口

回答

2

我最常做的是diff來複制

:%w %.alt 
:vert diffsplit %.alt 

然後happiliy重新排列的「ALT」版本,這樣的僞匹配位都對齊。


注意(可能)的git包含漂亮的合併/ DIFF牛權力,應該能夠檢測分檔手動擋改變

雖然我還沒有(實際上)將其付諸實踐,但我有一個預感,那就是vim的git插件fugitive可能能夠利用這些功能來簡化操作。 注:完全有理由相信這是可用之前需要scriptinh,但我仍然認爲這將是很好的分享這個想法

+0

好的,使用%來指代當前緩衝區的文件名是好的,我沒有意識到這一點!但我仍然不確定如何重新排列正確的版本,以便匹配的比特被對齊。 :se noscrollbind似乎有幫助,但我怎樣才能讓vim突出顯示兩個窗口之間的差異? – ChrisDR 2011-04-25 15:38:05

+0

我的意思是字面重新排列(我使用C/C#,所以'd2] M'刪除了兩個方法,導航到插入點,'P'和瞧);另外'正確的ALT版本'是'ALT版本'的拼寫錯誤。我知道這仍然是手工勞動,但(除了使用Git的複製/移動檢測的想法),我知道沒有更好的方法。使用臨時副本的技巧很簡單。 – sehe 2011-04-25 15:46:11

1

作爲替代(也許你可以共享一個腳本,如果你得到它第一次!)我偶爾使用過的解決方案,在我看來,這個解決方案非常好,是linediff.vim

它允許您使用視覺模式從任意緩衝區中選擇兩個文本主體(或同樣的事情)並在其上運行vimdiff。它的優點在於,當您編輯並保存臨時差異緩衝區時,您可以使用更改更新原始緩衝區,而無需保存。

我的一個用例是我解決與腳本重構和重新排序有關的合併問題,其中一個函數已被移動並且可能還被修改。爲了確保不會丟失祖先所做的任何修改,您可以通過直觀地選擇它們並運行linediff命令來單獨分析函數的兩個版本。