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 vimdziałania bez niego.
Każdy plik, który edytujesz, vimbędzie mieć podczas edycji odpowiedni plik wymiany , który vimsłuży do śledzenia zmian. Po wyjściu z edycji pliku vimautomatycznie 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 vimprogram 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 .swpplik 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 vimsesję).
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ę qklawisz (Q)uittej dodatkowej sesji i wrócę do edycji za pośrednictwem oryginalnej vimsesji.
Czasami, jeśli nie jestem do końca pewien, (Q)uitbiegnę, jobsaby sprawdzić, czy działam vimw tym samym terminalu; jeśli nic się nie pojawi, biegnę, ps -ef | grep vimaby sprawdzić, czy działam vimgdzie indziej (tj. w innym oknie terminala lub karcie). Chodzi o to, że zawsze staram się wznowić edycję w oryginalnej vimsesji.
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 rdo (R)ecover.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
Naciśnięcie rspowoduje 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ę vimz tą -ropcją 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, ENTERaby 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 vimsesji:
:q!
Następnie porównaj dwa pliki:
diff notes notes2
Jeśli diffnic 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 diffcoś 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.