365 Stimmen

Wie kann ich kontrollieren, wie Emacs Sicherungsdateien erstellt?

Emacs legt Sicherungsdateien mit dem Namen foo~ und ich mag es nicht, daran denken zu müssen, sie zu löschen. Wenn ich außerdem eine Datei bearbeite, die irgendwo im Dateisystem einen Hardlink hat, verweist der Hardlink auf das Backup, wenn ich mit der Bearbeitung fertig bin, und das ist verwirrend und furchtbar. Wie kann ich diese Sicherungsdateien entweder eliminieren oder sie an einen anderen Ort als das gleiche Verzeichnis verweisen lassen?

587voto

jfm3 Punkte 35554

Wenn Sie jemals von einer Emacs-Sicherungsdatei gerettet wurden, wollen Sie wollen Sie wahrscheinlich mehr davon, nicht weniger. Es ist ärgerlich dass sie sich im selben Verzeichnis befinden wie die Datei, die Sie bearbeiten, aber das ist leicht zu ändern. Sie können alle Sicherungsdateien in ein Verzeichnis legen, indem Sie etwas wie das Folgende in Ihr .emacs .

(setq backup-directory-alist `(("." . "~/.saves")))

Es gibt eine Reihe von geheimnisvollen Details, die damit zusammenhängen, wie Emacs Ihre Sicherungsdateien erstellen kann. Soll er das Original umbenennen umbenennen und den bearbeiteten Puffer ausschreiben? Was ist, wenn das Original verlinkt ist? Im Allgemeinen ist es am sichersten, aber auch am langsamsten, Sicherungen immer durch Kopieren.

(setq backup-by-copying t)

Wenn das aus irgendeinem Grund zu langsam ist, können Sie auch einen Blick auf backup-by-copying-when-linked .

Da sich Ihre Sicherungen jetzt alle an einem eigenen Ort befinden, möchten Sie vielleicht eher mehr als weniger von ihnen. Werfen Sie einen Blick in die Emacs Dokumentation für diese Variablen (mit C-h v ).

(setq delete-old-versions t
  kept-new-versions 6
  kept-old-versions 2
  version-control t)

Schließlich, wenn Sie unbedingt keine Sicherungsdateien haben müssen:

(setq make-backup-files nil)

Bei dem Gedanken daran wird mir allerdings schlecht.

88voto

Andreas Spindler Punkte 6601

Emacs Backup/Autosave-Dateien können sehr hilfreich sein. Aber diese Funktionen sind verwirrend.

Dateien sichern

Sicherungsdateien haben Tilden ( ~ o ~9~ ) am Ende und wird in das Heimatverzeichnis des Benutzers geschrieben. Wenn make-backup-files nicht gleich Null ist, erstellt Emacs automatisch ein Backup der Originaldatei, wenn die Datei zum ersten Mal aus einem Puffer gespeichert wird. Wenn Sie eine neue Datei bearbeiten, erstellt Emacs beim zweiten Speichern der Datei ein Backup.

Unabhängig davon, wie oft Sie die Datei speichern, bleibt die Sicherung unverändert. Wenn Sie den Puffer beenden und die Datei erneut aufrufen oder wenn Sie das nächste Mal eine neue Emacs-Sitzung starten, wird eine neue Sicherungsdatei erstellt. Die neue Sicherung spiegelt den Inhalt der Datei nach dem erneuten Öffnen oder zu Beginn einer Bearbeitungssitzung wider. Aber ein bestehendes Backup wird nie wieder angefasst. Daher finde ich es nützlich, nummerierte Backups zu erstellen (siehe die Konfiguration unten).

Um Backups zu erstellen, verwenden Sie explizit save-buffer ( C-x C-s ) mit Präfix-Argumenten.

diff-backup y dired-diff-backup vergleicht eine Datei mit ihrer Sicherung oder umgekehrt. Es gibt jedoch keine Funktion zur Wiederherstellung von Sicherungsdateien. Um eine Sicherungsdatei wiederherzustellen, müssen Sie zum Beispiel unter Windows

C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~

muss es manuell kopiert werden als

C:\Users\USERNAME\.emacs.el

Automatisches Speichern von Dateien

Automatisch speichernde Dateien verwenden Hashmarken ( # ) und wird lokal in das Projektverzeichnis geschrieben (zusammen mit den eigentlichen Dateien). Der Grund dafür ist, dass Auto-Save-Dateien nur temporäre Dateien sind, die Emacs anlegt, bis eine Datei erneut gespeichert wird (wie bei eiligem Gehorsam).

  • Bevor der Benutzer die Taste C-x C-s ( save-buffer ), um eine Datei zu speichern, speichert Emacs automatisch Dateien - basierend auf der Zählung der Tastenanschläge ( auto-save-interval ) oder wenn Sie aufhören zu tippen ( auto-save-timeout ).
  • Emacs speichert auch automatisch, wenn er abstürzt, einschließlich des Beendens des Emacs-Jobs mit einem Shell-Befehl.

Wenn der Benutzer die Datei speichert, wird die automatisch gespeicherte Version gelöscht. Wenn der Benutzer die Datei jedoch beendet, ohne sie zu speichern, oder wenn Emacs oder die X-Sitzung abstürzt, sind die automatisch gespeicherten Dateien noch vorhanden.

使用方法 revert-buffer o recover-file um automatisch gespeicherte Dateien wiederherzustellen. Beachten Sie, dass Emacs unterbrochene Sitzungen zur späteren Wiederherstellung in Dateien namens ~/.emacs.d/auto-save-list . Die recover-session Funktion wird diese Informationen verwenden.

Die bevorzugte Methode zur Wiederherstellung einer automatisch gespeicherten Datei ist M-x revert-buffer RET . Emacs fragt entweder "Buffer has been auto-saved recently. Revert from auto-save file?" oder "Revert buffer from file FILENAME?". Im letzteren Fall gibt es keine Auto-Save-Datei. Zum Beispiel, weil Sie gespeichert haben, bevor Sie eine andere auto-save-intervall Tastenanschläge, in diesem Fall hatte Emacs die Auto-Save-Datei gelöscht.

Die automatische Speicherung ist heutzutage standardmäßig deaktiviert, da sie die Bearbeitung verlangsamen kann, wenn man mit einem langsamen Rechner verbunden ist, und da viele Dateien sensible Daten enthalten.

Konfiguration

Hier ist eine Konfiguration, die IMHO am besten funktioniert:

(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)
      )

Sensible Daten

Ein weiteres Problem ist, dass Sie nicht wollen, dass Emacs Kopien von Dateien mit sensiblen Daten verbreitet. Verwenden Sie dieser Modus auf Dateibasis. Da dies ein untergeordneter Modus ist, habe ich ihn für meine Zwecke umbenannt in sensitive-minor-mode .

Um sie für alle zu aktivieren .vcf y .gpg Dateien, verwenden Sie in Ihrem .emacs etwas wie:

(setq auto-mode-alist
      (append
       (list
        '("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
        )
       auto-mode-alist))

Alternativ können Sie auch nur einige Dateien schützen, z. B. einige .txt Dateien, verwenden Sie eine Zeile wie

// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-

in der Datei.

76voto

ntc2 Punkte 10385

El akzeptierte Antwort ist gut, kann aber durch zusätzliche Maßnahmen erheblich verbessert werden Sichern von jede Speichern und Sichern versioniert Dateien .

Zunächst werden die Grundeinstellungen, wie sie in der akzeptiert Antwort :

(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.

Als nächstes sollten Sie auch versionierte Dateien sichern, was Emacs standardmäßig nicht tut (Sie machen nicht bei jedem Speichern eine Übergabe, richtig?):

(setq vc-make-backup-files t)

Schließlich sollten Sie bei jeder Speicherung eine Sicherungskopie erstellen, nicht nur bei der ersten. Wir machen zwei Arten von Sicherungen:

  1. Pro-Session-Backups: einmal auf dem primero Speicherung des Puffers in jedem Emacs-Sitzung. Diese simulieren das Standard-Backup-Verhalten von Emacs.

  2. Sicherungen pro Speicherplatz: einmal am jede speichern. Emacs tut dies nicht standardmäßig Standard, aber es ist sehr nützlich, wenn Sie Emacs für eine lange Zeit laufen lassen Zeit laufen lassen.

El Backups werden an verschiedenen Orte und Emacs erstellt die Backup-Verzeichnisse automatisch, wenn sie nicht existieren:

;; 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)

Ich habe mich sehr für dieses Thema interessiert, nachdem ich geschrieben hatte $< anstelle von $@ in meinem Makefile etwa drei Stunden nach meiner letzten Übergabe :P

Die obigen Ausführungen beruhen auf einer Emacs Wiki Seite I stark bearbeitet .

33voto

Dave Webb Punkte 184809

Eine weitere Möglichkeit zur Konfiguration der Sicherungsoptionen ist die Benutzeroberfläche "Anpassen". Eingabe:

M-x customize-group

Und dann am Customize group: Eingabeaufforderung backup .

Wenn Sie zum unteren Ende des Puffers blättern, sehen Sie Backup-Verzeichnisliste . Klicken Sie auf Wert anzeigen und setzen Sie den ersten Eintrag in der Liste wie folgt:

Regexp matching filename: .*
Backup directory name: /path/to/your/backup/dir

Alternativ können Sie die Backups auch mit der Einstellung Sicherungsdateien erstellen a off .

Wenn Sie nicht wollen, dass Emacs automatisch Ihre .emacs Datei müssen Sie eine Anpassungsdatei einrichten .

33voto

Paweł Hajdan Punkte 17384

Sie können sie vollständig deaktivieren, indem Sie

(setq make-backup-files nil)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X