commands git vim vimdiff

commands - git, vimdiff y dirdiff



vimdiff commands (4)

Estoy tratando de usar vimdiff + dirdiff.vim para diferenciar dentro de varios archivos Vim versionados con Git.

Para Mercurial, es posible con la extensión de mercurial extdiff .

La única forma que encontré en la web para integrar Vim con Git diff es usar vimdiff en un archivo único, como se describe en esta publicación .

¿Alguien sabe cómo usar vimdiff + dirdiff + git?


Antes de git versión 1.7.11

git-diffall es lo que necesito, muchas gracias. Con la ayuda de esta page sobre git difftool y sobre la ejecución de vim + dirdiff desde la línea de comandos, escribí mi $HOME/.gitconfig como:

[diff] tool = default-difftool [difftool "default-difftool"] cmd = vim -f ''+next'' ''+execute /"DirDiff/" argv(0) argv(1)'' $LOCAL $REMOTE [difftool] prompt = false

Después de poner git-diffall en mi PATH , puedo diferenciar, por ejemplo, el directorio de trabajo con rama dev con:

git diffall dev

El --copy-back también es lo que necesito si quiero modificar el directorio de trabajo de Vim de forma persistente:

git diffall --copy-back dev

Desde git versión 1.7.11

Desde la versión 1.7.11 , "git difftool" aprendió la opción "--dir-diff" que simplifica las cosas y ya no se necesita git-diffall .

.gitconfig contiene:

[diff] tool = default-difftool [difftool "default-difftool"] cmd = vim -f ''+next'' ''+execute /"DirDiff/" argv(0) argv(1)'' $LOCAL $REMOTE ''+syntax off''

Y diferenciar, por ejemplo, el directorio de trabajo con rama dev se hace con:

git difftool -d dev


El fugitive Tim Pope es el complemento de git por excelencia para vim. Puede que no tenga la funcionalidad de dirdiff, pero integra la salida de git status hermosa, con asignaciones de teclas para navegar fácilmente entre archivos modificados. Todos los archivos enumerados en la salida de git status se pueden diferenciar fácilmente con la asignación en D , lo que le permite personalizar los cambios exactos de sus cambios.



Sería interesante monitorear las confirmaciones para el fugitivo del módulo Vim , ya que, comenzando con ( git 1.7.11 , junio de 2012), git ahora puede diferir directorios (es decir, mostrar todos los archivos que se compararán, antes de abrir el difftool )

Ver " git difftool para dar comparación de directorio? "

Entonces, agregar esa característica a fugitive.vim sería una evolución de un enfoque de archivo a archivo.

Sin embargo, Zyx señala en el comentario los límites de ese enfoque:

Todo lo que necesitas para que funcione es:

  1. git diff --name-status y
  2. git cat-file ,

Nada más (excepto algún código vimscript ).
Y, a diferencia de git difftool , esto funciona para cualquier VCS con vcs diff y vcs cat-file support

Zyx menciona como ejemplo del enfoque de archivo por archivo su proyecto aurum :

Mi aurum tiene una funcionalidad AuVimDiff full ( AuVimDiff full abre un montón de pestañas con vista de vimdiff de archivos que tienen diferencias) y nunca usó ningún tipo de soporte de difftool .

(Ver script aurum / autoload / aurum / vimdiff.vim )

Zyx agrega:

no puede ser una buena guía para una persona que desea agregar esta funcionalidad a fugitivo:
La llamada real de git diff --name-status está oculta dentro del controlador git en una función llamada por s:git.status accede como repo.functions.status (porque mercurial usa hg status -r rev1:rev2 , no hg diff --name-status y me parece bastante lógico).
Por lo tanto, debe atravesar tres niveles de abstracción aquí (interfaz del repositorio, envoltura de comandos de shell y solo entonces la llamada git real).
Es más rápido escribir todo desde cero.