Резервное копирование / автосохранение 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
Автосохранение файлов
Автосохранение файлов использует hashmarks ( #
) и должно быть записано локально в каталоге проекта (вместе с реальными файлами). Причина в том, что файлы автосохранения - это просто временные файлы, которые 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-*-
в файле.