Файли резервного копіювання / автоматичного збереження Emacs можуть бути дуже корисними. Але ці риси заплутані.
Резервне копіювання файлів
Файли резервного копіювання мають тильди ( ~
або ~9~
) в кінці і записуються в домашній каталог користувача. Коли make-backup-files
це не-нульове значення, Emacs автоматично створює резервну копію вихідного файлу при першому збереженні файлу з буфера. Якщо ви редагуєте новий файл, Emacs створить резервну копію вдруге, коли ви збережете файл.
Незалежно від того, скільки разів ви зберігаєте файл, резервна копія залишається незмінною. Якщо ви заблокуєте буфер, а потім знову відвідаєте файл, або наступного разу, коли ви запустите новий сеанс Emacs, буде створено новий файл резервної копії. Нова резервна копія відображає вміст файлу після повторного відкриття або на початку сеансів редагування. Але наявна резервна копія більше не торкається. Тому я вважаю корисним створити нумеровані резервні копії (див. Конфігурацію нижче).
Для створення резервних копій явно використовуйте save-buffer
( C-x C-s
) з аргументами префікса.
diff-backup
і dired-diff-backup
порівнює файл із його резервною копією або навпаки. Але немає функції відновлення файлів резервного копіювання. Наприклад, під Windows, щоб відновити файл резервної копії
C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~
його потрібно вручну скопіювати як
C:\Users\USERNAME\.emacs.el
Автоматичне збереження файлів
Файли, що автоматично зберігаються, використовують хештеки ( #
) та записуються локально в каталозі проекту (разом із власне файлами). Причина полягає в тому, що файли автоматичного збереження - це лише тимчасові файли, які створює Emacs, поки файл не буде збережено знову (як-от, поспішаючи з послухом).
- Перш ніж користувач натисне
C-x C-s
( save-buffer
), щоб зберегти файл, Emacs автоматично зберігає файли - на основі підрахунку натискань клавіш ( auto-save-interval
) або при припиненні набору тексту ( auto-save-timeout
).
- Emacs також автоматично зберігає при кожному збої, включаючи вбивство Emacs за допомогою команди оболонки.
Коли користувач зберігає файл, автоматично збережена версія видаляється. Але коли користувач виходить з файлу, не зберігаючи його, Emacs або сесія X виходить з ладу, автоматично збережені файли все ще існують.
Використовуйте revert-buffer
або recover-file
для відновлення файлів автоматичного збереження. Зауважте, що Emacs записує перервані сеанси для подальшого відновлення у файлах з іменем ~ / .emacs.d / auto-save-list . recover-session
Функція буде використовувати цю інформацію.
Кращим способом відновлення з автоматично збереженого файлу є M-x revert-buffer RET
. Emacs запитає або "Буфер нещодавно автоматично збережено. Повернутися з файлу автоматичного збереження?" або "Повернути буфер з файлу FILENAME?". У разі останнього не існує файлу автоматичного збереження. Наприклад, тому що ви зберегли перед тим, як ввести ще один auto-save-intervall
натискання клавіш, у такому випадку Emacs видалив файл автоматичного збереження.
Автозбереження в даний час вимкнено за замовчуванням, оскільки це може уповільнити редагування під час підключення до повільної машини та через те, що багато файлів містять конфіденційні дані.
Конфігурація
Ось конфігурація, яка IMHO працює найкраще:
(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)
)
Чутливі дані
Інша проблема полягає в тому, що ви не хочете, щоб Emacs поширював копії файлів із конфіденційними даними. Використовуйте цей режим на основі файлів. Оскільки це другорядний режим, я для своїх цілей перейменував його sensitive-minor-mode
.
Щоб увімкнути його для всіх файлів .vcf та .gpg , у своїх .emacs використовується щось на зразок:
(setq auto-mode-alist
(append
(list
'("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
)
auto-mode-alist))
Крім того, щоб захистити лише деякі файли, як-от деякі .txt файли, використовуйте рядок типу
// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-
у файлі.