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.
vim -n file_name
Die eingefügte Nachricht weist darauf hin, dass Sie die Datei "notes" noch in einer anderen Vim-Sitzung geöffnet haben. Es ist definitiv keine gute Idee, eine Datei zu bearbeiten, die an anderer Stelle bearbeitet wird.
Wenn diese Nachricht falsch ist, müssen Sie feststellen, wie Ihre Vim-Sitzung nicht ordnungsgemäß beendet wurde, und dies in Zukunft vermeiden.
Die Wiederherstellung kann in diesem Fall problematisch sein, da "notes" neuer ist als die zugehörige Vim .swp-Datei, Sie können es jedoch trotzdem versuchen. Stellen Sie einfach sicher, dass Sie zuerst Ihre "Notizen" -Datei an einen Sicherungsort kopieren.
Es wäre eine gute Idee, "
:help recover.txt
" durchzulesen.Die Lehre hier ist, dass Sie diese Nachricht nicht sehen sollen und dass Sie bedeuten, dass etwas irgendwo falsch gelaufen ist. Es ist (wahrscheinlich) nicht die Schuld von Vim.
Wenn Sie zu diesem Zeitpunkt immer noch absolut fest entschlossen sind, Vim keine .swp-Dateien erstellen zu lassen, damit Sie sich von Abstürzen und anderen verwandten Problemen "
set noswapfile
" erholen können, geben Sie möglicherweise Folgendes ein~/.vimrc
.quelle
Sie können -n verwenden, um vim zu öffnen, ohne eine Auslagerungsdatei zu verwenden :
Um dies die ganze Zeit zu tun, einfach setzen
in Ihrer .bashrc- oder .bash_aliases-Datei
Wenn Sie vim jemals ohne die Option -n ausführen müssen, führen Sie es einfach aus
quelle
vim entfernt die generierte .swp-Datei, wenn Sie sie ordnungsgemäß beenden.
quelle
Verwenden Sie die Option für Kurznachrichten in
~/.vimrc
:Dies ist auch die Standardeinstellung beim Ausführen des POSIX-Modus.
Allerdings tun dies nicht : es ist wie Ihr Auto Airbags Entfernen der Kraftstoffeffizienz zu erhöhen. Auf lange Sicht verbringen Sie mehr Zeit damit, sich zu erholen, als jemals zuvor, um die Frage zu beantworten.
quelle
:e
um zu sehen , was (auch schnell passiert istu
rückgängig zu machen auf dem, was Ich hatte im Puffer.) Ich mag das viel besser, als mich darüber zu ärgern, dass ich bereits eine Datei geöffnet habe.Dies passierte mir, als mein Terminal unerwartet meine Verbindung mit vi open schloss.
Zum Glück hatte ich keine Änderungen verloren.
process ID: 2251 (still running)
wird. In diesem Fall ist es 2251ps 2251
kill 2251
Und das ist es.
Denken Sie daran, dass Auslagerungsdateien dazu dienen, Sie zu schützen, und dass Sie sie nicht vollständig deaktivieren sollten.
quelle
vi(m)
Prozess gibt?Ich habe dieses Problem in drei einfachen Schritten gelöst:
1 :) Führen Sie "ls -la" aus, wo die Datei vorhanden ist, damit Sie die .swp-Datei für dieselbe anzeigen können.
2 :) Jetzt "rm -i * .swp" dh die ".swp" -Datei aus dem Verzeichnis entfernen.
3 :) Bestätigen Sie nun, ob die ".swp" -Datei entfernt wurde.
4 :) Nun viel Spaß mit diesen Warnungen.
quelle
rm -rf
, eine Datei zu entfernen? Ich ersetzte-rf
mit einem vernünftigeren-i