如何配置Emacs为临时目录下的文件保存备份?

如何配置Emacs为临时目录下的文件保存备份?,emacs,configuration,backup,Emacs,Configuration,Backup,我经常使用EmacClient在/tmp中编辑临时文件,并希望像处理其他文件一样自动创建文件的备份副本。我相信有办法做到这一点——但如何做到呢?:) (我搜索了Emacs手册、emacswiki等,但找不到任何有用的东西)将此粘贴到yer.Emacs文件中: ;; create an invisible backup directory so our directories ;; look a bit cleaner ;; thanks to #emacs in irc.freenode.or

我经常使用EmacClient在/tmp中编辑临时文件,并希望像处理其他文件一样自动创建文件的备份副本。我相信有办法做到这一点——但如何做到呢?:)


(我搜索了Emacs手册、emacswiki等,但找不到任何有用的东西)

将此粘贴到yer.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)))

查看
正常备份启用谓词
函数,它是
备份启用谓词
变量的默认值

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

(setq backup-enable-predicate (lambda (name) t))
files.el中的用法向我建议,您也可以将此变量设置为
nil
。文档中没有说明这一点,因此它可能不可靠,但Emacs中的任何其他库都没有引用该变量,因此它可能没问题(但我仍然建议使用lambda,因为它的作用更明显)

另请参见C-hig
(elisp)进行备份

n、 b.我实际上并不熟悉
小临时文件目录
(请参阅该变量的docstring),但
临时文件目录
的值通常是
/tmp/
,因此这两种情况通常是相同的


如果确实希望保留某些临时目录的默认行为,但不保留其他临时目录的默认行为,则应定义原始函数的修改副本:
(defun my backup enable predicate…
,然后定义
(setq backup enable predicate“my backup enable predicate”)

如果备份保存到主目录,如“~/.backup”,即使是在/tmp中进行编辑(例如/tmp/tmp.1234),也会很好。Lester Cheung:那将是
(setq backup directory alist'(“~/.backup”))
但请通读的各种答案,因为这不可能是您想要配置的唯一选项。谢谢@phils是的,这就是我目前正在使用的。我想我们这里有一个赢家。Emacs手册实际上提到了“备份启用谓词”,但我不知何故遗漏了这一点:(谢谢!如果在我退出EmacClient后临时文件目录中的文件立即被删除怎么办?如何在杀死缓冲区之前复制文件?回答我自己的问题-似乎我需要“C-u C-u C-x C-s”