关闭特定文件的自动备份


10

很长一段时间以来,我已经让Emacs将所有文件的备份放在一个文件夹中:

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

我几乎从未访问过该backups目录,但是最近我注意到它包含许多*-autoloads.el不需要备份的文件。如何告诉Emacs不要备份这些类型的文件?

Answers:


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-filesnil在主要模式的设置挂钩中设置为(可能基于文件名和其他特征)。不要忘记将变量设置为局部缓冲区。

禁用某些文件备份的另一种方法是设置backup-inhibited。该变量在主要模式更改后仍然存在。VC就是通过版本控制(通过中的条目file-find-hook)禁用文件备份的方式。不要忘记将变量设置为局部缓冲区。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.