Vim - Löscht die SWP-Datei nach der Wiederherstellung automatisch und ändert die Originaldatei nicht

9

Wenn der Vim-Prozess abrupt beendet wird (z. B. Systemabsturz), verbleibt eine SWP-Datei. Wenn Sie die Originaldatei später in Vim öffnen, können Sie sie wiederherstellen. Meistens ist die wiederhergestellte Datei dieselbe wie die gespeicherte Datei, da ich die Gewohnheit habe, häufig zu speichern. Dann sagt Vim:

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

Natürlich möchte ich jetzt die SWP-Datei löschen!

Wie kann ich Vim dazu bringen, die SWP-Datei in diesem Fall immer automatisch zu löschen?

Es scheint keine eingebaute Einstellung zu geben, daher suche ich nach einem geeigneten Autocommand-Ereignis.

Eine Möglichkeit, die ich gefunden habe, besteht darin, :e #nach der Nachricht, die dazu führt, dass die Swap-Exists-Optionen erneut angezeigt werden, "Löschen". Aber ich sollte nicht jedes Mal diese zusätzlichen Schritte machen müssen.

Evgeni Sergeev
quelle
Vielen Dank! Ich fand Ihren :e #Trick zwar nicht ideal, aber dennoch nützlicher als die aktuelle Antwort unten. :-)
RayLuo

Antworten:

5

Hinweis: Sie haben nicht angegeben, welches Betriebssystem Sie verwenden. Das Folgende funktioniert mit einer Unix-Shell, aber wenn Sie Windows ausführen, können Sie einen Bare-Bones-Cygwin oder eine andere Shell herunterladen.

Ich habe das Gleiche wie Sie getan und ausgeführt :e, um dieselbe Datei erneut zu öffnen und die Option zum Löschen der Wiederherstellungsdatei zu erhalten. Nach einem Absturz oder einem unerwarteten Neustart des Computers bereinige ich alle verbleibenden Vim-Wiederherstellungsdateien, indem ich vim -rdie Auslagerungsdateien ausführe und die Wiederherstellung fortsetzen lasse.

Wenn sich die Dateien nicht geändert haben

Wenn sich die Dateien nicht geändert haben, möchte ich die Wiederherstellungsdatei sofort löschen. Es wäre großartig, wenn Vim dies automatisch tun könnte, aber leider nicht.

Wenn sich Dateien geändert haben

Wenn sich die Dateien geändert haben, führe ich den DiffOrigBefehl aus, um die Unterschiede zwischen der ursprünglichen und der wiederhergestellten Version zu vergleichen. Wenn ich mit den Änderungen aus der Wiederherstellungsdatei zufrieden bin, speichere ich die Dateien mit dem :xBefehl. Wenn nicht, verwerfe ich die wiederhergestellten Änderungen, indem ich mit beende :q!. Wenn die Wiederherstellungsdatei keiner gespeicherten Datei zugeordnet ist, z. B. verwende .swpich normalerweise die :w filename, um den wiederhergestellten Puffer in einer Datei mit einem Dateinamen zu speichern.

DiffOrig-Helfer

Ich habe den Befehl DiffOrig zu meinem hinzugefügt , .vimrcdamit er immer verfügbar ist.

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

Shell-Skript

Ich führe das folgende Skript in meiner Shell aus, um jede Auslagerungsdatei im aktuellen Verzeichnisbaum zu finden. Jede Auslagerungsdatei wird dann zum Öffnen von Vim im „Wiederherstellungsmodus“ verwendet und nach dem Schließen von Vim gelöscht.

find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;

Die rm -iOption erfordert eine Bestätigung ( y), um die Datei zu löschen. Wenn Sie sicherer sind und den Prozess beschleunigen möchten, kann dies weggelassen werden.

Anthony Geoghegan
quelle