Warum speichert Vim Dateien mit der Erweiterung ~?

179

Ich habe festgestellt, dass bei Verwendung von Vim unter Windows Vim die Datei speichert, eine .ext.swpDatei, die beim Schließen des Vim-Fensters gelöscht wird, und eine .ext~Datei.

Ich gehe davon aus, dass die .ext.swpDatei eine Sitzungssicherung ist, falls Vim abstürzt. Was ist der Zweck der .ext~Datei? Ist das eine permanente Sicherungsdatei? Es ist ärgerlich, wenn ich alle Dateien, an denen ich arbeite, ohne diese Duplikate auf meinen Host kopieren möchte. Wie kann ich dies deaktivieren oder , wenn es aus gutem Grund vorhanden ist , die Dateien ausblenden ?

Ross
quelle
Haben Sie eine Datei gleichzeitig an mehr als einer Stelle geöffnet, wird eine erstellt .ext.swp.
Dirkgently
2
dirkgently: Nein, hier kann ich eine Datei im einzigen vim-Fenster öffnen und es wird die .swp-Datei erstellt. Ich bin nicht allzu aufgeregt darüber, da es entfernt wird, wenn ich das Fenster speichere / schließe.
Ross

Antworten:

220

Die *.ext~Datei ist eine Sicherungsdatei, die die Datei enthält, wie sie war, bevor Sie sie bearbeitet haben.

Die *.ext.swpDatei ist die Auslagerungsdatei, die als Sperrdatei dient und den Rückgängig- / Wiederherstellungsverlauf sowie alle anderen internen Informationen enthält, die Vim benötigt. Im Falle eines Absturzes können Sie Ihre Datei erneut öffnen und Vim stellt den vorherigen Status aus der Auslagerungsdatei wieder her (was ich hilfreich finde, damit ich sie nicht ausschalte).

Verwenden Sie (in Ihrem vimrc), um die automatische Erstellung von Sicherungsdateien zu deaktivieren:

set nobackup
set nowritebackup

Wobei nowritebackupsich das Standardverhalten von Vim beim Speichern ändert:

  1. Schreibpuffer in neue Datei
  2. Löschen Sie die Originaldatei
  3. Benennen Sie die neue Datei um

und lässt Vim den Puffer in die Originaldatei schreiben (was das Risiko birgt, ihn im Falle eines E / A-Fehlers zu zerstören). Aber Sie verhindern damit das "Springen von Dateien" auf dem Windows-Desktop, was der Hauptgrund für mich ist nowritebackup.

Tomalak
quelle
7
+1 Für you prevent "jumping files" on the Windows desktop. Googelte und fand diese Antwort
Merlyn Morgan-Graham
1
Eigentlich - muss ich beides haben nobackupund nowritebackup? Gibt es eine Möglichkeit, eine Kopie der Datei als Backup zu schreiben, aber nicht diese Dinge schreiben / löschen / umbenennen?
Merlyn Morgan-Graham
@ Merlyn: Wenn Sie backup(im Gegensatz zu nobackup) haben, erstellt Vim ein Backup (die *.ext~Datei). Dies hat nichts damit zu tun nowritebackup.
Tomalak
6
Es gibt eine Tabelle, die das unterschiedliche Verhalten zwischen der Kombination dieser Schalter beschreibt : help backup-table. Es stellt sich heraus, dass weder nobackupnoch eingestellt wird nowritebackup, sondern stattdessen backupcopy=yesauch das "Springen" -Problem gelöst wird. Dies kann jedoch die Leistung beeinträchtigen, so dass jeder für sich
Merlyn Morgan-Graham
27
Anstatt zu set backupdir=~/.vim/backupdeaktivieren , sichern Sie in einem Verzeichnis in .vimrc oder _vimrc unter Windows
Tsukimi
223

Ich denke, die bessere Lösung besteht darin, diese Zeilen in Ihre vimrc-Datei einzufügen

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.

Die erste Zeile ist für Sicherungsdateien, die zweite Zeile für Auslagerungsdateien. Der doppelte Schrägstrich am Ende stellt sicher, dass bei zwei Dateien mit demselben Namen kein Konflikt besteht (siehe Kommentare) (zum Zeitpunkt dieser Bearbeitung wird diese Option nur für Auslagerungsdateien berücksichtigt, noch nicht für Sicherungsdateien ). Die ,.Erlaubnis vim, das aktuelle Verzeichnis zu verwenden, wenn das erstere nicht existiert.

Sie müssen in Ihrem Home-Verzeichnis ein Verzeichnis namens vimtmp erstellen, damit dies funktioniert. Überprüfen Sie außerdem, ob Sicherungen in Ihrer Konfiguration aktiviert sind (fügen Sie hinzu, set backupwenn nicht).

Auf diese Weise profitieren Sie von beiden Welten, Sie müssen die Dateien nicht sehen, aber wenn etwas durcheinander gerät, können Sie Ihre Sicherungsdatei von vimtmp herunterladen. Vergessen Sie nicht, das Verzeichnis von Zeit zu Zeit zu bereinigen.

user183135
quelle
22
+1 Ich habe meine tatsächlich auf ~ / .vim / tmp eingestellt, aber so oder so hat dies meinen Arsch mehr als einmal gerettet.
JC Yamokoski
11
Warum brauchst du ,. am Ende jeder Zeile?
Shin
9
@shin Vim verwendet das erste verfügbare Verzeichnis. In diesem Fall verwendet ~ / vimtmp das aktuelle Arbeitsverzeichnis
xixixao
3
@ SalmanPK In einer idealen Welt sollten Sie Konfigurationsdateien nicht direkt auf öffentlich zugänglichen Servern
bearbeiten
12
Verwenden Sie zwei Schrägstriche am Ende des Pfades. Setzen Sie beispielsweise backupdir = ~ / .vim / .backup // - das "//" am Ende des Verzeichnisses bedeutet, dass Dateinamen aus dem vollständigen Pfad zur Datei erstellt werden, wobei alle Pfadtrennzeichen durch Prozent "%" ersetzt werden. " Zeichen. Dadurch wird die Eindeutigkeit des Dateinamens im Erhaltungsverzeichnis sichergestellt.
Hacknightly
25

Um diese Dateien zu deaktivieren, fügen Sie diese Zeilen einfach zu .vimrc (vim-Konfigurationsdatei unter Unix-basierten Betriebssystemen) hinzu:

set nobackup       #no backup files
set nowritebackup  #only in case you don't want a backup file while editing
set noswapfile     #no swap files
rogeriopvl
quelle
12
:set nobackup 

schaltet Backups aus. Sie können auch ein Sicherungsverzeichnis festlegen, wenn Sie diese Sicherungsdateien weiterhin in einem zentralen Ordner haben möchten. Auf diese Weise ist Ihr Arbeitsverzeichnis nicht mit ~ Dateien übersät.

Weitere Informationen zu Sicherungen finden Sie unter : Die Sicherung .

f3lix
quelle
11

Sie können auch eine andere Backup-Erweiterung festlegen und festlegen, wo diese Backups gespeichert werden sollen (ich bevorzuge ~/.vimbackupsunter Linux). Ich habe früher "versionierte" Backups verwendet über:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup'

Dadurch wird eine dynamische Sicherungserweiterung ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup) festgelegt.

Zsolt Botykai
quelle
3
Sie möchten vielleicht enthalten , wie das Sicherungsverzeichnis einzurichten, dh setzt set backupdir=~/.vimbackupsin Ihrem ~ / .vimrc
rampion
1
Die vim-Hilfe beschreibt diese Technik vollständig. Siehe:help backupext
Netjeff
8

Setzen Sie diese Zeile in Ihre vimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


Im das wäre das:

C:\Program Files (x86)\vim\_vimrc

Datei für die systemweite vim-Konfiguration für alle Benutzer.

Das Festlegen der letzten Datei noundofileist in Windows wichtig, um die Erstellung von *~Tilda-Dateien nach der Bearbeitung zu verhindern .


Ich wünschte, Vim hätte diese Zeile standardmäßig enthalten. Niemand mag hässliche Verzeichnisse.

Lassen Sie den Benutzer zuerst auswählen, ob und wie er erweiterte Funktionen zum Sichern / Rückgängigmachen von Dateien aktivieren möchte.

Dies ist der nervigste Teil von Vim.

Der nächste Schritt könnte das Einrichten sein:

set noeb vb t_vb= " errorbells visualbell

um das Piepen zu deaktivieren auch :-)


quelle
Vielen Dank dafür! "noundofile" war die Option, die diesen gottesfürchtigen Wurf endlich loswurde. (Und ich stimme zu 100% mit allem überein, was Sie in Ihrem Beitrag geschrieben haben!)
pwmusic
6

Sie haben Recht, dass die .swpDatei von vim zum Sperren und als Wiederherstellungsdatei verwendet wird.

Versuchen Sie, set nobackupIhr vimrc einzutragen, wenn Sie diese Dateien nicht möchten. In den Vim-Dokumenten finden Sie verschiedene Optionen für die Sicherung, wenn Sie den gesamten Bereich oder stattdessen .bak-Dateien haben möchten ...

dwc
quelle
+1 für die Erwähnung des Zwecks als Sperrdatei. Daran habe ich nicht gedacht.
Tomalak
5

Die einzige Option, die für mich funktioniert hat, war, diese Zeile in meine ~ / .vimrc-Datei einzufügen

noundofile einstellen

Die anderen Optionen für Sicherungsdateien haben die Erstellung der temporären Dateien mit der Endung ~ (Tilde) nicht verhindert.

Logan
quelle
Das hat endlich bei mir funktioniert. Warum wird dies in anderen Antworten nicht erwähnt? Dadurch werden die: .<filename>.un~-Dateien entfernt, während die anderen Optionen nur die <filename>~Dateien entfernen .
JLT
0

Ich musste set noundofile~ _gvimrc hinzufügen

Das Verzeichnis "~" kann durch Ändern des Verzeichnisses mit dem cd ~Befehl identifiziert werden

Josh
quelle