Pliki kopii zapasowej / automatycznego zapisywania programu Emacs mogą być bardzo pomocne. Ale te funkcje są mylące.
Kopia zapasowa
Pliki kopii zapasowych mają na końcu tyldy ( ~
lub ~9~
) i powinny zostać zapisane w katalogu osobistym użytkownika. Gdy make-backup-files
jest inny niż zero, Emacs automatycznie tworzy kopię zapasową oryginalnego pliku przy pierwszym zapisaniu pliku z bufora. Jeśli edytujesz nowy plik, Emacs utworzy kopię zapasową przy drugim zapisywaniu pliku.
Bez względu na to, ile razy zapisujesz plik, kopia zapasowa pozostaje niezmieniona. Jeśli zabijesz bufor, a następnie ponownie odwiedzisz plik lub następnym razem, gdy rozpoczniesz nową sesję Emacsa, zostanie utworzony nowy plik kopii zapasowej. Nowa kopia zapasowa odzwierciedla zawartość pliku po ponownym otwarciu lub na początku sesji edycji. Ale istniejąca kopia zapasowa nigdy nie zostanie zmieniona. Dlatego uważam, że przydatne jest tworzenie numerowanych kopii zapasowych (patrz konfiguracja poniżej).
Aby utworzyć kopie zapasowe jawnie użyj save-buffer
( C-x C-s
) z argumentami przedrostka.
diff-backup
i dired-diff-backup
porównuje plik z kopią zapasową lub odwrotnie. Ale nie ma funkcji przywracania plików kopii zapasowych. Na przykład w systemie Windows, aby przywrócić plik kopii zapasowej
C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~
należy go ręcznie skopiować jako
C:\Users\USERNAME\.emacs.el
Automatyczne zapisywanie plików
Pliki automatycznego zapisywania używają skrótów ( #
) i powinny być zapisywane lokalnie w katalogu projektu (wraz z rzeczywistymi plikami). Powodem jest to, że pliki automatycznego zapisywania są tylko plikami tymczasowymi, które tworzy Emacs, dopóki plik nie zostanie zapisany ponownie (jak w przypadku pośpiesznego posłuszeństwa).
- Zanim użytkownik naciśnie
C-x C-s
( save-buffer
), aby zapisać plik, Emacs automatycznie zapisuje pliki - na podstawie liczenia naciśnięć klawiszy ( auto-save-interval
) lub gdy przestaniesz pisać ( auto-save-timeout
).
- Emacs zapisuje także automatycznie, gdy się zawiesi, w tym zabijając zadanie Emacsa za pomocą polecenia powłoki.
Gdy użytkownik zapisuje plik, automatycznie zapisana wersja jest usuwana. Ale gdy użytkownik zamknie plik bez zapisywania go, nastąpi awaria Emacsa lub sesji X, automatycznie zapisywane pliki nadal istnieją.
Użyj revert-buffer
lub, recover-file
aby przywrócić pliki automatycznego zapisywania. Zauważ, że Emacs rejestruje przerwane sesje do późniejszego odzyskania w plikach o nazwie ~ / .emacs.d / auto-save-list . recover-session
Funkcja będzie wykorzystywać te informacje.
Preferowaną metodą odzyskiwania z automatycznie zapisanego pliku jest M-x revert-buffer RET
. Emacs zapyta: „Bufor został ostatnio automatycznie zapisany. Czy przywrócić plik automatycznego zapisywania?” lub „Czy przywrócić bufor z pliku FILENAME?”. W przypadku tego ostatniego nie ma pliku automatycznego zapisywania. Na przykład, ponieważ zapisałeś przed wpisaniem kolejnych auto-save-intervall
naciśnięć klawiszy, w którym to przypadku Emacs usunął plik automatycznego zapisywania.
Automatyczne zapisywanie jest obecnie domyślnie wyłączone, ponieważ może spowolnić edycję po podłączeniu do wolnego komputera oraz ponieważ wiele plików zawiera poufne dane.
Konfiguracja
Oto konfiguracja, którą IMHO najlepiej działa:
(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)
)
Dane wrażliwe
Innym problemem jest to, że nie chcesz, aby Emacs rozpowszechniał kopie plików z poufnymi danymi. Używaj tego trybu dla poszczególnych plików. Ponieważ jest to tryb mniejszy, na moje potrzeby przemianowałem go sensitive-minor-mode
.
Aby włączyć to dla wszystkich plików .vcf i .gpg , w .emacs użyj czegoś takiego:
(setq auto-mode-alist
(append
(list
'("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
)
auto-mode-alist))
Alternatywnie, aby chronić tylko niektóre pliki, takie jak niektóre .txt , użyj linii podobnej do
// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-
w pliku.