Answers:
如果您曾经被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)
但是让我想起来却使我感到恶心。
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
自动保存文件
自动保存文件使用井号(#
),并且应在项目目录中本地写入(以及实际文件)。原因是自动保存文件只是Emacs创建的临时文件,直到再次保存文件为止(例如,急于遵从)。
C-x C-s
(save-buffer
)保存文件之前,Emacs会基于计数击键(auto-save-interval
)或停止键入(auto-save-timeout
)时自动保存文件。用户保存文件时,将删除自动保存的版本。但是,当用户不保存而退出文件,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-*-
在文件中。
diff
它将与实际文件一起保存。然后解雇Emacs,自己找出原因revert-buffer
。在紧急情况下,这将很快得到回报。
该接受的答案是好的,但它可以通过额外得到很大的提高上备份 每一个保存和备份版本的文件。
首先,如接受的答案所述的基本设置:
(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页面。
setq
顶部的?以上在Emacs 24.5.1中对我有效。
配置备份选项的另一种方法是通过“定制”界面。输入:
M-x customize-group
然后在Customize group:
提示符下输入backup
。
如果滚动到缓冲区底部,则会看到Backup Directory Alist。单击显示值,然后按如下所示设置列表的第一项:
Regexp matching filename: .*
Backup directory name: /path/to/your/backup/dir
或者,你可以把备份了我的设置使备份文件来off
。
如果您不希望Emacs自动编辑.emacs
文件,则需要设置自定义文件。
customize-group
两年前就知道。谢谢!
您可以通过以下方式完全禁用它们
(setq make-backup-files nil)