2010-03-11 86 views
9

我希望能夠運行在vim中打開git diff的命令,併爲差異集中的每個文件分配一個選項卡。如何在vim中並排查看多個git差異

因此,如果例如我在我的工作樹中更改了文件foo.txt和bar.txt,並且運行了命令,我會看到vim以兩個選項卡打開。第一個選項卡將包含工作樹中的foo.txt和存儲庫中的foo.txt之間的並排diff,第二個選項卡包含bar.txt的並排diff。

任何人有任何想法?

回答

7

我會改變新vim標籤做到這一點(雖然它不是一個單一的命令)

  1. 打開文件的方式:

    VIM -p $(git的差異--name - 只)

  2. 對於每一個緩衝區得到DIFF到您當前的HEAD與vcscommand vim plugin

    :VCSVimDiff

這給出了一個很好的觀點,但不是補丁形式。我想堅持git diff

編輯

像戴夫下面寫道:步驟1和2可以通過使用

vim -p $(git diff --name-only) -c "tabdo VCSVimDiff" 
+2

您可以將它組合成一個命令,該命令可以放入shell腳本或函數中。 (未經測試的代碼): vim -p $(git diff --name-only)-c「tabdo VCSVimDiff」 – 2010-03-11 20:39:47

+0

我嘗試了單行命令和2部分命令。它只會打開最後一個選項卡的差異。其他選項卡必須具有:VCSVimDiff調用它們。解決方案?..我很想讓所有的選項卡運行差異。 – Scoobie 2010-07-29 17:55:29

1

雖然它不會做你想要什麼,混帳difftool可能是你最好的選擇相結合。 'git difftool --tool = vimdiff --no-prompt HEAD'的開箱即用行爲是爲工作目錄中的每個文件按順序啓動vimdiff並進行更改。

3

改編Benjamin Bannier + Dave Kirby上面的逃犯用戶的回答。

,因爲我使用fugitive.vim,我適應了上面我最經常使用的情況下,看最後2個提交之間的差異:

vim -p $(git diff --name-only HEAD~1 HEAD) -c "tabdo :Gdiff HEAD~1" 

加載所有變爲標籤是如此美好比順序通過git difftool

0

這個簡單的插件已經爲我工作:TabMultiDiff。它基本上爲傳遞給vim的每一對文件創建一個diff選項卡。該選項卡以每對中的第二個文件命名。

請注意,它不是plugin manager compatible,所以您需要通過將tab-multi-diff.vim複製到.vim/plugin來手動安裝它。

下面是比較兩對簡單文件(aaa/aab和aac/aad)的截圖。請注意,我也使用vim-scripts/diffchar.vim這就是個別字符突出顯示的原因。 enter image description here