VIM - hinterlässt nach dem Absturz SWP-Dateien

8

Ich verwende MacVim (snapshot 51), um die Python / HTML / etc-Dateien in einem mittelgroßen Projekt zu bearbeiten. Alle paar Monate stürzt mein System ab oder stürzt ab, und Vim hinterlässt eine Vielzahl von. *. SWP-Dateien. Wenn ich Vim nach dem Absturz erneut öffne und eine dieser Dateien bearbeite, wird mir mitgeteilt, dass "Swap file '' .xyz.swp '' bereits vorhanden ist!" mit den Optionen [Abbrechen] [Beenden] [Löschen] [Wiederherstellen] [Trotzdem bearbeiten] und [Nur Lesen öffnen].

Diese Wiederherstellungsoption wäre sinnvoll, wenn Änderungen am Vim-Puffer vorgenommen würden, die zum Zeitpunkt des Absturzes nicht gespeichert wurden. Zum Zeitpunkt des Absturzes wurden diese Dateien jedoch im Hintergrund von Vim geöffnet und unverändert.

Wie kann ich Vim so konfigurieren, dass diese überflüssige Frage beim Öffnen von Dateien, für die es keine Änderungen zwischen der .swpDatei und der tatsächlichen Datei gibt, nicht gestellt wird, z.

  1. Automatisches Vergleichen der Änderungen in der SWP-Datei mit der Datei. Wenn keine Änderungen vorgenommen wurden, öffnen Sie die Datei einfach ohne Aufforderung.

  2. Keine SWP-Datei für Dateien ohne Änderungen aufbewahren.

  3. Alle anderen Mittel, um diese sinnlose Eingabeaufforderung systematisch zu vermeiden (aber ich würde es vorziehen, die Eingabeaufforderung nicht zu vermeiden, wenn natürlich nicht gespeicherte Änderungen vorgenommen wurden).

Ich habe .swpim Moment über fünfzig Dateien zu bereinigen, und die sinnlose Aufforderung ist eine Frustration, die ich dankbar vermeiden würde.

Danke fürs Lesen.

Brian

Brian M. Hunt
quelle
"Alle paar Monate"? Wenn Ihr System nur alle paar Monate abstürzt und Sie viele SWP-Dateien erhalten, müssen Sie Vim auf die falsche Weise beenden. Verwenden Sie: q, nicht nur Strg + Z.
Mcandre
@ McCandre: Hmm. Ich benutze :q, aber die Auslagerungsdateien scheinen trotzdem für Puffer im Hintergrund herumzuhängen. Vielleicht ist das eher mein Problem. Ich sehe nichts darin ~/.vimrc, was Puffer Ctrl+Zherumhalten würde ... (Übrigens, was macht es? Es scheint nichts in MacVim zu tun)
Brian M. Hunt
Ctrl+ZBeendet einen Prozess, der von einer Shell (Terminal) gestartet wurde. Da Sie MacVim verwenden, trifft dies nicht auf Ihre Situation zu, aber Sie können es irgendwann von Ihrem Terminal aus versuchen ...
bchang
Eigentlich Ctrl-Ztöten nichts. Es setzt den Prozess aus. (Aber nicht in GUI Vims.) Auf diese Weise können Sie zur Shell zurückkehren, einige Dinge tun und Vim wieder hochfahren. Wenn Sie die Schale in der Zwischenzeit töten ( zum Beispiel durch das Terminal - Fenster zu schließen) Sie werden töten Vim.
Peeja

Antworten:

3

Ich habe es nicht getestet, aber was ist mit dieser Lösung, die im offiziellen Wiki von vim vorgestellt wird?

Swap-Datei "..." existiert bereits! - So diff es

Auch in der Situation, in der sich herausstellt, dass die wiederhergestellte Auslagerungsdatei mit der realen Datei identisch ist, besteht keine Notwendigkeit für die Abweichung.

#!/bin/bash
# Expects variables realfile, swapfile, recoveryfile.
vim -r "$swapfile" -c ":wq! $recoveryfile" && rm "$swapfile"
if cmp "$recoveryfile" "$realfile"
then rm "$recoveryfile"
else vimdiff "$recoveryfile" "$realfile"
fi

Auch für dieses Problem gibt es in Stackoverflow ein Skript .

Dadurch werden alle Auslagerungsdateien entfernt, die mit den tatsächlichen Dateien auf dem neuesten Stand sind . Alle nicht übereinstimmenden Elemente werden in einem vimdiff-Fenster angezeigt, damit ich meine nicht gespeicherten Änderungen zusammenführen kann.

GmonC
quelle
4

Dies ist zwar nicht genau das, was Sie möchten, kann jedoch das Problem mindern:

" Setup backup location and enable
set backup
set backupdir=$HOME/temp/vim_backups/       "where to put those backups
set directory=$HOME/temp/vim_swp/           "this is for swp files      

Erstellen Sie diese Verzeichnisse und schreiben Sie die Dateien ~ und .swp an einen zentralen Ort. Viel einfacher auf diese Weise aufzuräumen!

Schauen Sie sich auch recovery.vim an. Wenn eine SWP-Datei erkannt wird, werden Sie aufgefordert, einen Unterschied zwischen der On-Disk-Version und dem SWP auszuführen, damit Sie sehen können, was sich geändert hat. Viel hilfreicher auf diese Weise IMO.

redigiert
quelle
0

Vim erstellt automatisch SWP-Dateien als Backup für genau diese Situation: Das System stürzt ab. Befolgen Sie diese Anweisungen , um die Erstellung von SWP-Dateien zu deaktivieren .

1. Ergebnis für Google : vim disable .swp.

mcandre
quelle
@ McCandre: Danke. Das Deaktivieren von Swap ist eine Worst-Case-Lösung, und angesichts des (wenn auch mit geringer Wahrscheinlichkeit) hohen Werts des potenziellen Verlusts durch die Nichtverwendung von Swap-Dateien werde ich dies wahrscheinlich nicht tun. Es ist die sinnlose Wiederherstellungsaufforderung, die ich vermeiden möchte.
Brian M. Hunt
Sie können ein Anmeldeskript schreiben, das alle SWP-Dateien findet und in ein Sicherungsverzeichnis verschiebt (oder sie sogar löscht).
Mcandre
@ McCandre: Danke für den Vorschlag. Das könnte funktionieren, und ich habe darüber nachgedacht, aber es würde mir nicht sagen, ob es nicht gespeicherte Änderungen in den Auslagerungsdateien gab.
Brian M. Hunt
Fügen Sie dann dem Skript ein "Diff" hinzu, um die Dateien zu vergleichen.
Mcandre
@mcandre: Was würdest du unterscheiden? Gibt es eine Möglichkeit, den Inhalt der Vim-Auslagerungsdatei für einen Vergleich über diff zu extrahieren?
Brian M. Hunt
-1

Das Lesen der Dokumentation für die Funktion "Auslagerungsdatei" in Vim durch Ausführen des Befehls Vim :help swapsollte Ihnen bei vielen Informationen darüber helfen, wie Vim die Erstellung von Auslagerungsdateien usw. handhabt.

Ayaz
quelle
Während :help swapsollte bei vielen Dingen helfen, tut es in diesem Fall nicht. Robbins et al. "Learning Vi & Vim Editors" auch nicht. Wenn beides der Fall wäre, hätte ich die Frage nicht posten müssen. ;)
Brian M. Hunt