Emacs 自动保存文件

目前比较流行的 Emacs 自动保存文件的包有 super-savebuffer-guardian.el 等。

这些包实现的核心功能是,在切换窗口、空闲一段时间或者切换到其他应用时,自动将已修改的 buffer 保存到对应的文件。

我自己核心的诉求就是,空闲几秒后,自动将修改保存到文件就可以了,使用 Emacs 内置的 auto-save 就可以满足我的诉求。

Emacs 有两种自动保存的保存的模式: auto-save-modeauto-save-visited-mode ,区别是前者空闲时将修改的 buffer 保存到指定的目录下完成备份,在通过 recover-file 进行恢复,后者是直接保存到 buffer 对应的文件。相比而下前者不仅麻烦而且会产生不少临时文件,后者就能比较直接的达到目的。

(setq auto-save-visited-predicate
      (lambda ()
        (and (not (buffer-live-p (get-buffer " *vundo tree*")))
             (not (string-suffix-p "gpg" (file-name-extension (buffer-name)) t))
             (not (eq (buffer-base-buffer
                       (get-buffer (concat "CAPTURE-" (buffer-name))))
                      (current-buffer)))
             (or (not (boundp 'corfu--total)) (zerop corfu--total)))))
(add-hook 'after-init-hook #'auto-save-visited-mode)

设置在 Emacs 启动后全局使能自动保存功能,通过设定 auto-save-visited-predicate 函数来排除一些不要自动保存的场景。另外,通过设置 auto-save-visited-interval 来指定空闲保存的时间,默认是 5 秒。