Emacs sao lưu / tự động lưu tập tin có thể rất hữu ích. Nhưng những tính năng này là khó hiểu.
Tập tin sao lưu
Các tập tin sao lưu có dấu ( ~
hoặc ~9~
) ở cuối và sẽ được ghi vào thư mục gốc của người dùng. Khi nàomake-backup-files
không phải là Emacs sẽ tự động tạo bản sao lưu của tệp gốc vào lần đầu tiên tệp được lưu từ bộ đệm. Nếu bạn đang chỉnh sửa tệp mới, Emacs sẽ tạo bản sao lưu vào lần thứ hai bạn lưu tệp.
Cho dù bạn lưu tập tin bao nhiêu lần thì bản sao lưu vẫn không thay đổi. Nếu bạn tắt bộ đệm và sau đó truy cập lại tệp hoặc lần sau khi bạn bắt đầu phiên Emacs mới, một tệp sao lưu mới sẽ được tạo. Bản sao lưu mới phản ánh nội dung của tệp sau khi mở lại hoặc khi bắt đầu các phiên chỉnh sửa. Nhưng một bản sao lưu hiện có không bao giờ được chạm lại. Do đó, tôi thấy hữu ích khi tạo các bản sao lưu được đánh số (xem cấu hình bên dưới).
Để tạo bản sao lưu rõ ràng sử dụng save-buffer
( C-x C-s
) với các đối số tiền tố.
diff-backup
và dired-diff-backup
so sánh một tập tin với bản sao lưu của nó hoặc ngược lại. Nhưng không có chức năng để khôi phục các tập tin sao lưu. Ví dụ: trong Windows, để khôi phục tệp sao lưu
C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~
nó phải được sao chép thủ công như
C:\Users\USERNAME\.emacs.el
Tự động lưu tập tin
Tự động lưu tệp sử dụng dấu băm ( #
) và sẽ được ghi cục bộ trong thư mục dự án (cùng với các tệp thực tế). Lý do là các tệp tự động lưu chỉ là các tệp tạm thời mà Emacs tạo cho đến khi một tệp được lưu lại (như với sự vâng lời vội vàng).
- Trước khi người dùng nhấn
C-x C-s
( save-buffer
) để lưu tệp Emacs tự động lưu tệp - dựa trên việc đếm tổ hợp phím ( auto-save-interval
) hoặc khi bạn dừng nhập ( auto-save-timeout
).
- Emacs cũng tự động lưu bất cứ khi nào nó gặp sự cố, bao gồm cả việc giết công việc Emacs bằng lệnh shell.
Khi người dùng lưu tệp, phiên bản tự động lưu sẽ bị xóa. Nhưng khi người dùng thoát tệp mà không lưu tệp, Emacs hoặc phiên X gặp sự cố, các tệp tự động lưu vẫn tồn tại.
Sử dụng revert-buffer
hoặc recover-file
để khôi phục các tập tin tự động lưu. Lưu ý rằng bản ghi Emacs bị gián đoạn phiên để phục hồi sau này trong các tệp có tên ~ / .emacs.d / auto-save-list . Các recover-session
chức năng sẽ sử dụng thông tin này.
Phương pháp ưa thích để khôi phục từ tệp được lưu tự động là M-x revert-buffer RET
. Emacs sẽ hỏi "Bộ đệm đã được lưu tự động gần đây. Hoàn nguyên từ tệp tự động lưu?" hoặc "Hoàn nguyên bộ đệm từ tệp FILENAME?". Trong trường hợp sau này không có tệp tự động lưu. Ví dụ: vì bạn đã lưu trước khi nhập một auto-save-intervall
tổ hợp phím khác , trong trường hợp đó, Emacs đã xóa tệp tự động lưu.
Tự động lưu hiện nay bị tắt theo mặc định vì nó có thể làm chậm chỉnh sửa khi được kết nối với máy chậm và vì nhiều tệp chứa dữ liệu nhạy cảm.
Cấu hình
Đây là một cấu hình mà IMHO hoạt động tốt nhất:
(defvar --backup-directory (concat user-emacs-directory "backups"))
(if (not (file-exists-p --backup-directory))
(make-directory --backup-directory t))
(setq backup-directory-alist `(("." . ,--backup-directory)))
(setq make-backup-files t ; backup of a file the first time it is saved.
backup-by-copying t ; don't clobber symlinks
version-control t ; version numbers for backup files
delete-old-versions t ; delete excess backup files silently
delete-by-moving-to-trash t
kept-old-versions 6 ; oldest versions to keep when a new numbered backup is made (default: 2)
kept-new-versions 9 ; newest versions to keep when a new numbered backup is made (default: 2)
auto-save-default t ; auto-save every buffer that visits a file
auto-save-timeout 20 ; number of seconds idle time before auto-save (default: 30)
auto-save-interval 200 ; number of keystrokes between auto-saves (default: 300)
)
Dữ liệu nhạy cảm
Một vấn đề khác là bạn không muốn Emacs phát tán các bản sao của tệp có dữ liệu nhạy cảm. Sử dụng chế độ này trên cơ sở mỗi tệp. Vì đây là chế độ nhỏ, vì mục đích của tôi, tôi đã đổi tên nó sensitive-minor-mode
.
Để kích hoạt nó cho tất cả các tệp .vcf và .gpg , trong .emacs của bạn sử dụng một cái gì đó như:
(setq auto-mode-alist
(append
(list
'("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
)
auto-mode-alist))
Ngoài ra, để chỉ bảo vệ một số tệp, như một số tệp .txt , hãy sử dụng một dòng như
// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-
trong file.