Допустим, у меня есть два файла file1
и file2
:
$ echo aaa >file1
$ ln file1 file2
Затем я проверяю, совпадают ли inode:
$ ls -i
18749779 file1 18749779 file2
который показывает, что два файла на самом деле одинаковы. Теперь я редактирую file1
в Emacs, добавляю строку, например, с текстом bbb
, сохраняю ее и выхожу из Emacs.
Теперь я получаю:
$ ls -i
18749781 file1 18749779 file2
$ cat file1
aaa
bbb
$ cat file2
aaa
Так что жесткая ссылка не работает. Обратите внимание, что это не происходит, когда я редактирую файл vim
или просто делаю echo bbb >>file1
..
Как я могу предотвратить взлом жестких ссылок в Emacs?
Обновить:
Обратите внимание, что у меня есть
(require 'backup-dir)
(setq bkup-backup-directory-info
'((t "~/.emacs-backups/" ok-create full-path )))
в моем ~/.emacs
файле инициализации. Если я редактирую, file1
используя emacs -Q file1
вместо этого, я получаю файл с именем file1~
в текущем каталоге, который ссылается file2
(имеет тот же индекс), но file1~
не был изменен (так что он идентичен старому file1
) .. Это не то, что я хочу. Я хотел бы, чтобы оба file1
и один и file2
тот же файл, и включить обновленное содержимое файла ..
(setq backup-by-copying t)
в мой~/.emacs
файл инициализации, он будет работать как нужно ..Ответы:
@ Хакон решил свою проблему с:
Если вы предпочитаете сохранить поведение по умолчанию и использовать его
back-up-by-copying
только для жестко связанных файлов, вы можете использовать его вместо этого (и оставитьbackup-by-copying
для него значениеnil
):Кроме того, как отмечает @Harald, вы можете
back-up-by-copying
вместо этого установить в качестве локальной файловой переменной, чтобы включить эту функцию только для отдельных файлов.Объяснение такого поведения с Emacs руководства :
Смотрите связанную страницу для дальнейшего обсуждения.
источник