【问题标题】:How can I make Emacs backup every time I save?每次保存时如何进行 Emacs 备份?
【发布时间】:2011-10-18 11:51:46
【问题描述】:

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

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

这是我的 .emacs 目前的样子(仅处理备份的部分):

* 截图 *

;; ===== 备份 =====

;;启用备份文件。
(setq make-backup-files t)

;;将所有备份文件保存在此目录中。
(setq backup-directory-alist (quote ((".*" . "~/.emacs_backups/"))))

;;始终通过复制进行备份(最安全,但最慢)
(setq backup-by-copying t)

;;保存备份时将 .~1~ (和不断增加的数字)附加到文件末尾
(setq 版本控制 t)

;;定义要保留多少个文件的旧版本(从
;;最近的和倒数的
(setq keep-new-versions 100)

* 截图 *

【问题讨论】:

  • 这解决了我在阅读此问题之前从未意识到的问题。很酷的东西,谢谢:D
  • 你应该把这些链接作为答案dala。他们确实解决了你的问题。另外,您是否经常删除自己的文件以至于需要这样的东西?如果我正在处理源代码,我通常会依靠我的版本控制系统来避免意外删除,而这些情况很少非常发生。
  • @Noufal 碰巧我在短时间内(比如一个小时)对文件进行了很多更改。我不想经常提交文件。

标签: emacs backup


【解决方案1】:

阅读后:EmacsWiki: Force Backups

我将这些行添加到我的 .emacs 中:

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

(add-hook 'before-save-hook  'force-backup-of-buffer)

它使用标准备份/版本控制,但会重置指示缓冲区在保存之前是否已备份此会话的标志。

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

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

这正是我想要的。

【讨论】:

  • 不错。我一直在为此苦苦挣扎。文档让我确信 emacs 本身就可以做到这一点,但我就是无法让它工作。确实如此。
【解决方案2】:

如果你想自己做,这里是一个开始:

(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_timestamp 与时间戳相关。

您当然可以调整它以将其存储在单独的备份文件夹中或添加其他“调整”。

【讨论】:

    【解决方案3】:

    这是我使用的。它将备份放在目录的子目录中 文件在里面。每次保存文件时它也会保存一个备份。

    (setq make-backup-files t               ; backup of a file the first time it is saved.
          backup-by-copying t               ; don't clobber symlinks
          version-control t                 ; version numbers for backup files
          delete-old-versions t             ; delete excess backup files silently
          delete-by-moving-to-trash t
          kept-old-versions 6               ; oldest versions to keep when a new numbered
                                            ; backup is made (default: 2)
          kept-new-versions 9               ; newest versions to keep when a new numbered
                                            ; backup is made (default: 2)
          auto-save-default t               ; auto-save every buffer that visits a file
          auto-save-timeout 20              ; number of seconds idle time before auto-save
                                            ; (default: 30)
          auto-save-interval 200            ; number of keystrokes between auto-saves
                                            ; (default: 300)
          )
    ;; make backup to a designated dir, mirroring the full path
    
    ;; backup to dir hung on source dir...
    
    (add-hook 'write-file-hooks 'setBackUp)
    (defun setBackUp ()
      "Called by before-save-hook to set up backup location"
      (defvar backupdirname "BackUps~")     ; you can chose the sub dir name here
      (if (not (file-exists-p  backupdirname))
          (make-directory  backupdirname t))
      (setq backup-directory-alist `(("." . ,backupdirname)))
      (setq buffer-backed-up nil)            ; force backup every save
      nil
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多