2010-03-11 10 views
9

Me gustaría poder ejecutar un comando que abre una diferencia de git en vim, con una pestaña para cada archivo en el conjunto de diferencias.¿Cómo puedo ver múltiples diferencias git una al lado de la otra en vim

Así que si, por ejemplo, he cambiado los archivos foo.txt y bar.txt en mi árbol de trabajo y ejecuté el comando, vi vim abrir con dos pestañas. La primera pestaña contendría una diferencia lado a lado entre foo.txt en mi árbol de trabajo y foo.txt en el repositorio, y la segunda pestaña contendría un diff lado a lado para bar.txt.

¿Alguien tiene alguna idea?

Respuesta

7

La manera en que yo haría esto (aunque no es un solo comando)

  1. abrir archivos con cambios en las nuevas pestañas: vim

    vim -p $ (git diff --name -sólo)

  2. Por cada búfer obtener el diff a la cabeza actual con el vcscommand vim plugin

    : VCSVimDiff

Esto ofrece una buena vista de la diferencia, aunque no en forma de parche.

Para cualquier otra cosa me quedaría con git diff.

EDITAR

como Dave escribe a continuación, los pasos 1 y 2 se puede combinar con

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

Puede combinarlo en un comando, que se puede poner en un script o función de shell. (código no probado adelante): vim -p $ (git diff --name-only) -c "tabdo VCSVimDiff" –

+0

Intenté tanto el comando de una línea como el de 2 partes. Solo hace la diferencia para la última pestaña abierta. Otras pestañas tienen que tener: VCSVimDiff las invocó. Soluciones? .. Me encantaría obtener todas las pestañas ejecutando diffs. – Scoobie

1

A pesar de que no hace exactamente lo que quiere, difftool Git es probablemente su mejor apuesta . El comportamiento fuera de la caja de 'git difftool --tool = vimdiff --no-prompt HEAD' es ejecutar vimdiff secuencialmente para cada archivo en el directorio de trabajo con cambios.

3

Respuesta adaptada de Benjamin Bannier + Dave Kirby anterior para usuarios fugitivos.

porque uso fugitive.vim, me he adaptado lo anterior para mi caso de uso más frecuente, mirando el diff entre las 2 últimas se compromete:

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

Cargando todos los cambios en pestañas es mucho mejor que pasar por ellos secuencialmente con git difftool.

0

Este plugin simple ha funcionado para mí: TabMultiDiff. Básicamente, crea una pestaña de diferencias para cada par de archivos pasados ​​a vim. La pestaña se nombra después del segundo archivo en cada par.

Tenga en cuenta que no es plugin manager compatible, por lo que debe instalarlo manualmente copiando tab-multi-diff.vim en .vim/plugin.

Aquí hay una captura de pantalla de la comparación de dos pares de archivos simples (aaa/aab y aac/aad). Tenga en cuenta que también uso vim-scripts/diffchar.vim por lo que los caracteres individuales están resaltados. enter image description here

Cuestiones relacionadas