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.
vim -n file_name
Wklejona wiadomość sugeruje, że nadal masz otwarty plik „notatek” w innej sesji Vima. Zdecydowanie nie jest dobrym pomysłem edytowanie pliku, który jest edytowany w innym miejscu.
Jeśli ten komunikat jest nieprawidłowy, musisz ustalić, w jaki sposób sesja Vima zakończyła się niepoprawnie i uniknąć tego w przyszłości.
Jeśli chodzi o odzyskiwanie, może to być problem w tym jednym przypadku, ponieważ „notatki” są nowsze niż powiązany z nim plik .swp Vima, ale nadal możesz spróbować. Tylko najpierw skopiuj plik „notatek” do lokalizacji kopii zapasowej.
Warto przeczytać „
:help recover.txt
”.Lekcja tutaj polega na tym, że nie powinieneś widzieć tej wiadomości i że masz na myśli Coś poszło nie tak. To (prawdopodobnie) nie wina Vima.
Jeśli w tym momencie nadal jesteś absolutnie zdeterminowany, aby nie pozwolić Vimowi tworzyć plików .swp, abyś mógł odzyskać system po awariach i innych powiązanych problemach, możesz wstawić „
set noswapfile
”~/.vimrc
.źródło
Możesz użyć -n, aby otworzyć vima bez użycia pliku wymiany :
Aby to zrobić cały czas, po prostu włóż
w pliku .bashrc lub .bash_aliases
jeśli kiedykolwiek będziesz chciał uruchomić vima bez opcji -n, po prostu uruchom
źródło
vim usunie wygenerowany plik .swp, gdy zamkniesz go poprawnie.
źródło
Użyj opcji krótkiej wiadomości w
~/.vimrc
:Co jest również domyślnym trybem POSIX.
Jednak nie rób tego : to jest jak usunięcie poduszek powietrznych w samochodzie w celu zwiększenia wydajności paliwa. Na dłuższą metę poświęcisz więcej czasu na regenerację, niż kiedykolwiek odpowiadałeś na pytanie.
źródło
:e
sprawdzić, co się stało (w tym szybkou
cofnąć to, co się stało Miałem w buforze). Podoba mi się to znacznie bardziej niż dręczenie się, że mam już otwarty plik.Stało się tak, gdy mój terminal niespodziewanie zamknął moje połączenie z vi open.
Na szczęście nie straciłem żadnych zmian.
process ID: 2251 (still running)
, w tym przypadku jest to 2251ps 2251
kill 2251
I to wszystko.
Pamiętaj, że pliki wymiany są po to, aby cię chronić i nie powinieneś ich całkowicie wyłączać.
źródło
vi(m)
procesu?Rozwiązałem ten problem w trzech prostych krokach:
1 :) Uruchom „ls -la” tam, gdzie plik istnieje, abyś mógł zobaczyć plik .swp dla tego samego.
2 :) Teraz „rm -i * .swp”, tj. Usuń plik „.swp” z katalogu.
3 :) Teraz potwierdź, czy plik „.swp” został usunięty.
4 :) Teraz korzystaj z tych ostrzeżeń.
źródło
rm -rf
usunięcie pliku? Zastąpiłem-rf
bardziej sensownym-i