Powiedzmy, że mam dwa pliki file1
i file2
:
$ echo aaa >file1
$ ln file1 file2
Następnie sprawdzam, czy i-węzły są takie same:
$ ls -i
18749779 file1 18749779 file2
co pokazuje, że dwa pliki są w rzeczywistości takie same. Teraz edytuję file1
w Emacsie i dodaję wiersz z na przykład tekstem bbb
, zapisuję go i wychodzę z Emacsa.
Teraz dostaję:
$ ls -i
18749781 file1 18749779 file2
$ cat file1
aaa
bbb
$ cat file2
aaa
Więc twardy link jest zepsuty. Pamiętaj, że tak się nie dzieje, gdy edytuję plik vim
lub po prostu robię echo bbb >>file1
...
Jak mogę zapobiec zerwaniu przez Emacsa twardych linków?
Aktualizacja:
Zauważ, że mam
(require 'backup-dir)
(setq bkup-backup-directory-info
'((t "~/.emacs-backups/" ok-create full-path )))
w moim ~/.emacs
pliku init. Jeśli zamiast tego file1
dokonam edycji emacs -Q file1
, otrzymam plik wywołany file1~
w bieżącym katalogu, który prowadzi do file2
(ma ten sam i-węzeł), ale file1~
nie został zmodyfikowany (więc jest identyczny ze starym file1
). Nie tego pragnę. Chciałbym zarówno file1
i file2
być tym samym plikiem, i obejmują zaktualizowaną zawartość plików ..
(setq backup-by-copying t)
do mojego~/.emacs
pliku init, to działa zgodnie z potrzebami.Odpowiedzi:
@Hakon rozwiązał swój problem z:
Jeśli wolisz zachować domyślne zachowanie i używać
back-up-by-copying
tylko w przypadku plików połączonych na stałe, możesz użyć tego zamiast tego (i pozostawbackup-by-copying
ustawione nanil
):Ponadto, jak wskazał @Harald, można
back-up-by-copying
zamiast tego ustawić jako zmienną lokalną pliku, aby włączyć tę funkcję tylko dla pojedynczych plików.Wyjaśnienie tego zachowania z podręcznika Emacsa :
Zobacz link do dalszej dyskusji.
źródło