Emacs到处都放置了名为foo~的备份文件,我不希望记住删除它们。另外,如果我编辑的文件在文件系统中的其他位置具有硬链接,则在完成编辑后,硬链接会指向备份,这会造成混乱和麻烦。如何清除这些备份文件,或者将它们放到同一目录之外的其他地方?

#1 楼

如果您曾经被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)
 


我想起来却很恶心。

评论


嘿,但是它正在使用这样的名称创建备份!home!svradmin!foo〜,但是我无法打开文件

–Jaime Hablutzel
2011-09-28 21:33

为什么要使用备份?为什么不使用git / mercurial?好的版本控制系统和编程方法应该胜过编辑器备份单个文件

–vol7ron
2012年7月16日在23:55



@ vol7ron:备份用于当您编辑不受版本控制的内容时(例如配置文件或尚未进入版本控制的快速而又肮脏的内容)。然后,当您没有做应该做的事情时,编辑器将节省您的时间。

–名
2012年9月5日19:14



@ vol7ron-那是错误的。您不应该将垃圾内容保留在不想保留的版本控制中。这只会使找到重要内容变得更加困难。取而代之的是,使用编辑器备份来实现其优势(在紧急情况下备份更改),并使用修订控制来实现其优势(保留软件的重要版本并促进团队开发)。使用正确的工具完成工作。

– T.E.D.
2013年2月26日19:58



“备份文件增加了太多开销,几乎没有任何价值”:这不是判断力吗?

–可悲的变量
13年5月20日在16:19

#2 楼

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


自动保存文件

自动保存文件使用井号(#),并且应在项目目录中本地写入(以及实际文件)。原因是自动保存文件只是Emacs创建的临时文件,直到再次保存文件为止(例如,急于遵从)。


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

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

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

从自动保存的文件中恢复的首选方法是M-x revert-buffer RET。 Emacs将询问“最近是否已自动保存缓冲区。要从自动保存文件还原吗?”或“是否要从文件FILENAME还原缓冲区?”。如果是后者,则没有自动保存文件。例如,由于您已经在键入另一个auto-save-intervall按键之前进行了保存,因此Emacs删除了自动保存文件。

如今默认情况下处于禁用状态,因为当连接到时会降低编辑速度这是一台速度较慢的机器,并且因为许多文件包含敏感数据。

配置

以下是IMHO最有效的配置:

 (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)
      )
 


敏感数据

另一个问题是您不希望Emacs分发敏感文件的副本数据。逐个文件使用此模式。由于这是次要模式,出于我的目的,我将其重命名为sensitive-minor-mode。要为所有.vcf和.gpg文件启用它,请在您的.emacs中使用类似以下内容:

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


或者,仅保护某些文件(例如某些.txt文件),请使用诸如

// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-


在文件中。

评论


所以您不使用自动保存?这些设置使您可以避免在文件夹中看到那些讨厌的#filename.tex#文件?

– PascalVKooten
2013年10月2日在12:13

默认情况下,我总是使用自动保存和备份文件,带有敏感数据的文件除外。敏感模式禁用自动保存和备份。顺便说一句,#file.ext#文件并不是很讨厌,因为Emacs会根据需要创建和删除它们。如果它们仍然存在,则Emacs仍在运行,或者它们是崩溃的Emacs中的工件。在两种情况下,它们都可以节省一天的时间;-)

– Andreas Spindler
13-10-16在7:50

啊,谢谢你提供的额外信息。我确实确实对他们有积极的经验(他们确实挽救了我的生活)。只有当您在寻找丑陋的东西时,您才能正确地找到它:)

– PascalVKooten
13-10-16在8:12

顺便说一句,进行备份是一回事,而还原备份则是另一回事。因此玩自动保存。终止Emacs作业或ssh会话。如果有自动保存的文件,请与实际文件进行比较。然后启动Emacs并自己找出恢复缓冲区的作用。在紧急情况下,这将很快得到回报。

– Andreas Spindler
15年7月4日在9:09



敏感模式效果很好。谢谢。请注意,您在帖子中称其为“敏感次要模式”,而在定义(链接)中称为“敏感模式”。也许您想调整它。

–HeyMan
18年2月1日在13:29

#3 楼

接受的答案是很好,但是可以通过在每个保存时另外备份
和备份版本化文件来大大改善。

首先,接受的描述中的基本设置
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)


最后,对每个保存进行备份,而不仅仅是第一次。我们进行两种类型的备份:每个会话备份:在每个
Emacs会话中第一次保存缓冲区时,进行一次备份。这些模拟了Emac的默认备份行为。每次保存备份:每次保存一次。 Emacs默认情况下不会执行此操作,但是如果您让Emacs长时间运行则非常有用。

备份位于不同的地方
和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)


我写了$<而不是
后,对这个主题变得非常感兴趣在我的上次提交大约三小时后,在我的$@中进行修改:P

上面的内容基于我大量编辑的Emacs Wiki页面。

评论


我将上面的代码粘贴到了init.el文件中,但是我没有任何备份目录,而emacs仍然在整个创建备份文件。我可能误会了一些东西,我是emacs的新手:P

–索霍尔姆
15年11月27日在16:37

@Soeholm:您是否将所有代码粘贴到答案中,包括答案顶部的setq?以上在Emacs 24.5.1中对我有用。

–ntc2
15年11月27日在22:15

它现在开始工作。我已经粘贴了所有代码,所以我不确定为什么接受新配置太慢。但是非常感谢!

–索霍尔姆
15年11月30日在8:38

作为后续,我知道为什么现在不起作用。它只能在一台机器上工作,而不能在另一台机器上工作。这是因为我的主目录中有一个空的.emacs文件,该文件的优先级高于.emacs.d目录。愚蠢的错误

–索霍尔姆
15年12月3日在17:18

我不知道为什么它不保存我正在处理的文件,而是仅保存新创建的文件

–警报
1月5日15:14

#4 楼

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

M-x customize-group


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

如果滚动到缓冲区底部,则会看到“备份”目录列表。单击“显示值”,然后将列表的第一项设置如下:

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


或者,您可以关闭我的设置“将备份文件设置为off”。

如果您不希望Emacs自动编辑您的.emacs文件,则需要设置自定义文件。

评论


我希望我在2年前就了解custom-group。谢谢!

– wprl
2012年7月3日,下午3:31

#5 楼

您可以通过

(setq make-backup-files nil)

完全禁用它们

评论


我想从shell提示符下设置此设置,当我从一个主机跳到另一个主机时,我不希望拥有.emacs文件:emacs --eval“(setq make-backup-files nil)”

–戴夫·莫尔斯
17年7月5日在21:11