Как просмотреть diff, когда emacs предлагает восстановить этот файл?

51

Иногда это происходит: emacs предлагает вам восстановить несохраненные изменения в файле, но вы не можете вспомнить, хотите ли вы эти изменения или нет.

Начиная с recover-this-fileбуфера, есть ли способ просмотреть diff или иным образом напрямую увидеть изменения?

Например, что-то вроде того, что magit-modeдает при закладке отредактированного файла в буфер состояния.

Sparx
источник

Ответы:

51

После запуска recover-this-fileи принятия версии автосохранения у вас будет измененный буфер, содержащий содержимое автосохранения. На данный момент вы можете использовать, M-x diff-buffer-with-file RETчтобы увидеть различия между измененным буфером и сохраненным файлом.

Ключ, который я назначил для этого, на самом деле запускает пользовательскую функцию, чтобы создать унифицированную разность и пропустить запрос для буфера (он предполагает текущий буфер).

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

Есть также эквивалентный ediff (который я обычно предпочитаю, хотя я использую оба), который доступен в M-x ediff-current-file RET

Если вы хотите отклонить изменения после проверки различий, вы можете просто undoвосстановить. (В противном случае вы всегда можете использовать revert-bufferили find-alternate-file.)

Поскольку привязки клавиш для команд diff часто включают в себя =, я нахожу следующее удобным (но я отменил C-zпривязку по умолчанию и переместил ее вместо нее C-z C-z, что открывает C-zпрефикс для пользовательских привязок):

(global-set-key (kbd "C-z =") 'my-diff-buffer-with-file)
(global-set-key (kbd "C-z C-=") 'ediff-current-file)
Phils
источник