当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何控制Emacs如何制作备份文件?》经验,为你挑选了5个好方法。

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



1> jfm3..:

如果您曾经被Emacs备份文件保存过,那么您可能需要更多,而不是更少.令人讨厌的是,它们与您正在编辑的文件位于同一目录中,但这很容易更改.您可以将所有备份文件放入目录中,方法是将以下内容放入您的目录中 .emacs.

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

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

(setq backup-by-copying t)

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

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

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

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

(setq make-backup-files nil)

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


@ vol7ron - 这是错的.你不应该把垃圾放到你不想保留的版本控制中.它只是让找到重要的东西变得更难.相反,使用您的编辑器备份来获得它们的好处(在紧急情况下备份更改)和版本控制以获得它的好处(保留软件的重要版本并促进团队开发).使用正确的工具完成工作.
@ vol7ron:备份是为了在你编辑不受版本控制的东西时 - 比如配置文件或者你还没有进入版本控制的快速和肮脏的东西.然后,当你没有做你应该做的事情时,编辑会拯救你的脖子.
为什么使用备份?为什么不使用git/mercurial?良好的版本控制系统和编程方法应该胜过编辑器的单个文件备份
"备份文件增加了很多开销,几乎没有任何价值":这不是判断主义吗?
嘿,但它正在创建一个像这样的名称的备份!家!svradmin!foo~我无法打开文件
@ vol7ron - 所以你实际上必须得到第三方工具来帮助你筛选你存放在存储库中的所有垃圾?呃...谢谢,但我会糊里糊涂.
低估判决主义的b/c.备份文件增加了很多开销,几乎没有价值.无论如何,你必须保存以运行你的测试,因此很少超过5分钟而不保存.即使我正在编辑非版本控制的配置文件,emacs是如此不稳定以至于它经常崩溃?什么样的工作流程值得这种开销?
@ vol7ron显然你从未使用过Emacs来起草电子邮件,我绝对不想在vcs中使用它.
在创建任何备份之前,我必须创建`.saves`.
@ vol7ron将emacs备份与版本控制进行比较非常愚蠢。它们是用于不同目的的不同工具。在准备将新更改提交到VCS之前,它们经历了一系列中间编辑,逐字符,逐行,逐条声明,这些都不是任何理智的人都会承诺进入VCS的更改(大多数语法错误)。但是,在进行这些更改期间的任何时候,笔记本电脑的电池可能会耗尽,或者网络连接断开。这是emacs(或vi)备份有用的时候

2> Andreas Spin..:

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

备份文件

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

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

要显式创建备份,请使用带前缀参数的save-buffer(C-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-s(save-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已删除自动保存文件.

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

组态

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

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

在文件中.


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

3> ntc2..:

该接受的答案是好的,但它可以通过附加大大提高备份的 每一个保存和备份版本化的文件.

首先,接受的答案中描述的基本设置:

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

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

以上是基于我编辑的Emacs Wiki页面.



4> Dave Webb..:

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

M-x customize-group

然后在Customize group:提示输入backup.

如果滚动到缓冲区的底部,您将看到备份目录列表.单击" 显示值"并设置列表的第一个条目,如下所示:

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

或者,你可以把备份了我的设置使备份文件off.

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


我希望2年前我知道`customize-group`.谢谢!

5> Paweł Hajdan..:

你可以完全禁用它们

(setq make-backup-files nil)

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有