I file di backup / salvataggio automatico di Emacs possono essere molto utili. Ma queste funzionalità sono confuse.
File di backup
I file di backup hanno tilde ( ~
o ~9~
) alla fine e devono essere scritti nella home directory dell'utente. Quando make-backup-files
non è zero, Emacs crea automaticamente un backup del file originale la prima volta che il file viene salvato da un buffer. Se stai modificando un nuovo file, Emacs creerà un backup la seconda volta che salvi il file.
Indipendentemente da quante volte si salva il file, il backup rimane invariato. Se si annulla il buffer e si visita nuovamente il file o al successivo avvio di una nuova sessione di Emacs, verrà creato un nuovo file di backup. Il nuovo backup riflette il contenuto del file dopo la riapertura o all'inizio delle sessioni di modifica. Ma un backup esistente non viene mai più toccato. Pertanto trovo utile creare backup numerati (vedere la configurazione seguente).
Per creare backup utilizzare esplicitamente save-buffer
( C-x C-s
) con argomenti prefisso.
diff-backup
e dired-diff-backup
confronta un file con il suo backup o viceversa. Ma non esiste alcuna funzione per ripristinare i file di backup. Ad esempio, in Windows, per ripristinare un file di backup
C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~
deve essere copiato manualmente come
C:\Users\USERNAME\.emacs.el
Salva automaticamente i file
I file di salvataggio automatico utilizzano hashmarks ( #
) e devono essere scritti localmente nella directory del progetto (insieme ai file effettivi). Il motivo è che i file di salvataggio automatico sono solo file temporanei creati da Emacs fino a quando un file non viene nuovamente salvato (come con l'obbedienza affrettata).
- Prima che l'utente prema
C-x C-s
( save-buffer
) per salvare un file, Emacs salva automaticamente i file, basandosi sul conteggio dei tasti ( auto-save-interval
) o quando si interrompe la digitazione ( auto-save-timeout
).
- Emacs inoltre salva automaticamente ogni volta che si arresta in modo anomalo, incluso l'uccisione del lavoro Emacs con un comando shell.
Quando l'utente salva il file, la versione salvata automaticamente viene eliminata. Ma quando l'utente esce dal file senza salvarlo, Emacs o la sessione X si arresta in modo anomalo, i file salvati automaticamente continuano a esistere.
Utilizzare revert-buffer
o recover-file
per ripristinare i file di salvataggio automatico. Si noti che Emacs registra sessioni interrotte per un successivo recupero nei file denominati ~ / .emacs.d / auto-save-list . La recover-session
funzione utilizzerà queste informazioni.
Il metodo preferito per il recupero da un file salvato automaticamente è M-x revert-buffer RET
. Emacs chiederà "Il buffer è stato salvato automaticamente di recente. Ripristinare dal file di salvataggio automatico?" o "Ripristina buffer dal file FILENAME?". In quest'ultimo caso non esiste un file di salvataggio automatico. Ad esempio, poiché hai salvato prima di digitare un'altra auto-save-intervall
sequenza di tasti, nel qual caso Emacs aveva eliminato il file di salvataggio automatico.
Il salvataggio automatico è oggi disabilitato per impostazione predefinita perché può rallentare la modifica quando è collegato a una macchina lenta e perché molti file contengono dati riservati.
Configurazione
Ecco una configurazione che IMHO funziona meglio:
(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)
)
Dati sensibili
Un altro problema è che non si desidera che Emacs diffonda copie di file con dati sensibili. Utilizzare questa modalità in base al file. Trattandosi di una modalità minore, per i miei scopi l'ho rinominata sensitive-minor-mode
.
Per abilitarlo per tutti i file .vcf e .gpg , nei tuoi .emacs usa qualcosa come:
(setq auto-mode-alist
(append
(list
'("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
)
auto-mode-alist))
In alternativa, per proteggere solo alcuni file, come alcuni file .txt , utilizzare una riga come
// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-
nel file.