Как мне контролировать, как Emacs создает файлы резервных копий?

StackOverflow https://stackoverflow.com/questions/151945

  •  02-07-2019
  •  | 
  •  

Вопрос

Emacs помещает файлы резервных копий с именами foo~ повсюду, и мне не нравится не забывать их удалять.Кроме того, если я редактирую файл, у которого есть жесткая ссылка где-то еще в файловой системе, когда я закончу редактирование, жесткая ссылка указывает на резервную копию, и это сбивает с толку и ужасно.Как я могу удалить эти файлы резервных копий или перенести их куда-нибудь, кроме того же каталога?

Это было полезно?

Решение

Если вы когда -либо были спасены файлом резервного копирования EMACS, вы, вероятно, хотите их больше, а не меньше из них.Раздражает, что они идут в том же каталоге, что и файл, который вы редактируете, но это легко изменить.Вы можете сделать все файлы резервного копирования перейти в каталог, поместив что -то вроде следующего в своем.emacs.

(setq backup-directory-alist `(("." . "~/.saves")))

Существует ряд загадочных деталей, связанных с тем, как EMACS может создать ваши файлы резервного копирования.Должен ли он переименовать оригинал и написать отредактированный буфер?Что делать, если оригинал связан?В общем, самая безопасная, но самая медленная ставка - это всегда сделать резервные копии, копируя.

(setq backup-by-copying t)

Если по какой-то причине это слишком медленно, вы также можете посмотретьbackup-by-copying-when-linked.

Поскольку ваши резервные копии сейчас находятся на своем месте, вы можете захотеть их больше, а не меньше из них.Посмотрите на документацию EMACS для этих переменных (с C-h v).

(setq delete-old-versions t
  kept-new-versions 6
  kept-old-versions 2
  version-control t)

Наконец, если вам абсолютно необходимо иметь файлы резервных копий:

(setq make-backup-files nil)

Хотя мне больно об этом думать.

Другие советы

Файлы резервного копирования/автосохранения 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/автосохранение-спискаrecover-session функция будет использовать эту информацию.

Предпочтительный метод восстановления из автоматически сохраненного файла: M-x revert-buffer RET.Emacs спросит: «Буфер недавно был автоматически сохранен.Вернуться из файла автосохранения?" или "Вернуть буфер из файла ИМЯ ФАЙЛА?".В последнем случае файл автосохранения отсутствует.Например, потому что вы сохранили перед вводом другого 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))

Альтернативно, чтобы защитить только некоторые файлы, например некоторые .текст файлы, используйте строку типа

// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-

в файле.

А принятый ответ хорошо, но это может быть значительно улучшено дополнительно резервное копирование накаждый сохранить и создать резервную копию версированный файлы.

Сначала базовые настройки, описанные в принятый ответ:

(setq version-control t     ;; Use version numbers for backups.
      kept-new-versions 10  ;; Number of newest versions to keep.
      kept-old-versions 0   ;; Number of oldest versions to keep.
      delete-old-versions t ;; Don't ask to delete excess backup versions.
      backup-by-copying t)  ;; Copy all files, don't rename them.

Далее, также резервное копирование версий файлов, которые EMACS не по умолчанию (вы не совершаете каждый сохранение, верно?):

(setq vc-make-backup-files t)

Наконец, делайте резервную копию каждого сохранения, а не только первого.Мы делаем два вида резервных копий:

  1. резервные копии для каждой сессии:однажды на первый Сохранить буфер в каждом сеансе EMACS.Они имитируют стандартное поведение резервного копирования Emac.

  2. резервные копии для каждого сохранения:один раз каждый сохранять.EMACS не делает этого по умолчанию, но это очень полезно, если вы оставите Emacs работать в течение длительного времени.

А Резервные копии идут в разных местах и eMacs создает резервные DIRS автоматически, если они не существуют:

;; Default and per-save backups go here:
(setq backup-directory-alist '(("" . "~/.emacs.d/backup/per-save")))

(defun force-backup-of-buffer ()
  ;; Make a special "per session" backup at the first save of each
  ;; emacs session.
  (when (not buffer-backed-up)
    ;; Override the default parameters for per-session backups.
    (let ((backup-directory-alist '(("" . "~/.emacs.d/backup/per-session")))
          (kept-new-versions 3))
      (backup-buffer)))
  ;; Make a "per save" backup on each save.  The first save results in
  ;; both a per-session and a per-save backup, to keep the numbering
  ;; of per-save backups consistent.
  (let ((buffer-backed-up nil))
    (backup-buffer)))

(add-hook 'before-save-hook  'force-backup-of-buffer)

Я очень заинтересовался этой темой после того, как написал $< вместо$@ в моем Makefile, примерно через три часа после моего предыдущего коммита :P

Вышеизложенное основано на Emacs Wiki Page I сильно отредактирована.

Другой способ настройки параметров резервного копирования — через интерфейс настройки.Входить:

M-x customize-group

И тогда в Customize group: подсказка введите backup.

Если вы прокрутите до нижней части буфера, вы увидите Список каталогов резервного копирования.Нажмите Показать значение и установите первую запись списка следующим образом:

Regexp matching filename: .*
Backup directory name: /path/to/your/backup/dir

Альтернативно, вы можете отключить резервное копирование в моих настройках. Сделать резервные копии файлов к off.

Если вы не хотите, чтобы Emacs автоматически редактировал ваш .emacs файл, который вам понадобится настроить файл настроек.

Вы можете полностью отключить их,

(setq make-backup-files nil)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top