Wer Vim eine Weile nutzt, entdeckt früher oder später drei Klassen von Vim-Hilfsdateien, die unaufgefordert im Dateisystem erscheinen: .foo.txt.swp als Crash-Recovery-Datei, foo.txt~ als Backup der vorherigen Version, und .foo.txt.un~ als persistent-undo-Speicher. Vim erzeugt sie aus guten Gründen — sie haben dir mindestens einmal Daten gerettet, wenn der Editor abgestürzt ist oder das System neu gestartet wurde. In der Praxis nerven sie aber regelmäßig: sie landen in Git-Status-Ausgaben, sie kollidieren mit Cloud-Sync-Tools, und sie verstopfen Projekt-Verzeichnisse. Dieser Artikel klärt, was jede der drei Dateien tut, zeigt das E325-Recovery-Verfahren, erklärt die saubere Zentral-Auslagerung in dedizierte Verzeichnisse und gibt eine vollständige Konfigurations-Vorlage.

Die drei Hilfs-Dateien

DateiZweckDefault-Speicherort
.foo.txt.swpSwap-File für Crash-Recovery (jeder Edit wird synchron gespiegelt)neben der Original-Datei
foo.txt~Backup der vorherigen Datei-Version (vor dem letzten :w)neben der Original-Datei
.foo.txt.un~Undo-File für persistent-undo (Undo-Historie über Sessions)neben der Original-Datei

Alle drei sind per Default aktiv, alle drei landen neben der bearbeiteten Datei. Das ist die häufigste Ursache für „warum liegen all diese .swp-Dateien in meinem Projekt"-Fragen.

Die Vorteile der Defaults:

  • Swap schützt vor Daten-Verlust bei Vim-Crash, Stromausfall oder Kill-Signal.
  • Backup behält die letzte gespeicherte Version, falls man sich beim Editieren verlaufen hat.
  • Undo-File überdauert Sessions — Undo aus letzter Woche funktioniert nach Vim-Restart.

Die Nachteile:

  • Datei-Manager und Git zeigen sie als „Müll" an.
  • Cloud-Sync-Tools (iCloud, Dropbox, OneDrive) synchronisieren sie und produzieren Konflikte.
  • In CI/CD-Repos sind sie verboten, müssen also per .gitignore ausgeschlossen werden.

Die saubere Lösung ist nicht „abschalten" (dann verliert man die Sicherheit), sondern in zentrale Verzeichnisse auslagern. Mehr dazu im Abschnitt 5.

Swap-Files: Crash-Recovery im Detail

Sobald du in Vim eine Datei öffnest, erzeugt Vim sofort eine Swap-Datei im selben Verzeichnis (Default: .<dateiname>.swp). Sie enthält alle Edits, die der Buffer seit dem letzten Speichern erhalten hat — synchron geschrieben, sodass selbst bei einem Stromausfall die letzten Sekunden überleben.

Wenn Vim regulär geschlossen wird, löscht es die Swap-Datei automatisch. Wenn Vim crash-bedingt beendet wird, bleibt sie zurück. Beim nächsten Öffnen der gleichen Datei begrüßt dich der berühmte E325-Bildschirm:

text E325: ATTENTION
E325: ATTENTION

Found a swap file by the name ".foo.txt.swp"
          owned by: user   dated: Sat May 17 14:23:11 2026
         file name: ~/projects/foo.txt
          modified: YES
         user name: user   host name: laptop
        process ID: 12345 (still running)

While opening file "foo.txt"
          dated: Sat May 17 14:00:00 2026

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

Die wichtigsten Optionen:

AntwortBedeutung
ODatei nur lesen — ohne Swap-Modifikation
EEditieren trotzdem — gefährlich, wenn Vim noch läuft
RRecover — versuche, Edits aus der Swap-Datei zurückzuholen
DSwap-Datei löschen, normal weitermachen
QAbbrechen — Datei nicht öffnen
AVim ganz abbrechen

Wer den R-Weg wählt, lädt die letzten ungespeicherten Edits in den Buffer. Anschließend manuell prüfen (Diff zur Datei auf Platte), dann speichern und die Swap-Datei mit :!rm .foo.txt.swp aufräumen.

Eine wichtige Nuance: Vim sagt im Recovery-Dialog explizit, ob der Prozess noch läuft („still running") oder bereits weg ist. Wenn er noch läuft (z. B. man hat in einem anderen Terminal Vim mit der gleichen Datei offen), ist das eine Warnung gegen E und R — sonst editieren zwei Vim-Instanzen die gleiche Datei und überschreiben sich.

vim -r — Recovery aus der Shell

Wenn man den E325-Dialog beim Vim-Start verpasst hat (oder lieber direkt vorgehen will), gibt es das CLI-Flag -r:

shell vim -r
# Liste aller Swap-Files anzeigen, die Vim finden kann
vim -r

# Direkt aus einer bestimmten Swap-Datei recovern
vim -r foo.txt

vim -r ohne Argument zeigt eine Liste aller Swap-Files in Vims bekannten Pfaden — typisch das aktuelle Verzeichnis, das Default-Swap-Verzeichnis (siehe nächster Abschnitt) und ~/tmp/. Sehr nützlich, wenn man nicht weiß, wo Vim die Swap-Datei abgelegt hat.

Backup-Files: ~-Dateien verstehen

Mit der Default-Option writebackup erzeugt Vim vor jedem Speichern eine Backup-Kopie — typisch als foo.txt~. Sobald der :w erfolgreich war, löscht Vim das Backup wieder. Das ist eine Sicherheits-Maßnahme: falls beim Speichern etwas schiefgeht (Festplatte voll, Berechtigungen falsch), bleibt die alte Version erhalten.

Mit der Option backup (ohne write-Präfix, Default: aus) bleibt das Backup auch nach erfolgreichem Speichern stehen — das foo.txt~ neben deiner Datei. Manche User mögen das als zusätzliche Sicherheit; die meisten finden es eher störend.

OptionVerhalten
writebackupBackup vor Save, gelöscht nach erfolgreichem Save (Default)
backupBackup vor Save, bleibt erhalten (Default: aus)
nobackup + nowritebackupgar kein Backup — Save schreibt direkt (riskant)

Die typische Empfehlung: writebackup an (Sicherheit beim Schreiben), backup aus (keine ~-Datei-Verstopfung):

vim ~/.vimrc — Default-empfohlene Backup-Konfig
" Sicheres Schreiben (Backup vor Save, wird beim Erfolg gelöscht)
set writebackup

" Backup-Datei NICHT dauerhaft behalten
set nobackup

Für kritische Edits kann man kurzfristig set backup aktivieren — die ~-Dateien dann manuell archivieren.

Zentral auslagern — der Doppel-Slash-Trick

Die saubere Lösung gegen Swap-/Backup-/Undo-Müll in Projekten ist zentrale Auslagerung in dedizierte Verzeichnisse. Vim hat dafür drei Optionen:

OptionSpeichert dort
directorySwap-Files (.swp)
backupdirBackup-Files (~)
undodirUndo-Files (.un~)

Die Standard-Setup-Vorlage:

vim ~/.vimrc — zentrale Auslagerung
" Drei zentrale Verzeichnisse für Vim-Hilfsdateien.
" Der DOPPEL-SLASH am Ende ist wichtig (siehe Erklärung unten).
set directory=~/.vim/swap//
set backupdir=~/.vim/backup//
set undodir=~/.vim/undo//

" Persistent-Undo aktivieren (sonst wird undodir ignoriert)
set undofile

" Backup beim Save (temporär, gelöscht beim Erfolg)
set writebackup
set nobackup

Dazu einmalig in der Shell:

shell Verzeichnisse anlegen
mkdir -p ~/.vim/swap ~/.vim/backup ~/.vim/undo

Wichtig: Vim legt die Verzeichnisse nicht automatisch an. Wenn sie fehlen, fällt Vim auf den nächsten Pfad in seiner Liste zurück (typisch das aktuelle Verzeichnis) — und der Müll erscheint wieder im Projekt.

Warum der Doppel-Slash?

directory=~/.vim/swap// (mit zwei Slashes am Ende) kodiert den vollen Dateipfad in den Namen der Swap-Datei. Ohne den Doppel-Slash würden zwei Dateien gleichen Namens (z. B. index.html in ~/projects/A/ und ~/projects/B/) sich gegenseitig die Swap-Datei überschreiben.

Mit Doppel-Slash entsteht z. B. %home%user%projects%A%index.html.swp und %home%user%projects%B%index.html.swp — eindeutige Dateinamen pro Pfad. Das ist eine Vim-Eigenheit, die in der :help directory-Doku erklärt ist, aber im Alltag oft vergessen wird.

Wann komplett abschalten — und wann nicht

In einigen Szenarien ist „Hilfsdateien komplett aus" tatsächlich die richtige Wahl:

SzenarioEmpfehlung
Edits in /etc/ mit Root-RechtenSwap lassen, schützt vor Crash
Edits auf Cloud-Sync-Pfaden (iCloud, Dropbox)Hilfsdateien zentral auslagern
Sehr große Logfiles, nur Lese-Zugriffview file oder vim -R file — kein Swap
Edit in Repo mit strikter .gitignore-Policyzentral auslagern, .gitignore lokal halten
Schnelle Kommentar-Anpassung, kein RisikoDefaults sind okay
Sehr lange Sessions ohne SaveHilfsdateien unbedingt aktiv

In manchen extremen Setups (z. B. Edit auf einem read-only-Dateisystem oder per Remote-Shell) lassen sich Hilfsdateien temporär abschalten:

vim Pro-Buffer abschalten
" Pro-Buffer Swap aus
:setlocal noswapfile

" Globaler Abschalt-Reflex — NICHT empfohlen, aber möglich
:set noswapfile
:set nobackup
:set nowritebackup
:set noundofile

Wer das global setzt, verzichtet auf Crash-Recovery — das sollte eine bewusste Entscheidung sein, kein versehentlicher Reflex.

updatetime — wie schnell Vim schreibt

Vim aktualisiert die Swap-Datei nicht nach jedem Tastendruck, sondern nach einer Pause in der Eingabe. Die Pausenlänge bestimmt die Option updatetime — Default: 4000 ms (4 Sekunden).

vim ~/.vimrc — updatetime
" Default ist 4000 ms — für Crash-Recovery oft zu langsam.
" Modernere Konfigs nutzen 250-300 ms.
set updatetime=300

Ein niedrigeres updatetime bedeutet:

  • Bessere Crash-Recovery (weniger ungespeicherte Sekunden).
  • Mehr Disk-Aktivität (Festplatten-Schreibvorgänge alle 300 ms, wenn editiert wird).
  • Schnellere Reaktion von Plugins, die auf CursorHold reagieren (z. B. Hover-Info, Diagnose-Refresh, gitsigns-Updates).

Insbesondere für Plugin-Workflows (LSP-Hovers, Auto-Refresh) ist ein niedriges updatetime praktisch — moderne Vim-Konfigs setzen es auf 250-500 ms.

Vollständige Empfehlung — Copy-Paste

Eine bewährte Setup-Vorlage, die alle drei Hilfsdateien sauber konfiguriert:

vim ~/.vimrc — komplette Sicherungs-Konfig
" ============================================================
" Sicherungs-Konfiguration: Swap, Backup, Undo
" ============================================================

" Drei dedizierte Verzeichnisse — KEIN Müll mehr im Projekt.
" Doppel-Slash am Ende: voller Pfad im Dateinamen kodiert
" (verhindert Kollisionen gleichnamiger Dateien).
set directory=~/.vim/swap//
set backupdir=~/.vim/backup//
set undodir=~/.vim/undo//

" Swap an (Default) — Crash-Recovery aktiv
set swapfile

" Backup beim Speichern — temporär, wird beim Erfolg gelöscht
set writebackup
set nobackup

" Persistent-Undo — Undo-Historie überdauert Sessions
set undofile
set undolevels=10000

" Schnellere Updates für Plugins und Crash-Recovery
set updatetime=300

Einmalig in der Shell:

shell Verzeichnisse anlegen
mkdir -p ~/.vim/swap ~/.vim/backup ~/.vim/undo

Diese Konfiguration deckt 99 % aller Setups ab — und sorgt dafür, dass kein .swp/~/.un~-Müll mehr in Projekt-Verzeichnissen landet.

Häufige Stolperfallen

Vim erzeugt das `undodir` NICHT automatisch

Wer set undodir=~/.vim/undo// setzt und das Verzeichnis nicht anlegt, bekommt zwar keinen Fehler — Vim fällt aber stillschweigend auf den nächsten Pfad zurück (typisch neben der Datei), und der erwartete saubere Setup funktioniert nicht. Immer mkdir -p vorher.

Der Doppel-Slash am Ende von `directory` ist Pflicht

Ohne ihn überschreiben sich Swap-Dateien gleichnamiger Originale aus verschiedenen Verzeichnissen gegenseitig. Mit ihm wird der volle Pfad in den Swap-Namen kodiert. Selbe Logik für backupdir und undodir.

Cloud-Sync und `.swp`-Dateien — eine giftige Kombination

iCloud, Dropbox, OneDrive und Konsorten synchronisieren auch versteckte Dateien. Wenn zwei Geräte denselben Pfad editieren oder eines davon .swp-Dateien synchron hält, entstehen Sync-Konflikte und Vim weigert sich beim nächsten Öffnen. Auslagerung nach ~/.vim/swap/ außerhalb des Sync-Bereichs ist die einzige robuste Lösung.

`vim -r` hat keine Magie — es liest die Swap-Datei

Wenn die Swap-Datei nicht mehr existiert (z. B. weil sie nach einem normalen Vim-Exit gelöscht wurde), kann vim -r nichts retten. Crash-Recovery ist nur möglich, solange das .swp noch da ist.

`.swp`-Datei trotz Vim aus — die `E325`-Falle

Bleibt eine Swap-Datei zurück, obwohl Vim nicht mehr läuft, kommt der E325-Dialog. Häufige Ursachen: SSH-Verbindung weg, OS-Reboot ohne Vim-Beendigung, kill -9 auf den Vim-Prozess. Im Dialog R (Recover), die Datei prüfen, speichern, dann D für die alte Swap-Datei drücken — oder per Shell rm .foo.txt.swp.

`updatetime` beeinflusst mehr als nur Swap

Plugins wie gitsigns, LSP-Diagnose-Refresh, cursorline-Highlights und das CursorHold-Event hängen alle an updatetime. Der Default 4000 ms ist für Crash-Recovery brauchbar, aber für modernes Plugin-Verhalten zu langsam. 250-500 ms ist die heute übliche Empfehlung.

Weiterführende Ressourcen

Externe Quellen

Verwandte Artikel

/ Weiter

Zurück zu Dateien & Verzeichnisse

Zur Übersicht