Was ist der Zweck von Auslagerungsdateien?

73

Wenn ich Dateien bearbeite, tendiert Vim dazu, Dateien mit dem Namen zu erstellen , was ich ärgerlich finde. Von sehe ich, dass die Option die Erstellung von Auslagerungsdateien unterdrückt..filename.swpvim -h-n

Gibt es eine vimrc-Direktive, mit der ich Swap-Dateien standardmäßig deaktivieren kann?

Was ist der Zweck von Auslagerungsdateien und welche Funktionalität würde mir durch deren Unterdrückung entgehen?

200_erfolg
quelle
FWIW, ich finde Swap-Dateien auch ärgerlich, und für eine Weile habe ich versucht, noswapfilewie unten vorgeschlagen. Schließlich gab ich nach und schaltete das aus, weil anscheinend die Vorteile die Ärger überwiegen - aber ich erinnere mich nicht wirklich, was mich davon überzeugt hat, die Auslagerungsdateinutzung wiederherzustellen. Wahrscheinlich ist mein Computer abgestürzt und ich konnte einige Dateien, die ich verloren hatte, nicht wiederherstellen, was bei aktivierten Auslagerungsdateien trivial gewesen wäre.
Kyle Strand

Antworten:

89

Gründe für Auslagerungsdateien

Swap-Dateien speichern Änderungen, die Sie am Puffer vorgenommen haben. Wenn Vim oder Ihr Computer abstürzt, können Sie diese Änderungen wiederherstellen.

Swap-Dateien bieten auch eine Möglichkeit, zu verhindern, dass mehrere Instanzen von Vim dieselbe Datei bearbeiten. Dies kann auf Mehrbenutzersystemen hilfreich sein oder nur, um zu wissen, ob bereits ein anderes Vim eine Datei bearbeitet.

Auslagerungsdateien deaktivieren

Wenn Sie das Erstellen von Auslagerungsdateien vollständig deaktivieren möchten (was ich nicht empfehlen würde), können Sie dies set noswapfilezu Ihren hinzufügen .vimrc. Hiermit wird der globale Wert der Option festgelegt. Sie können dies dann für bestimmte Puffer überschreiben, indem Sie :setlocal swapfileVim ausführen.

Auslagerungsdateien organisieren

Wenn es bei Ihrem Problem mehr um die zusätzlichen Dateien geht, die auf Ihrem Dateisystem verteilt sind, können Sie alle Auslagerungsdateien an einem Ort zusammenfassen. Erstellen Sie beispielsweise ein ~/.vim/tmpVerzeichnis und fügen Sie es hinzu

set directory^=$HOME/.vim/tmp//

zu deinem .vimrc. Die 'directory'Option enthält eine Liste von Verzeichnissen, in denen Vim versucht, die Auslagerungsdatei zu speichern.

Die ^=Syntax für das :setVoranstellen des Verzeichnisnamens an den Anfang der Liste, sodass Vim dieses Verzeichnis zuerst überprüft.

Am //Ende des Verzeichnisnamens wird Vim angewiesen, den absoluten Pfad zur Datei zu verwenden, um die Auslagerungsdatei zu erstellen, damit keine Kollisionen zwischen Dateien mit demselben Namen aus verschiedenen Verzeichnissen auftreten.

Beachten Sie, dass dies verhindert, dass Vim es bemerkt, wenn mehrere Benutzer versuchen, dieselbe Datei zu bearbeiten. Da sich die Auslagerungsdatei nicht im selben Verzeichnis wie die Originaldatei befindet, weiß der Vim des anderen Benutzers nichts über die Auslagerungsdatei und warnt ihn nicht, dass sie bereits bearbeitet wird.

Jamessan
quelle
4
Was ist der Vorteil des Austauschs von Dateien gegenüber dem dauerhaften Rückgängigmachen, nachdem es eine Weile in Betrieb war?
Alpha_989
Ich benutze vim-auto-save. Verringert dies nicht die Notwendigkeit von Auslagerungsdateien?
Kevin
@ Kevin Es kommt darauf an. Wenn das Plugin in jedem Szenario eine Sicherung verursacht, bei der Vim die Auslagerungsdatei ausschreibt, ist dies wahrscheinlich. Andernfalls wird es noch Perioden geben, in denen der Puffer nicht gespeichert ist und eine Auslagerungsdatei hilfreich sein kann.
Jamessan
@ alpha_989 Sie ergänzen einander. Mit einer Auslagerungsdatei können Sie nicht gespeicherte Änderungen wiederherstellen. Mit der Datei zum dauerhaften Rückgängigmachen können Sie den Rückgängigmachen-Verlauf über Vim-Sitzungen hinweg durchlaufen. Die Datei wird jedoch nur beim Speichern geschrieben.
Jamessan
Gibt es eine Methode, um vim no swap nur für eine Instanz festzulegen? zB vim temp.txt --some-command-that-disable-swap? Mein Anwendungsfall ist, dass einige Beobachter weiterhin auf Änderungen im Verzeichnis achten. Daher möchte ich erst dann den Tausch deaktivieren, um eine Kollision zu verhindern.
Ng Sek Long