Czy Vim automatycznie zapisuje?

13

Od :help swap-file:

Aktualizowanie pliku wymiany

Plik wymiany jest aktualizowany po wpisaniu 200 znaków lub gdy przez cztery sekundy nic nie wpisałeś. Dzieje się tak tylko wtedy, gdy bufor został zmieniony, a nie tylko podczas przemieszczania się. Powodem, dla którego nie jest cały czas aktualizowany, jest to, że zbytnio spowolniłoby to normalną pracę. Możesz zmienić liczbę 200 znaków za pomocą opcji „updatecount”. Możesz ustawić czas za pomocą opcji „updatetime”. Czas podawany jest w milisekundach. Po zapisaniu do pliku wymiany Vim synchronizuje plik na dysk. Zajmuje to trochę czasu, szczególnie na zapracowanych systemach uniksowych. Jeśli nie chcesz tego, możesz ustawić opcję „swapsync” na pusty ciąg. Ryzyko utraty pracy staje się jednak większe. W niektórych systemach innych niż Unix (MS-DOS, Amiga) plik wymiany w ogóle nie zostanie zapisany.

Z tego mam kilka pytań:

  1. Czy to oznacza, że ​​Vim od czasu do czasu automatycznie zapisuje twoją pracę?

  2. „Po zapisaniu do pliku wymiany Vim synchronizuje plik na dysk.” Co to znaczy? Czy odnosi się to do pliku zapisywanego najpierw w pamięci, a następnie na dysku, czy jest to coś innego?

  3. Powiedzmy, że robię notatki z zajęć: piszę szybko i nie muszę opuszczać trybu wstawiania. Ale wiele razy przechodzę na Normalny, aby zapisać swoją pracę. Czy muszę to zrobić, czy Vim upewnia się, że większość mojej pracy jest zapisana, nawet jeśli nie opuszczę trybu wstawiania?

Gonçalo Ribeiro
źródło

Odpowiedzi:

9
  1. Tak, zapisuje plik wymiany.

Możesz zrobić szybki test, aby się zorientować . Idź do katalogu. Powiedz vim notest.txti napisz trochę tekstu. Nie musisz nawet zapisywać pliku.

Jeśli wylistujesz pliki w katalogu roboczym, znajdziesz plik wymiany. Skopiuj go do innego katalogu (jak powiedzmy, nie masz pliku „notes.txt”) vim notest.txt.

Otrzymasz notatkę o zamianie istniejącej, jej modyfikacji i opcjach otwierania tylko do odczytu, odzyskania itp. Wybierz odzyskaj i voila! „Kopia” pliku.

  1. Tak, zamiana jest przechowywana w pamięci.

Kiedy Vim odczytuje plik, dodaje go do pamięci RAM. Dotyczy to zarówno istniejących, jak i nowych (wciąż niezapisanych plików). Po zapisaniu zamiany jest ona opróżniana na dysk. HDD. Z pamięci RAM.

  1. Tak i nie.

Przy ustawieniach domyślnych większość pracy jest zapisywana. To jest za każde 200 wprowadzonych znaków lub gdy masz 4-sekundową pauzę. Chociaż ufam, że plik wymiany zostanie zapisany, lubię zapisywać swoją pracę, gdy wiem, że jestem w niestabilnym systemie. Ale powiedziawszy to, jest się dość pewnym, że dotrzyma tej pracy, chyba że należy mieć pecha, a system hostingowy wpadnie w panikę zaraz po napisaniu bardzo ważnego zdania.

Krótko mówiąc, wystarczy zaoszczędzić po zakończeniu wykładu. Jeśli system powinien zostać zatrzymany z jakiegokolwiek powodu w klasie, praca jest do końca.

Oczywiście: jeśli masz pecha, może wystąpić awaria podczas zapisywania pliku wymiany. W rezultacie plik wymiany może zostać uszkodzony. Nigdy tego nie doświadczyłem i nie jestem pewien, które części pliku mogą zostać pomylone, ale mogą być warte przemyślenia. Ponieważ plik wymiany jest binarny (bez lepszego słowa), wydaje się, że jest bardziej delikatny niż zwykły plik tekstowy.


Na marginesie. Przynajmniej podczas korzystania z katalogu roboczego do wymiany, plik wymiany jest niezależny od lokalizacji, jeśli chodzi o odzyskiwanie. W związku z tym możesz skopiować plik wymiany do nowej lokalizacji i odzyskać go jako nowy plik. Pamiętaj tylko, że nazwa pliku jest na stałe zapisana w swapie. Jako taki nie możesz powiedzieć:

cp .foo.txt.swp .bar.txt.swp

i

vim bar.txt

i spodziewaj się pliku wymiany foo.txt.

Jeśli jesteś bardzo zainteresowany, możesz (on * nix):

xxd -s 108 -l 800 -ps .foo.txt.swp | xxd -r -p

aby uzyskać ścieżkę (z pewnymi dziwactwami) oryginalnego pliku. Jak zobaczysz, dodano pełną ścieżkę, np .:

~user/blah/blah/notes.txt

ale tylko basename jest używany do sprawdzania wymiany.

W tym względzie możesz również sprawdzić vim -ropcję - która wymienia pliki wymiany w bieżących i niższych katalogach. Zobacz :h crash-recoveryz podtematów.

Runium
źródło
0

Dla mnie w porządku jest zapisywanie bufora przy każdej zmianie tekstu:

autocmd TextChanged,TextChangedI <buffer> silent write

Znalazłem to tutaj . Mi to pasuje.

simhumileco
źródło