Voir tous les "git diffs" avec vimdiff

210

J'ai configuré git diffpour envelopper dans vimdiff, en utilisant " Git Diff avec Vimdiff " comme guide, et cela fonctionne comme prévu à moins qu'il y ait beaucoup de fichiers avec des changements.

Lorsqu'il y a plusieurs fichiers avec des modifications et que je lance git diff, il ouvre le premier fichier et, après avoir quitté la première instance de vimdiff, le message suivant s'affiche:

external diff died, stopping at filename

C'est un comportement complètement différent de celui auquel je suis habitué. J'avais une configuration similaire dans le passé avec SVN et, lorsque je différais de plusieurs fichiers, j'examinais le premier fichier, puis j'écrivais et quittais l'utilisation :wqet le fichier suivant avec des différences s'ouvrait.

Ce n'est pas le cas avec Git. J'ai essayé :n[ext], mais cela ne remplit pas la fenêtre de gauche avec le fichier d'origine afin qu'il puisse être différent de la version modifiée.

chuckg
la source

Réponses:

338
git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

La frappe git ddonne le comportement attendu, en tapant :wqdans les cycles vim vers le fichier suivant dans le changeset.

chuckg
la source
22
Juste mes deux cents: j'ai dfaliasé diffet dtaliasé à difftool. De plus, la saisie :qadans Vim fera défiler le jeu de modifications suivant sans rien enregistrer.
JC Yamokoski
2
Cette solution est excellente, sauf que lors de l'enregistrement des modifications, vous devez taper ": w!" au lieu de: w
Asenar
2
@jonyamo La définition d'un alias doit toujours être basée sur la fréquence à laquelle nous utilisons certaines commandes. J'utilise souvent git diffthan git difftool. J'ai donc pris un alias dpour «diff» et 'dt' to difftool ». L'utilisabilité est plus importante que la création d'alias avec motif.
Habeeb Perwad
Comment faire pour que "git diff" utilise vimdiff?, Cette réponse me fait utiliser un alias. Si je alias "diff" ne fonctionne pas.
Rombus
6
@Asenar "Cette solution est excellente sauf que lors de l'enregistrement des modifications, vous devez taper :w!au lieu de :w". C'est parce que git appelle vimdiffavec l' -Roption. Vous pouvez le remplacer par git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'. Cela ouvrira vimdiff en mode inscriptible.
wisbucky
103

Vous pouvez essayer git difftool, il est conçu pour faire ce genre de choses.

Tout d'abord, vous devez configurer l'outil diff pour vimdiff

git config diff.tool vimdiff

Ensuite, lorsque vous voulez faire une différence, utilisez simplement git difftoolau lieu de git diff. Cela fonctionnera comme prévu.

czchen
la source
1
Presque là! Modifié un peu c'est exactement ce que je recherche. +1 cependant!
chuckg
1
L'outil mergetiff de vimdiff a récemment été mis à jour: git.kernel.org/?p=git/… (et quelques autres commits, mais c'est le plus grand). Vous ne savez pas quand sera la prochaine version de maintenance, mais si vous êtes prêt à construire à partir de git.git, les mises à niveau seront à vous!
Cascabel
21
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff
git config --global diff.tool kdiff3
git config --global diff.tool meld
git config --global diff.tool xxdiff
git config --global diff.tool emerge
git config --global diff.tool gvimdiff
git config --global diff.tool ecmerge
Nanhe Kumar
la source
3
Vous répondez pour le mergetool, pas pour le difftool. Mais c'est toujours une réponse utile. +1.
dotancohen
@dotancohen Vraiment merci, je n'ai jamais remarqué que, par erreur idiote, je peux maintenant modifier ma réponse.
Nanhe Kumar
1
@NanheKumar, @dotancohen, le remplacement mergepar diffdans les réponses ci-dessus fera l'affaire, c'est-à - diregit config --global diff.tool vimdiff .
Will
2

Pour les personnes qui souhaitent utiliser un autre outil diff non répertorié dans git, dites avec nvim. voici ce que j'ai fini par utiliser:

git config --global alias.d difftool -x <tool name>

Dans mon cas, je mets <tool name>à nvim -det appeler la commande diff

git d <file>
poisson-chat salé
la source