Existe-t-il un mode Emacs qui met en évidence les différences par rapport à la version validée?

31

Une fonctionnalité de Xcode qui, je pense, est assez soignée est un mode "Comparaison", qui montre continuellement les différences entre le tampon actuel et le commit le plus récent.

Mode de comparaison

Y a-t-il quelque chose comme ça pour Emacs? Je ne me soucie pas vraiment des vues côte à côte simultanées. La simple mise en évidence de l'arrière-plan de toutes les lignes modifiées serait d'une grande aide.

Je sais que je peux toujours le faire C-x v =, mais c'est une vue statique d'un point dans le temps, et ne montre que les différences. Je veux voir l'intégralité de mon fichier, modifiable, avec les différences mises en évidence.

Ken
la source

Réponses:

30

La bibliothèque diff-hl de Dmitry Gutov fournit diff-hl-mode, ce qui vous donne la surbrillance des franges montrée dans la fenêtre du haut dans la capture d'écran suivante (avec le diff réel affiché dans la fenêtre du bas pour comparaison):

capture d'écran diff-hl

Il utilise la vcfonctionnalité générique dans Emacs pour être indépendant de VCS. Le readme dit "Testé avec Git, Mercurial, Bazaar et SVN. Peut également fonctionner avec d'autres backends VC."

Notez que cela diff-hl-margin-modepeut être utilisé si vous utilisez des Emacs terminaux plutôt que des Emacs GUI.

Par défaut, diff-hlne met en évidence que les différences entre le fichier enregistré et le référentiel; mais diff-hl-flydiff-modepermet également de mettre en évidence les différences non enregistrées, de sorte que vous puissiez voir les modifications lors de la modification.

Notez également le intégré (aux Emacs standard) highlight-changes-mode. Cela ne résout pas vraiment votre problème dès le départ, mais les highlight-compare-*fonctions peuvent faciliter une solution.

phils
la source
# 33 a été résolu.
Dmitry
1
Dmitry: En effet - je l'ai en fait essayé ces derniers jours, et je peux confirmer que cette fonctionnalité fonctionne très bien :)
phils
Je suis heureux de l'entendre; il a été écrit par un contributeur très patient. Merci d'avoir mis à jour la réponse!
Dmitry
10

Vous ne spécifiez pas le système de contrôle de version que vous utilisez, mais si c'est git, vous pouvez utiliser git-gutter pour mettre un indicateur dans les marges lorsqu'une ligne a été ajoutée, supprimée ou modifiée. Il est disponible dans MELPA via M-x package-install git-gutter.

erikstokes
la source
Cela ressemble assez à ce que j'imaginais, mais il semble que cela ne met à jour la gouttière que lorsque le tampon est enregistré. Je me demande à quel point il serait difficile de s'intégrer à (ou d'agir autrement comme) Flymake ...
Ken
10

Vous devriez vérifier Ediff . Il peut à la fois afficher les différences et agir comme un outil de fusion (à 3 voies). Il vous permet d'annuler facilement les modifications et met également en évidence des différences raffinées pour vous montrer uniquement les parties de chaque morceau qui ont réellement changé.

capture d'écran d'ediff

ediff-revision vous permettra de comparer facilement le commit le plus récent ou tout commit précédent.

Lily Chung
la source