commands - ¿Cómo controlo cómo Emacs hace los archivos de respaldo?
emacs ubuntu (5)
La respuesta aceptada es buena, pero se puede mejorar mucho al realizar copias de seguridad adicionales en cada guardado y copias de seguridad de los archivos versionados .
Primero, la configuración básica como se describe en la respuesta aceptada :
(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.
A continuación, también haga una copia de seguridad de los archivos versionados, que Emacs no hace de forma predeterminada (no se compromete en cada guardado, ¿verdad?):
(setq vc-make-backup-files t)
Finalmente, haga una copia de seguridad en cada guardado, no solo la primera. Hacemos dos tipos de copias de seguridad:
Copias de seguridad por sesión: una vez en el primer guardado del búfer en cada sesión de Emacs. Estos simulan el comportamiento de copia de seguridad predeterminado de Emac.
Copias de seguridad por guardar: una vez en cada guardado. Emacs no lo hace de manera predeterminada, pero es muy útil si deja a Emacs en ejecución durante mucho tiempo.
Las copias de seguridad van en diferentes lugares y Emacs crea los directorios de copia de seguridad automáticamente si no existen:
;; 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)
Me interesé mucho en este tema después de escribir $<
lugar de $@
en mi Makefile
, aproximadamente tres horas después de mi confirmación anterior: P
Lo anterior se basa en una página de Emacs Wiki que edité en gran medida .
Emacs coloca archivos de copia de seguridad llamados foo~
todas partes y no me gusta tener que recordar eliminarlos. Además, si edito un archivo que tiene un enlace duro en otra parte del sistema de archivos, el enlace duro apunta a la copia de seguridad cuando termino de editar, y eso es confuso y horrible. ¿Cómo puedo eliminar estos archivos de copia de seguridad o hacer que vayan a otro lugar que no sea el mismo directorio?
Los archivos de copia de seguridad / guardado automático de Emacs pueden ser muy útiles. Pero estas características son confusas.
Archivos de respaldo
Los archivos de copia de seguridad tienen tildes ( ~
o ~9~
) al final y se escribirán en el directorio de inicio del usuario. Cuando make-backup-files
es no nulo, Emacs crea automáticamente una copia de respaldo del archivo original la primera vez que se guarda desde un búfer. Si está editando un nuevo archivo, Emacs creará una copia de seguridad la segunda vez que guarde el archivo.
No importa cuántas veces guarde el archivo, la copia de seguridad permanece sin cambios. Si mata el búfer y luego vuelve a visitar el archivo, o la próxima vez que inicie una nueva sesión de Emacs, se creará un nuevo archivo de respaldo. La nueva copia de seguridad refleja el contenido del archivo una vez reabierto, o al inicio de las sesiones de edición. Pero una copia de seguridad existente nunca se toca de nuevo. Por lo tanto, me parece útil crear copias de seguridad numeradas (consulte la configuración a continuación).
Para crear copias de seguridad explícitamente use save-buffer
( Cx Cs
) con argumentos de prefijo.
diff-backup
y dired-diff-backup
compara un archivo con su copia de seguridad o viceversa. Pero no hay una función para restaurar archivos de copia de seguridad. Por ejemplo, en Windows, para restaurar un archivo de copia de seguridad
C:/Users/USERNAME/.emacs.d/backups/!drive_c!Users!USERNAME!.emacs.el.~7~
Tiene que ser copiado manualmente como
C:/Users/USERNAME/.emacs.el
Guardar archivos automáticamente
Los archivos de guardado automático utilizan hashmarks ( #
) y se escribirán localmente dentro del directorio del proyecto (junto con los archivos reales). La razón es que los archivos de guardado automático son solo archivos temporales que Emacs crea hasta que un archivo se guarda de nuevo (como con la obediencia apresurada).
- Antes de que el usuario presione
Cx Cs
(save-buffer
) para guardar un archivo, Emacs guarda automáticamente los archivos, basándose en el conteo de las teclas (auto-save-interval
) o cuando deja de escribir (auto-save-timeout
). - Emacs también se guarda automáticamente cada vez que se bloquea, incluida la eliminación del trabajo de Emacs con un comando de shell.
Cuando el usuario guarda el archivo, la versión guardada automáticamente se elimina. Pero cuando el usuario sale del archivo sin guardarlo, Emacs o la sesión de X se bloquean, los archivos guardados automáticamente todavía existen.
Use revert-buffer
o recover-file
para restaurar archivos de guardado automático. Tenga en cuenta que Emacs graba sesiones interrumpidas para su posterior recuperación en archivos denominados ~ / .emacs.d / auto-save-list . La función de recover-session
utilizará esta información.
El método preferido para recuperarse de un archivo guardado automáticamente es Mx revert-buffer RET
. Emacs preguntará: "El búfer se ha guardado automáticamente recientemente. ¿Desea volver del archivo de guardado automático?" o "Revertir el búfer del archivo FILENAME?". En el caso de este último no hay archivo de guardado automático. Por ejemplo, porque ha guardado antes de escribir otras pulsaciones de auto-save-intervall
intervent, en cuyo caso Emacs había eliminado el archivo de auto-guardado.
Hoy en día, el guardado automático está deshabilitado de forma predeterminada porque puede ralentizar la edición cuando está conectado a una máquina lenta y porque muchos archivos contienen datos confidenciales.
Configuración
Aquí hay una configuración que IMHO funciona mejor:
(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)
)
Informacion delicada
Otro problema es que no desea que Emacs distribuya copias de archivos con datos confidenciales. Utilice este modo por archivo. Como este es un modo secundario, para mis propósitos lo renombré sensitive-minor-mode
.
Para habilitarlo para todos los archivos .vcf y .gpg , en su .emacs use algo como:
(setq auto-mode-alist
(append
(list
''("//.//(vcf//|gpg//)$" . sensitive-minor-mode)
)
auto-mode-alist))
Alternativamente, para proteger solo algunos archivos, como algunos archivos .txt , use una línea como
// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-
en el archivo.
Otra forma de configurar las opciones de copia de seguridad es a través de la interfaz Personalizar. Entrar:
M-x customize-group
Y luego, en el Customize group:
ingrese la backup
.
Si se desplaza a la parte inferior del búfer, verá Backup Directory Alist . Haga clic en Mostrar valor y establezca la primera entrada de la lista de la siguiente manera:
Regexp matching filename: .*
Backup directory name: /path/to/your/backup/dir
Alternativamente, puede desactivar las copias de seguridad de mi configuración. off
archivos de copia de seguridad .
Si no desea que Emacs edite automáticamente su archivo .emacs
, querrá configurar un archivo de personalización .
Puedes deshabilitarlos por completo
(setq make-backup-files nil)
Si alguna vez ha sido salvado por un archivo de copia de seguridad de Emacs, probablemente quiera más, no menos. Es molesto que vayan en el mismo directorio que el archivo que está editando, pero eso es fácil de cambiar. Puede hacer que todos los archivos de copia de seguridad .emacs
en un directorio colocando algo como lo siguiente en su .emacs
.
(setq backup-directory-alist `(("." . "~/.saves")))
Hay una serie de detalles arcanos asociados con cómo Emacs puede crear sus archivos de respaldo. ¿Debería cambiar el nombre del original y escribir el búfer editado? ¿Qué pasa si el original está vinculado? En general, la apuesta más segura pero más lenta es hacer copias de seguridad siempre copiando.
(setq backup-by-copying t)
Si eso es demasiado lento por alguna razón, también puede echarle un vistazo a la backup-by-copying-when-linked
.
Ya que todas las copias de seguridad están en su propio lugar ahora, es posible que desee más, en lugar de menos. Eche un vistazo a la documentación de Emacs para estas variables (con Ch v
).
(setq delete-old-versions t
kept-new-versions 6
kept-old-versions 2
version-control t)
Por último, si es absolutamente necesario no tener archivos de copia de seguridad:
(setq make-backup-files nil)
Aunque me enferma pensar en ello.