Làm thế nào để xem diff khi emacs đề nghị khôi phục tập tin này?


51

Đôi khi điều đó xảy ra: emacs nhắc bạn về việc khôi phục các thay đổi chưa được lưu vào một tệp, nhưng bạn không thể nhớ nếu bạn muốn những thay đổi đó hay không.

Bắt đầu từ recover-this-filebộ đệm, có cách nào để xem khác biệt hoặc trực tiếp nhìn thấy những thay đổi không?

Ví dụ, một cái gì đó giống như những gì magit-modemang lại khi gắn thẻ vào một tệp đã chỉnh sửa trong bộ đệm trạng thái.


Câu trả lời:


51

Sau khi chạy recover-this-filevà chấp nhận phiên bản tự động lưu, bạn sẽ có một bộ đệm được sửa đổi có chứa nội dung tự động lưu. Tại thời điểm này, bạn có thể sử dụng M-x diff-buffer-with-file RETđể xem sự khác biệt giữa bộ đệm đã sửa đổi và tệp đã lưu.

Khóa mà tôi đã ràng buộc cho điều này thực sự chạy một chức năng tùy chỉnh, để tạo ra một sự khác biệt thống nhất và bỏ qua lời nhắc cho bộ đệm (nó giả sử bộ đệm hiện tại).

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

Ngoài ra còn có một tương đương ediff (mà tôi thường thích, mặc dù tôi sử dụng cả hai) có sẵn tại M-x ediff-current-file RET

Nếu bạn muốn từ chối các sửa đổi sau khi kiểm tra khác biệt, bạn có thể chỉ cần undokhôi phục. (Không thể bạn luôn có thể sử dụng revert-bufferhoặc find-alternate-file.)

Vì các phím bấm cho các lệnh diff thường liên quan =, tôi thấy tiện lợi sau đây (nb Tôi đã bỏ C-zràng buộc ràng buộc mặc định và thay vào đó C-z C-z, nó mở ra C-zlàm tiền tố cho các ràng buộc tùy chỉnh):

(global-set-key (kbd "C-z =") 'my-diff-buffer-with-file)
(global-set-key (kbd "C-z C-=") 'ediff-current-file)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.