2010-03-11 1 views
9

Mi piacerebbe essere in grado di eseguire un comando che apre un git diff in vim, con una scheda per ogni file nel set di differenze.Come posso visualizzare più differenze di git affiancate in vim

Quindi se per esempio ho modificato i file foo.txt e bar.txt nel mio albero di lavoro e ho eseguito il comando vedrei vim aperto con due schede. La prima scheda conterrebbe una differenza affiancata tra foo.txt nella mia struttura di lavoro e foo.txt nel repository e la seconda scheda conterrà un confronto affiancato per bar.txt.

Qualcuno ha qualche idea?

risposta

7

Il modo in cui vorrei fare questo (anche se non è un singolo comando)

  1. Aprire i file con i cambiamenti in nuove schede: vim

    vim -p $ (git diff --name -solo)

  2. per ogni buffer di ottenere il diff alla testa corrente con il vcscommand vim plugin

    : VCSVimDiff

Questo dà una buona visione della differenza, anche se non in forma di patch.

Per qualsiasi altra cosa, vorrei attenermi a git diff.

EDIT

come Dave scrive qui di seguito, i punti 1 e 2 possono essere combinati utilizzando

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

È possibile combinarlo in un unico comando, che potrebbe essere inserito in uno script di shell o in una funzione. (codice non testato successivo): vim -p $ (git diff --name-only) -c "tabdo VCSVimDiff" –

+0

Ho provato entrambi i comandi one-liner e 2 parti. Fa solo il diff per l'ultima scheda aperta. Altre schede devono avere: VCSVimDiff chiamato su di loro. Soluzioni? .. Mi piacerebbe avere tutte le schede in esecuzione diff. – Scoobie

1

Anche se non fa esattamente quello che vuoi, git difftool è probabilmente la soluzione migliore . Il comportamento out of the box di 'git difftool --tool = vimdiff --no-prompt HEAD' è di lanciare vimdiff sequenzialmente per ogni file nella directory di lavoro con le modifiche.

3

Adattamento Benjamin Bannier + Risposta di Dave Kirby sopra per utenti fuggiaschi.

Perché io uso fugitive.vim, ho adattato quanto sopra per il mio caso d'uso più frequente, guardando il diff tra le ultime 2 commit:

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

Caricamento tutti i cambiamenti in schede è molto meglio che passare attraverso di loro in sequenza con git difftool.

0

Questo semplice plug-in ha funzionato per me: TabMultiDiff. Fondamentalmente crea una scheda diff per ogni coppia di file passati a vim. La scheda prende il nome dal secondo file in ogni coppia.

Nota che non è plugin manager compatible, quindi è necessario installarlo manualmente copiando tab-multi-diff.vim in .vim/plugin.

Ecco uno screenshot di confronto di due coppie di file semplici (aaa/aab e aac/aad). Si noti che uso anche vim-scripts/diffchar.vim, motivo per cui i singoli caratteri sono evidenziati. enter image description here