Резервное копирование / автоматическое сохранение файлов 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 удалил файл автосохранения.
Автосохранение в настоящее время отключено по умолчанию, поскольку оно может замедлить редактирование при подключении к медленному компьютеру, а также потому, что многие файлы содержат конфиденциальные данные.
Конфигурация
Вот конфигурация, которая ИМХО работает лучше всего:
(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-*-
в файле.