Diese Meldung ist eigentlich ziemlich wichtig, wenn Sie darauf bedacht sind, keinen Text zu verlieren, den Sie möglicherweise nicht gespeichert haben. Es sollte nicht als ärgerlich angesehen werden und Sie sollten die Auslagerungsdatei nicht hastig löschen oder so konfigurieren vim
, dass sie ohne sie ausgeführt wird.
Jede Datei, mit der Sie bearbeiten , verfügt während der Bearbeitungvim
über eine entsprechende Auslagerungsdatei , mit der Sie Änderungen nachverfolgen können. Wenn Sie die Bearbeitung einer Datei beenden, wird die entsprechende Auslagerungsdatei automatisch verworfen. Das Vorhandensein einer Auslagerungsdatei und Ihr Versuch, über die ursprüngliche Datei zu schreiben, sollten daher Anlass zur Überlegung und zu geeigneten Maßnahmen geben.vim
vim
Die beiden in der Meldung ( E325: ATTENTION Found a swap file
) dargestellten Szenarien sind tatsächlich recht häufig: (1) Entweder vim
bearbeitet ein anderes Programm dieselbe Datei, die Sie gerade bearbeiten möchten (es könnte sich tatsächlich um eine andere Person handeln - in diesem Fall ist dies wirklich nicht sinnvoll um die Auslagerungsdatei einfach blind zu löschen (oder Sie könnten sich in einem anderen Terminalfenster oder einer anderen Registerkarte befinden), oder (2) eine vorherige vim
Sitzung ist abgestürzt (am häufigsten passiert dies, wenn Sie eine Remote-Bearbeitung durchführen und die Netzwerksitzung getrennt wird) Wenn die vim-Sitzung nicht normal beendet wurde und die .swp
Datei zurückbleibt, besteht ein weiteres Beispiel für dieses zweite Szenario darin, dass Sie versehentlich das Terminalfenster oder die Registerkarte geschlossen haben, in der eine vim
Sitzung aktiv oder im Hintergrund ausgeführt wurde .
Wenn ich auf diese Meldung stoße, denke ich zuerst darüber nach, ob ich diese Datei in einem anderen Terminalfenster oder einer anderen Registerkarte bearbeite, da ich normalerweise mit mehreren Terminalfenstern mit jeweils mehreren Registerkarten arbeite:
Wenn ich feststelle, dass ich an einem anderen Ort bearbeite und zurückkehren kann , drücke ich die q
Taste für (Q)uit
diese zusätzliche Sitzung und kehre über die ursprüngliche vim
Sitzung zur Bearbeitung zurück .
Manchmal, wenn ich mir nicht ganz sicher bin, starte ich (Q)uit
und jobs
starte dann, um zu überprüfen, ob ich auf vim
demselben Terminal starte. Wenn sich nichts ergibt, starte ich, um ps -ef | grep vim
zu prüfen, ob ich an einer vim
anderen Stelle (z. B. in einem anderen Terminalfenster oder einer anderen Registerkarte) aktiv bin . Der Punkt ist, ich versuche immer, die Bearbeitung über die ursprüngliche vim
Sitzung fortzusetzen.
Wenn ich sicher bin, dass ich nicht zur ursprünglichen Bearbeitungssitzung zurückkehren kann und immer noch die folgenden Optionen angezeigt werden, drücke ich r
auf (R)ecover
.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
Wenn r
Sie auf drücken , wird eine Nachricht wie die folgende angezeigt:
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
Wenn ich andererseits nicht mehr mit diesen Optionen konfrontiert bin, weil ich an der Shell-Eingabeaufforderung bin, dann starte ich vim
mit der -r
Option wie folgt:
vim -r notes
Die resultierende Nachricht wird ähnlich sein:
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
Drücken Sie ENTER
in beiden Fällen, um fortzufahren, und Ihre Datei wird angezeigt.
Hinweis: Wenn Vim Zweifel daran hat, was es gefunden hat, wird eine Fehlermeldung ausgegeben und Zeilen mit "???" im Text. Wenn beim Wiederherstellen eine Fehlermeldung angezeigt wird, suchen Sie in der Datei nach "???" um zu sehen, was los ist. Möglicherweise möchten Sie Ausschneiden und Einfügen, um den gewünschten Text zu erhalten.
Die häufigste Bemerkung ist "??? LINES MISSING". Dies bedeutet, dass Vim den Text aus der Originaldatei nicht lesen kann. Dies kann passieren, wenn das System abstürzt und Teile der Originaldatei nicht gespeichert wurden.
Das heißt, ich habe diese ???
Zeichen noch nie gesehen , also muss dies ein wirklich seltenes Ereignis sein.
Speichern Sie als nächstes den Inhalt in einer anderen Datei (normalerweise füge ich einfach "2" an das Ende des ursprünglichen Dateinamens an):
:w notes2
Beenden Sie als Nächstes diese vim
Sitzung:
:q!
Vergleichen Sie als Nächstes die beiden Dateien:
diff notes notes2
Wenn das diff
nichts zurückgibt , gibt es keinen Unterschied und es ist sicher, sowohl die Auslagerungsdatei als auch die zweite Datei zu entfernen:
rm .notes.swp notes2
Öffnen Sie an dieser Stelle die Originaldatei und fahren Sie fort, als ob noch nie ein Problem aufgetreten wäre:
vim notes
Wenn diff
etwas zurückgegeben wird, bedeutet dies, dass die ursprüngliche Datei (über die Auslagerungsdatei) Änderungen aufwies, die dank der Wiederherstellung in der zweiten Datei gespeichert wurden.
Da diese Änderungen in der zweiten Datei erfasst werden, können Sie die Auslagerungsdatei sicher löschen und die Originaldatei mit der zweiten Datei überschreiben:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
Öffnen Sie an dieser Stelle die Originaldatei und fahren Sie fort, als ob noch nie ein Problem aufgetreten wäre:
vim notes
Dies scheint eine Menge Arbeit zu sein, aber sobald Sie sich an den Workflow gewöhnt haben, dauert es maximal 20 Sekunden.