3 回答

TA貢獻1794條經驗 獲得超8個贊
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崩潰時也會自動保存,包括使用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-*-
在文件中。

TA貢獻1829條經驗 獲得超9個贊
該接受的答案是好的,但它可以通過額外得到很大的提高上備份 每一個保存和備份版本的文件。
首先,如接受的答案中所述的基本設置:
(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
- 3 回答
- 0 關注
- 709 瀏覽
添加回答
舉報