Emacs将备份文件放在foo~
任何地方,我不想记得删除它们.此外,如果我在文件系统中的其他位置编辑一个具有硬链接的文件,那么当我完成编辑时,硬链接指向备份,这令人困惑和糟糕.我怎样才能消除这些备份文件,或者将它们放在同一目录以外的某个地方?
如果您曾经被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)
考虑到这一点让我感到恶心.
Emacs备份/自动保存文件非常有用.但这些功能令人困惑.
备份文件
备份文件在末尾有波浪号(~
或~9~
),应写入用户主目录.何时make-backup-files
是非零Emacs在第一次从缓冲区保存文件时自动创建原始文件的备份.如果您正在编辑新文件,Emacs将在您第二次保存文件时创建备份.
无论您保存文件多少次,备份都保持不变.如果您终止缓冲区然后再次访问该文件,或者下次启动新的Emacs会话时,将创建一个新的备份文件.新备份在重新打开后或编辑会话开始时反映文件的内容.但永远不会再触及现有的备份.因此,我发现创建编号备份很有用(请参阅下面的配置).
要显式创建备份,请使用带前缀参数的save-buffer
(C-x C-s
).
diff-backup
并dired-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-buffer
或recover-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-*-
在文件中.
该接受的答案是好的,但它可以通过附加大大提高备份的 每一个保存和备份版本化的文件.
首先,接受的答案中描述的基本设置:
(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页面.
配置备份选项的另一种方法是通过Customize界面.输入:
M-x customize-group
然后在Customize group:
提示输入backup
.
如果滚动到缓冲区的底部,您将看到备份目录列表.单击" 显示值"并设置列表的第一个条目,如下所示:
Regexp matching filename: .* Backup directory name: /path/to/your/backup/dir
或者,你可以把备份了我的设置使备份文件来off
.
如果您不希望Emacs自动编辑您的.emacs
文件,您将需要设置自定义文件.
你可以完全禁用它们
(setq make-backup-files nil)