dlaczego zmienia się wartość i-węzła, gdy edytujemy w edytorze „vi”?


22

Kiedy edytuję plik w edytorze „vi”, zmienia się wartość i-węzła pliku. Ale podczas edycji za pomocą polecenia cat wartość i-węzła się nie zmienia.

Odpowiedzi:


18

Najprawdopodobniej włączyłeś opcję tworzenia kopii zapasowych , a kopia zapasowa została ustawiona na „no” lub „breakhardlink”.


jak usunąć tę opcję
poniedziałek,

2
@monu, edytuj swoje ~/.vimrc. To nie są ustawienia domyślne.
cjm

@cjm vim 7.4, nie miałem ciąg backupw moim .vimrc, ale iwęzeł wciąż się zmienia, bo domyślnie jest do pliku kopii zapasowej bieżącej, potem usunięte i / * * / w miarę możliwości zmienić nazwę pliku / * do kopii zapasowej * / i pisać nowy / * pod tą samą nazwą, skutecznie zmieniając i-węzeł * / . Rozwiązany przez dodanie set backupcopy=yesdo .vimrc.
Kirill Bulygin

27

Kiedy chcesz zmodyfikować plik, masz dwie opcje, każda z zaletami i wadami.

  • Możesz zastąpić plik na miejscu. Nie zajmuje to dodatkowego miejsca i zachowuje twarde linki, uprawnienia i wszelkie inne atrybuty poza zawartością istniejącego pliku. Główną wadą takiego działania jest to, że jeśli coś się stanie podczas zapisywania pliku (aplikacja ulegnie awarii lub nastąpi zanik zasilania), powstanie częściowo zapisany plik.
  • Możesz zapisać nową wersję pliku do nowego pliku o innej nazwie, a następnie przenieść go na miejsce. To zużywa więcej miejsca i zrywa twarde linki, a jeśli masz uprawnienia do zapisu do pliku, ale nie do katalogu w nim zawartego, nie możesz tego wcale zrobić. Z drugiej strony stara wersja pliku jest atomowo zastępowana nową wersją, więc w każdym momencie nazwa pliku wskazuje prawidłową, pełną wersję pliku.

Zaawansowane edytory, takie jak Vim lub Emacs, mogą wybierać między tymi dwiema metodami. Kiedy używają pierwszej metody, zwykle najpierw tworzą plik kopii zapasowej, który można odzyskać, jeśli nie można poprawnie zapisać nowej zawartości pliku.

Klasyczne vi zastępuje plik na miejscu. I-węzeł pozostaje niezmieniony.

W vim, jak CJM już stwierdził , wybór jest kontrolowany przez backup, backupcopyi writebackupopcji. Domyślnie Vim zmienia nazwę starego pliku, a następnie zapisuje nowy plik z oryginalną nazwą, jeśli sądzi, że może odtworzyć atrybuty oryginalnego pliku. Jeśli chcesz ponownie użyć istniejącego i-węzła (a więc ryzykować utratę danych lub marnować więcej czasu na tworzenie kopii zapasowej), dodaj set backupcopy yesdo swojego .vimrc.


+1 Za wzmiankę, writebackupponieważ już się wyłączyłem, ale backupi- backupcopywęzeł wciąż się zmieniał.
Alireza Mohamadi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.