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.vimvim
Die beiden in der Meldung ( E325: ATTENTION Found a swap file) dargestellten Szenarien sind tatsächlich recht häufig: (1) Entweder vimbearbeitet 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 vimSitzung 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 .swpDatei 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 vimSitzung 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 qTaste für (Q)uitdiese zusätzliche Sitzung und kehre über die ursprüngliche vimSitzung zur Bearbeitung zurück .
Manchmal, wenn ich mir nicht ganz sicher bin, starte ich (Q)uitund jobsstarte dann, um zu überprüfen, ob ich auf vimdemselben Terminal starte. Wenn sich nichts ergibt, starte ich, um ps -ef | grep vimzu prüfen, ob ich an einer vimanderen 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 vimSitzung 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 rauf (R)ecover.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
Wenn rSie 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 vimmit der -rOption 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 ENTERin 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 vimSitzung:
:q!
Vergleichen Sie als Nächstes die beiden Dateien:
diff notes notes2
Wenn das diffnichts 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 diffetwas 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.