如何在每次保存时进行Emacs备份?

如何在每次保存时进行Emacs备份?,emacs,backup,Emacs,Backup,我不时删除我不应该删除的文件,最糟糕的是我自己写的文件。因此,我多次被Emacs的备份功能所保存 但我的问题是,Emacs只在您第一次保存缓冲区时进行备份。有没有办法让Emacs在每次我按C-x C-s时都这样做 这就是my.emacs当前的样子(仅处理备份的部分): *剪断* 备份===== ;;启用备份文件。 (setq生成备份文件t) ;;将所有备份文件保存在此目录中。 (setq备份目录列表(引号((“*”~/.emacs\u backups/”)) ;;始终通过复制

我不时删除我不应该删除的文件,最糟糕的是我自己写的文件。因此,我多次被Emacs的备份功能所保存

但我的问题是,Emacs只在您第一次保存缓冲区时进行备份。有没有办法让Emacs在每次我按C-x C-s时都这样做

这就是my.emacs当前的样子(仅处理备份的部分):

*剪断*

备份=====

;;启用备份文件。
(setq生成备份文件t)

;;将所有备份文件保存在此目录中。
(setq备份目录列表(引号((“*”~/.emacs\u backups/”))

;;始终通过复制进行备份(最安全,但速度最慢)
(通过复制t进行setq备份)

;;保存备份时,在文件末尾追加~1~(并增加数字)
(setq版本控制t)

;;定义要保留的文件的旧版本数(从
;最近的和向后计数的
(setq保留了新版本100)


*剪断*

如果您想自己动手,请从这里开始:

(defun backup-and-save ()
  (interactive)
  (setq filename (buffer-file-name))
  (write-file (concat filename (format-time-string "_" "%Y%m%d%H%M%S")))
  (write-file filename)
  )
它将副本与时间戳一起保存为
originalfilename\u timestamp

当然,您可能会将其调整为存储在单独的备份文件夹中,或者添加其他“调整”。

阅读以下内容:

我在.emacs中添加了以下行:

(defun force-backup-of-buffer ()
  (setq buffer-backed-up nil))

(add-hook 'before-save-hook  'force-backup-of-buffer)
它使用标准备份/版本控制,但会重置标志,该标志指示在保存之前是否已在此会话中备份缓冲区

前两行定义了一个函数,用于重置指示在此会话期间是否备份了缓冲区的标志

最后一行添加了一个事件挂钩,该挂钩在保存之前执行函数


这正是我想要的。

刚刚找到了这个..这个..这解决了一个我在读到这个问题之前从未意识到的问题。很酷的东西,谢谢:你应该把这些链接作为答案dala。它们确实解决了你的问题。另外,你是否经常删除自己的文件,以至于需要这样的东西?如果我正在处理源代码,我通常依靠我的版本控制系统来避免意外删除,这种情况很少发生。@Noufal我在短时间(比如一小时)内对文件做了很多更改。我不想经常提交文件。很好。我只是一直在努力解决这个问题。文档让我确信emacs是本机完成的,但我就是无法让它工作。确实如此。