Wie kann ich Unterschiede anzeigen, wenn Emacs vorschlägt, diese Datei wiederherzustellen?

51

Manchmal passiert es: emacs fordert Sie auf, nicht gespeicherte Änderungen an einer Datei wiederherzustellen, aber Sie können sich nicht erinnern, ob Sie diese Änderungen möchten oder nicht.

Gibt recover-this-filees eine Möglichkeit, ausgehend vom Puffer einen Unterschied anzuzeigen oder die Änderungen auf andere Weise direkt zu sehen?

Zum Beispiel so etwas wie das, was sich magit-modeergibt, wenn eine bearbeitete Datei im Statuspuffer abgelegt wird.

Sparx
quelle

Antworten:

51

Nachdem Sie recover-this-filedie Autosave-Version ausgeführt und akzeptiert haben, haben Sie einen geänderten Puffer, der den Inhalt der Autosave-Version enthält. An dieser Stelle können Sie M-x diff-buffer-with-file RETdie Unterschiede zwischen dem geänderten Puffer und der gespeicherten Datei anzeigen.

Der Schlüssel, den ich dafür gebunden habe, führt tatsächlich eine benutzerdefinierte Funktion aus, um ein einheitliches Diff zu erzeugen und die Eingabeaufforderung für den Puffer zu überspringen (er übernimmt den aktuellen Puffer).

(defun my-diff-buffer-with-file ()
  "Compare the current modified buffer with the saved version."
  (interactive)
  (let ((diff-switches "-u")) ;; unified diff
    (diff-buffer-with-file (current-buffer))))

Es gibt auch ein Ediff-Äquivalent (das ich im Allgemeinen bevorzuge, obwohl ich beides verwende), das unter verfügbar ist M-x ediff-current-file RET

Wenn Sie die Änderungen nach dem Prüfen des Unterschieds verwerfen möchten, sollten Sie in der Lage sein, einfach undodie Wiederherstellung durchzuführen. (Ansonsten kannst du immer revert-bufferoder benutzen find-alternate-file.)

Da Tastenkombinationen für diff-Befehle häufig erforderlich sind =, finde ich Folgendes bequem (nb Ich habe die Standardbindung C-zaufgehoben und stattdessen in verschoben C-z C-z, was sich C-zals Präfix für benutzerdefinierte Bindungen öffnet ):

(global-set-key (kbd "C-z =") 'my-diff-buffer-with-file)
(global-set-key (kbd "C-z C-=") 'ediff-current-file)
Phils
quelle