如何控制Emacs如何制作备份文件?

时间:2008-09-30 06:15:09

标签: emacs

Emacs将名为foo~的备份文件放在任何地方,我不想记得删除它们。此外,如果我在文件系统中的其他位置编辑一个具有硬链接的文件,那么当我完成编辑时,硬链接指向备份,这令人困惑和糟糕。如何删除这些备份文件,或者将它们放在同一目录以外的某个位置?

5 个答案:

答案 0 :(得分:490)

如果你曾经被Emacs备份文件保存过,那么你 可能想要更多,而不是更少。这很烦人 它们与您正在编辑的文件位于同一目录中 但这很容易改变。您可以将所有备份文件都删除 通过在您的目录中添加以下内容到目录中 .emacs

(setq backup-directory-alist `(("." . "~/.saves")))

有许多与Emacs相关的神秘细节 可能会创建您的备份文件。它应该重命名原件 并写出编辑过的缓冲区?如果原件被链接怎么办? 一般来说,最安全但最慢的赌注是始终进行备份 通过复制。

(setq backup-by-copying t)

如果由于某种原因这太慢了,你可能也会看一下 backup-by-copying-when-linked

由于您的备份现在都在他们自己的位置,您可能需要 他们中的更多,而不是更少。看看Emacs 这些变量的文档(使用C-h v)。

(setq delete-old-versions t
  kept-new-versions 6
  kept-old-versions 2
  version-control t)

最后,如果你绝对没有备份文件:

(setq make-backup-files nil)

考虑到这一点让我感到恶心。

答案 1 :(得分:63)

Emacs备份/自动保存文件非常有用。但这些功能令人困惑。

备份文件

备份文件末尾有波浪号(~~9~),应写入用户主目录。当make-backup-files为非零时,Emacs会在第一次从缓冲区中保存文件时自动创建原始文件的备份。如果您正在编辑新文件,Emacs将在您第二次保存文件时创建备份。

无论您保存文件多少次,备份都保持不变。如果您终止缓冲区然后再次访问该文件,或者下次启动新的Emacs会话时,将创建一个新的备份文件。新备份在重新打开后或编辑会话开始时反映文件的内容。但永远不会再触及现有的备份。因此,我发现创建编号备份很有用(请参阅下面的配置)。

要显式创建备份,请使用带有前缀参数的save-bufferC-x C-s)。

diff-backupdired-diff-backup将文件与其备份进行比较,反之亦然。但是没有恢复备份文件的功能。例如,在Windows下,还原备份文件

C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~

必须手动复制为

C:\Users\USERNAME\.emacs.el

自动保存文件

自动保存文件使用hashmarks(#),并且应在项目目录中本地写入(以及实际文件)。原因是自动保存文件只是Emacs创建的临时文件,直到再次保存文件(就像匆匆服从)。

  • 在用户按C-x C-ssave-buffer)保存文件之前,Emacs会自动保存文件 - 基于计数键击(auto-save-interval)或停止输入({{1} })。
  • Emacs也会在崩溃时自动保存,包括使用shell命令终止Emacs作业。

当用户保存文件时,将删除自动保存的版本。但是当用户退出文件而不保存文件时,Emacs或X会话崩溃,自动保存的文件仍然存在。

使用auto-save-timeoutrevert-buffer恢复自动保存文件。请注意,Emacs会在名为〜/ .emacs.d / auto-save-list 的文件中记录中断的会话,以便以后恢复。 recover-file函数将使用此信息。

从自动保存的字段中恢复的首选方法是recover-session。 Emacs会询问“最近是否已自动保存缓冲区。还原自动保存文件?”或“从文件FILENAME恢复缓冲区?”。如果是后者,则没有自动保存文件。例如,因为您在键入其他M-x revert-buffer RET次键击之前已保存,在这种情况下,Emacs已删除自动保存文件。

现在默认情况下禁用自动保存,因为它可能会在连接到慢速计算机时减慢编辑速度,并且因为许多文件包含敏感数据。

<强>配置

这是恕我直言最佳的配置:

auto-save-intervall

敏感数据

另一个问题是,您不希望Emacs传播包含敏感数据的文件副本。在每个文件的基础上使用this mode。由于这是次要模式,因此我将其重命名为(defvar --backup-directory (concat user-emacs-directory "backups")) (if (not (file-exists-p --backup-directory)) (make-directory --backup-directory t)) (setq backup-directory-alist `(("." . ,--backup-directory))) (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) )

要为所有 .vcf .gpg 文件启用它,请在.emacs中使用以下内容:

sensitive-minor-mode

或者,要仅保护某些文件,例如某些 .txt 文件,请使用类似

的行
(setq auto-mode-alist
      (append
       (list
        '("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
        )
       auto-mode-alist))

在文件中。

答案 2 :(得分:55)

accepted answer是 很好,但通过额外备份可以大大改善 每个保存并备份版本化文件

首先,accepted answer中描述的基本设置:

(setq version-control t     ;; Use version numbers for backups.
      kept-new-versions 10  ;; Number of newest versions to keep.
      kept-old-versions 0   ;; Number of oldest versions to keep.
      delete-old-versions t ;; Don't ask to delete excess backup versions.
      backup-by-copying t)  ;; Copy all files, don't rename them.

接下来,还备份版本化文件,Emacs默认情况下不会这样做 (你不会在每次保存时承诺,对吗?):

(setq vc-make-backup-files t)

最后,在每次保存时进行备份,而不仅仅是第一次保存。我们做两个 各种备份:

  1. 每会话备份:一次在第一次保存缓冲区中 Emacs会话。这些模拟了Emac的默认备份行为。

  2. 每次保存备份:一次每次保存。 Emacs没有这样做 默认情况下,如果你让Emacs运行很长时间,它会非常有用 时间。

  3. backups go in different places和Emacs 如果它们不存在,则会自动创建备用目录:

    ;; Default and per-save backups go here:
    (setq backup-directory-alist '(("" . "~/.emacs.d/backup/per-save")))
    
    (defun force-backup-of-buffer ()
      ;; Make a special "per session" backup at the first save of each
      ;; emacs session.
      (when (not buffer-backed-up)
        ;; Override the default parameters for per-session backups.
        (let ((backup-directory-alist '(("" . "~/.emacs.d/backup/per-session")))
              (kept-new-versions 3))
          (backup-buffer)))
      ;; Make a "per save" backup on each save.  The first save results in
      ;; both a per-session and a per-save backup, to keep the numbering
      ;; of per-save backups consistent.
      (let ((buffer-backed-up nil))
        (backup-buffer)))
    
    (add-hook 'before-save-hook  'force-backup-of-buffer)
    

    在我写$<而不是写{{}}后,我对这个主题非常感兴趣 我的$@ Makefile,在我之前的提交后大约三个小时:P

    以上内容基于Emacs Wiki page I heavily edited

答案 3 :(得分:31)

配置备份选项的另一种方法是通过Customize界面。输入:

M-x customize-group

然后在Customize group:提示符下输入backup

如果您滚动到缓冲区的底部,您会看到备份目录列表。点击显示值,然后按如下所示设置列表的第一个条目:

Regexp matching filename: .*
Backup directory name: /path/to/your/backup/dir

或者,您可以将备份从我的设置制作备份文件转为off

如果您不希望Emacs自动编辑.emacs文件,您需要set up a customisations file

答案 4 :(得分:28)

你可以通过

完全禁用它们
(setq make-backup-files nil)