Jak wyświetlić diff, gdy emacs sugeruje odzyskanie tego pliku?

51

Czasami tak się dzieje: emacs monituje o odzyskanie niezapisanych zmian w pliku, ale nie pamiętasz, czy chcesz te zmiany, czy nie.

Zaczynając od recover-this-filebufora, czy istnieje sposób, aby wyświetlić różnicę lub w inny sposób bezpośrednio zobaczyć zmiany?

Na przykład coś takiego, co magit-modedaje, gdy tabulowany jest edytowany plik w buforze stanu.

Sparx
źródło
1
Powiązane: Czy w programie „naprawdę edytuj bufor” emacs automatycznie uruchamia plik ediff-current-file?
Gilles 'SO - przestań być zły'

Odpowiedzi:

51

Po uruchomieniu recover-this-filei zaakceptowaniu wersji automatycznego zapisywania będziesz mieć zmodyfikowany bufor zawierający zawartość automatycznego zapisu. W tym momencie możesz użyć, M-x diff-buffer-with-file RETaby zobaczyć różnice między zmodyfikowanym buforem a zapisanym plikiem.

Klucz, do którego się do tego zobowiązałem, faktycznie uruchamia funkcję niestandardową, w celu utworzenia zunifikowanego pliku różnicowego i pominięcia monitu o bufor (przyjmuje on bieżący bufor).

(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))))

Istnieje również odpowiednik ediff (który ogólnie wolę, chociaż używam obu), który jest dostępny na stronie M-x ediff-current-file RET

Jeśli chcesz odrzucić modyfikacje po sprawdzeniu różnicy, powinieneś być w stanie po prostu undoodzyskać. (W przeciwnym razie zawsze możesz użyć revert-bufferlub find-alternate-file.)

Ponieważ często występują skróty klawiaturowe dla poleceń diff =, uważam, że jest to wygodne (nb odwiązałem domyślne C-związanie i przeniosłem je do C-z C-z, które otwiera się C-zjako przedrostek dla niestandardowych powiązań):

(global-set-key (kbd "C-z =") 'my-diff-buffer-with-file)
(global-set-key (kbd "C-z C-=") 'ediff-current-file)
phils
źródło