Gibt es einen Emacs-Modus, der Unterschiede zur festgeschriebenen Version hervorhebt?

31

Ein Feature von Xcode, das ich für ziemlich gut halte, ist der "Vergleichs" -Modus, in dem ständig Unterschiede zwischen dem aktuellen Puffer und dem letzten Commit angezeigt werden.

Vergleichsmodus

Gibt es so etwas für Emacs? Die gleichzeitigen Side-by-Side-Ansichten interessieren mich nicht wirklich. Das Hervorheben des Hintergrunds geänderter Zeilen wäre eine große Hilfe.

Ich weiß, dass ich das immer tun kann C-x v =, aber es ist eine statische Ansicht eines Zeitpunkts und zeigt nur die Unterschiede. Ich möchte meine gesamte bearbeitbare Datei mit hervorgehobenen Diffs sehen.

Ken
quelle

Antworten:

30

Die diff-hl- Bibliothek von Dmitry Gutov bietet diff-hl-modeIhnen die im oberen Fenster des folgenden Screenshots gezeigte Randhervorhebung (mit dem tatsächlichen Diff im unteren Fenster zum Vergleich):

diff-hl Screenshot

Es nutzt die generischen vcFunktionen in Emacs, um VCS-unabhängig zu sein. In der Readme-Datei heißt es: "Getestet mit Git, Mercurial, Bazaar und SVN. Funktioniert möglicherweise auch mit anderen VC-Backends."

Beachten Sie, dass dies diff-hl-margin-modeverwendet werden kann, wenn Sie Terminal-Emacs anstelle von GUI-Emacs verwenden.

Standardmäßig werden diff-hlnur die Unterschiede zwischen der gespeicherten Datei und dem Repository hervorgehoben. Es können jedoch auch diff-hl-flydiff-modenicht gespeicherte Unterschiede hervorgehoben werden, damit Sie die Änderungen während der Bearbeitung sehen können.

Beachten Sie auch die eingebauten (zu Standard-Emacs) highlight-changes-mode. Das geht Ihr Problem nicht wirklich sofort an, aber die highlight-compare-*Funktionen könnten eine Lösung erleichtern.

Phils
quelle
# 33 wurde behoben.
Dmitry
1
Dmitry: In der Tat - ich habe es in den letzten Tagen tatsächlich ausprobiert und ich kann bestätigen, dass diese Funktion sehr gut funktioniert :)
phils
Freut mich, das zu hören; Es wurde von einem sehr geduldigen Mitwirkenden geschrieben. Vielen Dank für die Aktualisierung der Antwort!
Dmitry
10

Sie geben nicht an, welches Versionskontrollsystem Sie verwenden, aber wenn es sich um Git handelt, können Sie Git-Gutter verwenden , um einen Indikator an den Rändern einzufügen, wenn eine Zeile hinzugefügt, gelöscht oder geändert wurde. Es ist in MELPA über verfügbar M-x package-install git-gutter.

erikstokes
quelle
Das sieht ziemlich ähnlich aus, wie ich es mir vorgestellt habe, aber es scheint, als würde nur die Rinne aktualisiert, wenn der Puffer gespeichert wird. Ich frage mich, wie schwer es sein würde, sich in Flymake zu integrieren (oder auf andere Weise eher so zu handeln) ...
Ken
10

Sie sollten Ediff überprüfen . Es kann sowohl Unterschiede anzeigen als auch als (3-Wege) Zusammenführungswerkzeug fungieren. Sie können damit Änderungen leicht rückgängig machen und verfeinerte Unterschiede hervorheben, um nur die Teile jedes Hunks anzuzeigen, die sich tatsächlich geändert haben.

Screenshot von Ediff

ediff-revision Damit können Sie leicht mit dem letzten Commit oder früheren Commits vergleichen.

Lily Chung
quelle