it-swarm.com.de

Wie werden die Warnungen beim Öffnen einer Datei mit einer .swp-Datei beseitigt?

Wie kann ich die lästigen Warnungen beseitigen, wenn ich eine Datei öffne, die eine .swp-Datei enthält? Oder wie erstelle ich überhaupt keine .swp-Dateien? Beispiel Warnung:

E325: ATTENTION
Found a swap file by the name ".notes.swp"
          owned by: james   dated: Fri Dec  3 17:38:07 2010
         file name: ~james/school/se/project-dir/rottencucumber/doc/notes
          modified: no
         user name: james   Host name: james-laptop
        process ID: 2251 (still running)
While opening file "notes"
             dated: Fri Dec  3 18:46:10 2010
      NEWER than swap file!

(1) Another program may be editing the same file.
    If this is the case, be careful not to end up with two
    different instances of the same file when making changes.
    Quit, or continue with caution.

(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r notes"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".notes.swp"
    to avoid this message.

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
43
James

Diese Meldung ist eigentlich ziemlich wichtig, wenn Sie möchten, dass kein Text verloren geht, den Sie möglicherweise nicht gespeichert haben. Es sollte nicht ärgerlich sein und nicht dazu führen, dass Sie die Auslagerungsdatei hastig löschen oder vim so konfigurieren, dass sie ohne sie ausgeführt wird.

Jede Datei, die Sie mit vim bearbeiten, verfügt über eine entsprechende Auslagerungsdatei , während Sie bearbeiten, mit der vim Änderungen protokolliert. Wenn Sie die Bearbeitung einer Datei beenden, verwirft vim die entsprechende Auslagerungsdatei automatisch. 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.

Die beiden in der Meldung (E325: ATTENTION Found a swap file) dargestellten Szenarien sind tatsächlich recht häufig: (1) Entweder bearbeitet ein anderes vim-Programm dieselbe Datei, die Sie versuchen zu bearbeiten (es könnte tatsächlich eine andere Person sein - in diesem Fall wäre es wirklich nicht sinnvoll, die Auslagerungsdatei einfach blind zu löschen - oder es könnten Sie in einem anderen Terminalfenster sein oder tab), oder (2) eine vorherige Sitzung mit vim ist abgestürzt (am häufigsten passiert dies, wenn Sie eine Remote-Bearbeitung durchführen und die Netzwerksitzung getrennt wird) In diesem Fall wurde die vim-Sitzung nicht normal beendet und die Datei .swp bleibt zurück. Ein weiteres Beispiel für dieses zweite Szenario besteht darin, dass Sie versehentlich das Terminalfenster oder die Registerkarte geschlossen haben, in der/der eine vim-Sitzung aktiv oder im Hintergrund war.

Wenn ich auf diese Meldung stoße, überlege ich zuerst, ob ich diese Datei in einem anderen Terminalfenster oder einer anderen Registerkarte bearbeite, da ich normalerweise mit mehreren Terminalfenstern mit jeweils mehreren Registerkarten arbeite:

enter image description here

Wenn ich feststelle, dass ich an einem anderen Ort bearbeite und zu diesem zurückkehren kann , drücke ich die Taste q, um (Q)uit für diese zusätzliche Sitzung zu erhalten, und kehre über die ursprüngliche Sitzung vim zur Bearbeitung zurück .

Manchmal, wenn ich nicht ganz sicher bin, (Q)uit und dann jobs ausführen, um zu überprüfen, ob ich vim in genau demselben Terminal ausführe; Wenn nichts angezeigt wird, führe ich ps -ef | grep vim aus, um zu überprüfen, ob ich vim an einer anderen Stelle ausführe (d. h. in einem anderen Terminalfenster oder einer anderen Registerkarte). Der Punkt ist, ich versuche immer, die Bearbeitung über die ursprüngliche Sitzung vim fortzusetzen.


Wenn ich sicher bin, dass ich nicht zur ursprünglichen Editiersitzung zurückkehren kann und immer noch die folgenden Optionen zur Verfügung stehen, drücke ich r bis (R)ecover.

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

Wenn Sie r 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 mich an der Shell-Eingabeaufforderung befinde, führe ich vim mit der Option -r wie folgt aus:

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 in beiden Fällen ENTER, 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 abgestürzt ist und Teile der Originaldatei nicht gespeichert wurden.

Das heißt, ich habe diese ???-Marken noch nie gesehen, daher muss dies ein wirklich seltenes Vorkommen 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 die Sitzung mit vim:

:q!

Vergleichen Sie als Nächstes die beiden Dateien:

diff notes notes2

Wenn der diff nichts zurückgibt , bedeutet dies, dass es keinen Unterschied gibt und es sicher ist, sowohl die Auslagerungsdatei als auch die zweite Datei zu entfernen:

rm .notes.swp notes2

Öffnen Sie zu diesem Zeitpunkt die Originaldatei und fahren Sie fort, als ob noch nie ein Problem aufgetreten wäre:

vim notes

Wenn der diff etwas zurückgibt , bedeutet dies, dass die ursprüngliche Datei (über die Auslagerungsdatei) Änderungen hatte, die dank der Wiederherstellung in der Sekunde gespeichert wurden Datei.

Da diese Änderungen in der zweiten Datei erfasst werden, können Sie die Auslagerungsdatei sicher löschen und die ursprüngliche Datei mit der zweiten Datei überschreiben:

rm .notes.swp
remove .notes.swp? y

mv notes2 notes
overwrite notes? (y/n [n]) y

Öffnen Sie zu diesem Zeitpunkt 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.

41
user664833

Die eingefügte Nachricht weist darauf hin, dass Sie die "Notizen" -Datei 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 Botschaft 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 fest entschlossen sind, Vim keine .swp-Dateien erstellen zu lassen, um Abstürze und andere Probleme zu beheben, können Sie "set noswapfile" in ~/.vimrc einfügen.

19
Heptite

Sie können -n verwenden, um vim zu öffnen , ohne eine Auslagerungsdatei zu verwenden :

Um dies die ganze Zeit zu tun, setzen Sie einfach

alias vim='vim -n' 

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

\vim
10
Brad Parks

vim entfernt die generierte .swp-Datei, wenn Sie sie ordnungsgemäß beenden.

Wie kann ich die lästigen Warnungen beseitigen, wenn ich eine Datei öffne, die eine .swp-Datei enthält?

Verwenden Sie die Option für Kurznachrichten in Ihrem ~/.vimrc:

set shortmess=A

Dies ist auch die Standardeinstellung beim Ausführen des POSIX-Modus.

Tun Sie dies jedoch nicht : Es ist wie das Entfernen der Airbags Ihres Autos, um die Kraftstoffeffizienz zu erhöhen. Auf lange Sicht verbringen Sie mehr Zeit damit, sich zu erholen, als jemals zuvor, wenn Sie die Frage beantwortet haben.

1
bishop

Dies passierte mir, als mein Terminal unerwartet meine Verbindung mit vi open schloss.

Zum Glück hatte ich keine Änderungen verloren.

Um diese Warnung zu entfernen und den Swap zu verwerfen:

  1. Ermitteln Sie die Prozess-ID für process ID: 2251 (still running). In diesem Fall ist es 2251
  2. Vergewissern Sie sich , dass Sie die richtige ID haben ps 2251
  3. Beende den Prozess mit kill 2251

Und das ist es.

Denken Sie daran, dass Auslagerungsdateien dazu dienen, Sie zu schützen, und Sie sollten sie nicht vollständig deaktivieren.

1
kintsukuroi