Отключить автоматическое резервное копирование для определенных файлов

10

В течение долгого времени Emacs помещал резервные копии всех файлов в одну папку:

(setq backup-directory-alist '(("." . "~/.emacs.d/backups")))

Я вряд ли когда - либо посетить backupsкаталог, но в последнее время я заметил , что он содержит много из *-autoloads.elфайлов , которые не нужно резервное копирование для. Как я могу сказать Emacs не делать резервные копии файлов такого типа?

itsjeyd
источник

Ответы:

14

Вы можете настроить местоположение через backup-directory-alist. Каждая запись в списке говорит, куда поместить резервные копии файлов, соответствующих шаблону; если это местоположение nil, резервная копия будет в том же каталоге, что и оригинал. Порядок имеет значение: используется первое совпадение.

(setq backup-directory-alist '(("-autoloads\\.el\\'")
                               ("." . "~/.emacs.d/backups")))

Если вы хотите полностью запретить резервное копирование на основе имени файла или расположения, похоже, для этого нет встроенного механизма, но его достаточно легко добавить. Переменная backup-enable-predicateсодержит имя функции, которая определяет, должен ли файл иметь резервные копии. Настройка по умолчанию normal-backup-enable-predicateзапрещает резервное копирование только в каталогах, которые Emacs использует для временных файлов. Вы можете добавить свою собственную функцию, которая также проверяет имя файла.

(defvar backup-inhibit-file-name-regexp "-autoloads\\.el\\'"
  "Files whose full path matches this regular expression will not be backed up.")
(defun regexp-backup-enable-predicate (filename)
  "Disable backups for files whose name matches `backup-inhibit-file-name-regexp'.
Also call `normal-backup-enable-predicate'."
  (save-match-data
    (and (not (string-match backup-inhibit-file-name-regexp filename))
     (normal-backup-enable-predicate filename))))
(setq backup-enable-predicate 'regexp-backup-enable-predicate)

Даже если эта функция вернется t, другие механизмы могут отключить резервное копирование.

Если вы хотите отключить резервное копирование в определенном основном режиме, установите make-backup-filesзначение nilв настройке основного режима (возможно, в зависимости от имени файла и других характеристик). Не забудьте сделать переменную buffer-local.

Другой способ отключить резервное копирование для определенных файлов - установить backup-inhibited. Эта переменная переживает серьезное изменение режима. Именно так VC отключает резервное копирование файлов под управлением версиями (через запись в file-find-hook). Не забудьте сделать переменную buffer-local.

Жиль "ТАК - перестань быть злым"
источник