Les fichiers de sauvegarde / sauvegarde automatique d'Emacs peuvent être très utiles. Mais ces caractéristiques prêtent à confusion.
Fichiers de sauvegarde
Les fichiers de sauvegarde ont des tildes ( ~
ou ~9~
) à la fin et doivent être écrits dans le répertoire personnel de l'utilisateur. Quand make-backup-files
est non nul, Emacs crée automatiquement une sauvegarde du fichier d'origine la première fois que le fichier est enregistré à partir d'un tampon. Si vous modifiez un nouveau fichier, Emacs créera une sauvegarde la deuxième fois que vous enregistrerez le fichier.
Peu importe le nombre de fois que vous enregistrez le fichier, la sauvegarde reste inchangée. Si vous tuez le tampon puis visitez à nouveau le fichier, ou la prochaine fois que vous démarrez une nouvelle session Emacs, un nouveau fichier de sauvegarde sera créé. La nouvelle sauvegarde reflète le contenu du fichier après sa réouverture ou au début des sessions d'édition. Mais une sauvegarde existante n'est plus jamais touchée. Par conséquent, je trouve utile de créer des sauvegardes numérotées (voir la configuration ci-dessous).
Pour créer explicitement des sauvegardes, utilisez save-buffer
( C-x C-s
) avec des arguments de préfixe.
diff-backup
et dired-diff-backup
compare un fichier avec sa sauvegarde ou vice versa. Mais il n'y a pas de fonction pour restaurer les fichiers de sauvegarde. Par exemple, sous Windows, pour restaurer un fichier de sauvegarde
C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~
il doit être copié manuellement
C:\Users\USERNAME\.emacs.el
Fichiers à sauvegarde automatique
Les fichiers à sauvegarde automatique utilisent des hachages ( #
) et doivent être écrits localement dans le répertoire du projet (avec les fichiers réels). La raison en est que les fichiers à sauvegarde automatique ne sont que des fichiers temporaires qu'Emacs crée jusqu'à ce qu'un fichier soit à nouveau enregistré (comme avec une obéissance pressée).
- Avant que l'utilisateur appuie sur
C-x C-s
( save-buffer
) pour enregistrer un fichier, Emacs enregistre automatiquement les fichiers - en fonction du nombre de frappes ( auto-save-interval
) ou lorsque vous arrêtez de taper ( auto-save-timeout
).
- Emacs enregistre également automatiquement chaque fois qu'il se bloque, y compris la suppression du travail Emacs avec une commande shell.
Lorsque l'utilisateur enregistre le fichier, la version enregistrée automatiquement est supprimée. Mais lorsque l'utilisateur quitte le fichier sans l'enregistrer, Emacs ou la session X se bloque, les fichiers enregistrés automatiquement existent toujours.
Utilisez revert-buffer
ou recover-file
pour restaurer les fichiers à sauvegarde automatique. Notez qu'Emacs enregistre les sessions interrompues pour une récupération ultérieure dans des fichiers nommés ~ / .emacs.d / auto-save-list . La recover-session
fonction utilisera ces informations.
La méthode préférée pour récupérer à partir d'un fichier enregistré automatiquement est M-x revert-buffer RET
. Emacs demandera soit "Le tampon a été enregistré automatiquement récemment. Rétablir à partir du fichier d'enregistrement automatique?" ou "Restaurer le tampon du fichier FILENAME?". Dans ce dernier cas, il n'y a pas de fichier d'enregistrement automatique. Par exemple, parce que vous avez enregistré avant de taper une autre auto-save-intervall
séquence de touches, auquel cas Emacs a supprimé le fichier d'enregistrement automatique.
L'enregistrement automatique est aujourd'hui désactivé par défaut car il peut ralentir l'édition lorsqu'il est connecté à une machine lente et parce que de nombreux fichiers contiennent des données sensibles.
Configuration
Voici une configuration qui IMHO fonctionne le mieux:
(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)
)
Données sensibles
Un autre problème est que vous ne voulez pas que Emacs diffuse des copies de fichiers contenant des données sensibles. Utilisez ce mode fichier par fichier. Comme il s'agit d'un mode mineur, je l'ai renommé à mes fins sensitive-minor-mode
.
Pour l'activer pour tous les fichiers .vcf et .gpg , dans vos .emacs, utilisez quelque chose comme:
(setq auto-mode-alist
(append
(list
'("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
)
auto-mode-alist))
Alternativement, pour protéger uniquement certains fichiers, comme certains fichiers .txt , utilisez une ligne comme
// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-
dans le fichier.