Ta wiadomość jest bardzo ważna, jeśli zależy Ci na tym, aby nie stracić tekstu, którego potencjalnie nie zapisałeś. Nie powinno to być denerwujące i nie powinno powodować pośpiesznego usuwania pliku wymiany ani konfigurowania vim
działania bez niego.
Każdy plik, który edytujesz, vim
będzie mieć podczas edycji odpowiedni plik wymiany , który vim
służy do śledzenia zmian. Po wyjściu z edycji pliku vim
automatycznie odrzuci odpowiedni plik wymiany. W związku z tym istnienie pliku wymiany i próba zapisu pliku oryginalnego powinna być powodem do rozważenia i podjęcia odpowiednich działań.
Dwa scenariusze przedstawione w komunikacie ( E325: ATTENTION Found a swap file
) są w rzeczywistości dość powszechne: (1) albo inny vim
program edytuje ten sam plik, który próbujesz edytować (może to być inna osoba - w takim przypadku to naprawdę nie miałoby sensu po prostu ślepo usunąć plik wymiany - może to być Ty w innym oknie terminala lub karcie), lub (2)vim
awaria poprzedniej sesji (najczęściej dzieje się tak, gdy edytujesz zdalnie, a sesja sieciowa jest przerywana - w której jeśli sesja vima nie została zakończona normalnie, a .swp
plik pozostaje w tyle; innym przykładem tego drugiego scenariusza jest przypadkowe zamknięcie okna terminala lub karty, która miała aktywną lub działającą w tle vim
sesję).
Gdy napotykam ten komunikat, najpierw zastanawiam się, czy edytuję ten plik w innym oknie terminala lub na karcie, ponieważ zwykle działam z kilkoma oknami terminalu z kilkoma kartami:
Jeśli zdam sobie sprawę, że edytuję w innym miejscu i mogę do niego wrócić , to nacisnę q
klawisz (Q)uit
tej dodatkowej sesji i wrócę do edycji za pośrednictwem oryginalnej vim
sesji.
Czasami, jeśli nie jestem do końca pewien, (Q)uit
biegnę, jobs
aby sprawdzić, czy działam vim
w tym samym terminalu; jeśli nic się nie pojawi, biegnę, ps -ef | grep vim
aby sprawdzić, czy działam vim
gdzie indziej (tj. w innym oknie terminala lub karcie). Chodzi o to, że zawsze staram się wznowić edycję w oryginalnej vim
sesji.
Jeśli jestem pewien, że nie mogę powrócić do oryginalnej sesji edytorskiej, a mimo to nadal pojawiają się następujące opcje, naciskam przycisk r
do (R)ecover
.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
Naciśnięcie r
spowoduje wyświetlenie następującego komunikatu:
Swap file ".notes.swp" already exists!
"notes" 18L, 46C
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Press ENTER or type command to continue
Z drugiej strony, jeśli nie mam już do czynienia z tymi opcjami, ponieważ pojawia się monit powłoki, to uruchamiam się vim
z tą -r
opcją w następujący sposób:
vim -r notes
Wynikowa wiadomość będzie podobna:
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Press ENTER or type command to continue
Tak czy inaczej, naciśnij, ENTER
aby kontynuować, a zobaczysz plik.
Uwaga: jeśli Vim ma wątpliwości co do tego, co znalazł, wyświetli komunikat o błędzie i wstawi wiersze z „???” w tekście. Jeśli podczas odzyskiwania pojawi się komunikat o błędzie, wyszukaj w pliku „???” aby zobaczyć, co jest nie tak. Możesz wyciąć i wkleić, aby uzyskać potrzebny tekst.
Najczęstszą uwagą jest „??? LINES MISSING”. Oznacza to, że Vim nie może odczytać tekstu z oryginalnego pliku. Może się to zdarzyć, jeśli system ulegnie awarii i części oryginalnego pliku nie zostaną zapisane.
To powiedziawszy, nigdy nie widziałem tych ???
znaków, więc to musi być naprawdę rzadkie zdarzenie.
Następnie zapisz (tj. Zapisz) zawartość do innego pliku (zwykle po prostu dołączam „2” na końcu oryginalnej nazwy pliku):
:w notes2
Następnie wymuś zakończenie tej vim
sesji:
:q!
Następnie porównaj dwa pliki:
diff notes notes2
Jeśli diff
nic nie zwraca , oznacza to, że nie ma różnicy i można bezpiecznie usunąć zarówno plik wymiany, jak i drugi plik:
rm .notes.swp notes2
W tym momencie otwórz oryginalny plik i postępuj tak, jakby nigdy nie było problemu:
vim notes
Jeśli diff
coś zwraca , oznacza to, że oryginalny plik (poprzez plik wymiany) miał zmiany, które dzięki odzyskiwaniu zostały zapisane w drugim pliku.
Ponieważ zmiany te są przechwytywane w drugim pliku, możesz bezpiecznie usunąć plik wymiany i zastąpić oryginalny plik drugim:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
W tym momencie otwórz oryginalny plik i postępuj tak, jakby nigdy nie było problemu:
vim notes
Wydaje się, że to dużo pracy, ale po przyzwyczajeniu się do przepływu pracy zajmuje to maksymalnie 20 sekund.