如何配置Emacs以便在临时目录下保存文件备份?

3
我经常使用emacsclient编辑/tmp中的临时文件,并希望像其他文件一样自动创建备份副本。我相信有方法可以做到这一点,但具体如何操作呢? :)
(我已经搜索了Emacs手册、emacswiki和SO,但没有找到有用的信息)
2个回答

2

看一下normal-backup-enable-predicate函数,它是backup-enable-predicate变量的默认值。

由于默认函数的唯一目的是阻止在各种临时目录中备份文件,因此您可能只想设置一个替换函数,该函数无条件返回t

(setq backup-enable-predicate (lambda (name) t))

在 files.el 中的使用让我想到你也可以将这个变量设置为 nil。虽然文档没有说明,所以可能不太可靠,但是 Emacs 中没有其他库引用该变量,所以它 可能 没问题(但我仍然建议使用 lambda,因为那样更容易理解)。

另请参见 C-hig (elisp) Making Backups RET

注意,我并不熟悉 small-temporary-file-directory(请参阅该变量的文档字符串),但是 temporary-file-directory 的值通常为 /tmp/,因此这两种情况通常是相同的。

如果您确实想要保留某些临时目录的默认行为而不保留其他目录的默认行为,则应定义原始函数的修改副本:(defun my-backup-enable-predicate ...) 然后 (setq backup-enable-predicate 'my-backup-enable-predicate)


我认为我们在这里找到了赢家。Emacs手册实际上提到了`backup-enable-predicate' - 我不知道怎么错过了。:( 谢谢! - Lester Cheung
如果我退出emacsclient后,temporary-file-directory中的文件立即被删除怎么办?在终止缓冲区之前如何复制文件? - Lester Cheung
回答自己的问题 - 看来我需要使用“C-u C-u C-x C-s” http://www.gnu.org/software/emacs/manual/html_node/emacs/Backup.html - Lester Cheung

0
把这个放到你的 .emacs 文件里:
;; create an invisible backup directory so our directories 
;; look a bit cleaner
;; thanks to #emacs in irc.freenode.org, Ryan Barrett of snarfed.org
;; and freethegnu.wordpress.com
 (defun make-backup-file-name (filename)
 (defvar backups-dir "/tmp/")
 (make-directory backups-dir t)
 (expand-file-name
 (concat backups-dir (file-name-nondirectory filename) "~")
 (file-name-directory filename)))

最好将备份保存在主目录下,例如“~/.backup”,即使是在/tmp(例如/tmp/tmp.1234)中进行编辑。 - Lester Cheung
Lester Cheung:这将是(setq backup-directory-alist '(("." . "~/.backup"))),但请阅读各种答案以了解如何控制Emacs生成备份文件的方式,因为这不太可能是您想要配置的唯一选项。 - phils
谢谢@phils,是的,那是我目前正在使用的。 - Lester Cheung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接