vim — Der modale Texteditor für effizientes Bearbeiten
Praxis-Guide zu vim: der modale Editor mit Normal-, Einfüge-, Visual- und Kommando-Modus für effizientes Bearbeiten im Terminal.
vim ist ein hochgradig konfigurierbarer Texteditor, der auf effizientes Bearbeiten ausgelegt ist und auf praktisch jedem Unix-System verfügbar ist. Sein Kern ist das modale Konzept: Im Normalmodus bewegst du dich und führst Befehle aus, im Einfügemodus (mit i) tippst du Text, dazu kommen visueller und Kommando-Modus. Genau dieser Aufbau verwirrt Einsteiger zunächst, macht vim nach kurzer Eingewöhnung aber extrem schnell. Das Wichtigste vorweg: Mit Esc kommst du immer zurück in den Normalmodus, mit :wq speicherst du und beendest, mit :q! verwirfst du alle Änderungen und beendest. Dieser Guide zeigt dir die Befehle, mit denen du dich in vim sicher bewegst – von den Modi über Navigation und Bearbeitung bis zu Makros.
Modi
i — Wechselt am Cursor in den Einfügemodus.
iI — Wechselt am Zeilenanfang in den Einfügemodus.
Ia — Wechselt nach dem Cursor in den Einfügemodus.
aA — Wechselt am Zeilenende in den Einfügemodus.
Ao — Öffnet eine neue Zeile darunter und wechselt in den Einfügemodus.
oO — Öffnet eine neue Zeile darüber und wechselt in den Einfügemodus.
OEsc — Kehrt aus jedem anderen Modus in den Normalmodus zurück.
Escv — Wechselt in den visuellen Modus (zeichenweise Auswahl).
vV — Wechselt in den visuellen Zeilenmodus (zeilenweise Auswahl).
VCtrl+v — Wechselt in den visuellen Blockmodus (spaltenweise Auswahl).
Ctrl+vR — Wechselt in den Ersetzungsmodus. Überschreibt Zeichen beim Tippen.
RNavigation
h / j / k / l — Bewegt links / unten / oben / rechts (ein Zeichen bzw. eine Zeile).
5j (5 Zeilen nach unten)w — Springt vorwärts zum Anfang des nächsten Worts.
3w (3 Wörter weiter)b — Springt rückwärts zum Anfang des vorherigen Worts.
be — Springt vorwärts zum Ende des aktuellen/nächsten Worts.
e0 — Springt an den Anfang der Zeile.
0^ — Springt zum ersten Zeichen der Zeile, das kein Leerraum ist.
^$ — Springt an das Ende der Zeile.
$gg — Springt zur ersten Zeile der Datei.
ggG — Springt zur letzten Zeile der Datei.
G<n>G — Springt zur Zeile mit der Nummer n.
42G (zu Zeile 42)Ctrl+f — Blättert eine volle Seite vorwärts (nach unten).
Ctrl+fCtrl+b — Blättert eine volle Seite rückwärts (nach oben).
Ctrl+bCtrl+d — Blättert eine halbe Seite nach unten.
Ctrl+dCtrl+u — Blättert eine halbe Seite nach oben.
Ctrl+u% — Springt zur passenden Klammer ({}, (), []).
%{ — Springt zum vorherigen Absatz / zur vorherigen Leerzeile.
{} — Springt zum nächsten Absatz / zur nächsten Leerzeile.
}Bearbeiten
x — Löscht das Zeichen unter dem Cursor.
5x (löscht 5 Zeichen)dd — Löscht (schneidet aus) die aktuelle Zeile.
3dd (löscht 3 Zeilen)dw — Löscht vom Cursor bis zum Anfang des nächsten Worts.
dwd$ — Löscht vom Cursor bis zum Ende der Zeile.
d$ (oder D)d0 — Löscht vom Cursor bis zum Anfang der Zeile.
d0yy — Kopiert (yank) die aktuelle Zeile.
3yy (kopiert 3 Zeilen)yw — Kopiert vom Cursor bis zum Anfang des nächsten Worts.
ywp — Fügt nach dem Cursor oder unterhalb der aktuellen Zeile ein.
pP — Fügt vor dem Cursor oder oberhalb der aktuellen Zeile ein.
Pu — Macht die letzte Änderung rückgängig.
5u (macht 5 Änderungen rückgängig)Ctrl+r — Stellt die letzte rückgängig gemachte Änderung wieder her.
Ctrl+r. — Wiederholt den letzten Bearbeitungsbefehl.
.r<char> — Ersetzt das Zeichen unter dem Cursor durch das angegebene Zeichen.
ra (ersetzt durch 'a')cc — Ändert (ersetzt) die gesamte Zeile. Löscht sie und wechselt in den Einfügemodus.
cccw — Ändert vom Cursor bis zum Ende des aktuellen Worts.
cwc$ — Ändert vom Cursor bis zum Ende der Zeile.
c$ (oder C)J — Verbindet die aktuelle Zeile mit der nächsten Zeile.
3J (verbindet 3 Zeilen)>> — Rückt die aktuelle Zeile ein.
3>> (rückt 3 Zeilen ein)<< — Rückt die aktuelle Zeile aus.
<<~ — Schaltet die Groß-/Kleinschreibung des Zeichens unter dem Cursor um.
~Suchen & Ersetzen
/<pattern> — Sucht vorwärts nach einem Muster.
/function?<pattern> — Sucht rückwärts nach einem Muster.
?errorn — Springt zum nächsten Suchtreffer.
nN — Springt zum vorherigen Suchtreffer.
N* — Sucht vorwärts nach dem Wort unter dem Cursor.
*# — Sucht rückwärts nach dem Wort unter dem Cursor.
#:s/<old>/<new>/ — Ersetzt das erste Vorkommen in der aktuellen Zeile.
:s/foo/bar/:s/<old>/<new>/g — Ersetzt alle Vorkommen in der aktuellen Zeile.
:s/foo/bar/g:%s/<old>/<new>/g — Ersetzt alle Vorkommen in der gesamten Datei.
:%s/foo/bar/g:%s/<old>/<new>/gc — Ersetzt alle Vorkommen mit Bestätigung für jeden Treffer.
:%s/foo/bar/gc:noh — Hebt die Hervorhebung der Suchtreffer auf.
:nohDateien & Buffer
:w — Speichert die aktuelle Datei.
:w:w <filename> — Speichert unter einem anderen Dateinamen.
:w backup.txt:q — Beendet (schlägt fehl, wenn ungespeicherte Änderungen vorliegen).
:q:q! — Beendet ohne zu speichern (verwirft die Änderungen).
:q!:wq — Speichert und beendet.
:wq (oder ZZ im Normalmodus):x — Speichert und beendet (schreibt nur, wenn es Änderungen gab).
:x:e <filename> — Öffnet eine Datei zum Bearbeiten.
:e config.php:e! — Lädt die aktuelle Datei neu und verwirft alle Änderungen.
:e!:bn — Wechselt zum nächsten Buffer.
:bn:bp — Wechselt zum vorherigen Buffer.
:bp:ls — Listet alle offenen Buffer auf.
:ls:b <n> — Wechselt zum Buffer mit der Nummer n.
:b 3Fenster & Tabs
:sp <file> — Teilt das Fenster horizontal (öffnet optional eine Datei).
:sp config.php:vsp <file> — Teilt das Fenster vertikal (öffnet optional eine Datei).
:vsp styles.cssCtrl+w w — Wechselt zwischen den offenen Fensterteilungen.
Ctrl+w wCtrl+w h/j/k/l — Setzt den Fokus auf die Teilung in der angegebenen Richtung.
Ctrl+w l (fokussiert rechte Teilung)Ctrl+w q — Schließt die aktuelle Teilung.
Ctrl+w qCtrl+w = — Macht alle Teilungen gleich groß.
Ctrl+w =:tabnew <file> — Öffnet eine Datei in einem neuen Tab.
:tabnew index.phpgt / gT — Wechselt zum nächsten / vorherigen Tab.
gt:tabclose — Schließt den aktuellen Tab.
:tabcloseMarken & Sprünge
m<letter> — Setzt eine Marke an der aktuellen Cursorposition (a-z lokal, A-Z global).
ma (setzt Marke 'a')'<letter> — Springt zur Zeile der angegebenen Marke.
'a (springt zur Marke 'a')`<letter> — Springt zur exakten Position der angegebenen Marke.
`a:marks — Listet alle aktuellen Marken auf.
:marksCtrl+o — Springt zur vorherigen Position in der Sprungliste zurück.
Ctrl+oCtrl+i — Springt in der Sprungliste vorwärts.
Ctrl+iMakros
q<letter> — Beginnt, ein Makro in das angegebene Register aufzuzeichnen.
qa (nimmt in Register 'a' auf)q — Beendet die Makroaufzeichnung.
q@<letter> — Spielt ein aufgezeichnetes Makro aus dem angegebenen Register ab.
@a<n>@<letter> — Spielt ein Makro n-mal ab.
10@a (Makro 'a' 10-mal ausführen)@@ — Wiederholt das zuletzt ausgeführte Makro.
@@Nützliche Befehle
:set number — Zeigt Zeilennummern an.
:set number (oder :set nu):set relativenumber — Zeigt relative Zeilennummern an (zum einfacheren Springen).
:set relativenumber:set paste — Aktiviert den Einfügemodus (deaktiviert die Auto-Einrückung beim Einfügen).
:set paste:set syntax=<lang> — Legt die Sprache für die Syntaxhervorhebung fest.
:set syntax=php:set wrap / :set nowrap — Aktiviert oder deaktiviert den Zeilenumbruch.
:set nowrap:!<command> — Führt einen externen Shell-Befehl aus.
:!ls -la:r <file> — Liest eine Datei ein und fügt ihren Inhalt unterhalb des Cursors ein.
:r header.html:r !<command> — Fügt die Ausgabe eines Shell-Befehls unterhalb des Cursors ein.
:r !date:%!<command> — Filtert die gesamte Datei durch einen externen Befehl.
:%!sort (sortiert alle Zeilen):set hlsearch — Hebt alle Suchtreffer hervor.
:set hlsearch Fazit
vim belohnt die anfängliche Lernkurve mit enormer Geschwindigkeit: Sobald dir Modi, Bewegungsbefehle und Operatoren in Fleisch und Blut übergehen, bearbeitest du Text fast ohne nachzudenken – inklusive Makros, Mehrfach-Ersetzungen und Filtern durch externe Befehle. Der häufigste Stolperstein für Einsteiger ist der Moment, in dem sie „feststecken": Drücke Esc, um zuverlässig in den Normalmodus zurückzukehren, und beende dann mit :wq (speichern und beenden) oder :q! (alle Änderungen verwerfen). Achte besonders auf :%s/…/…/g, das in der gesamten Datei ersetzt – nutze die Variante mit c (:%s/…/…/gc), wenn du jeden Treffer einzeln bestätigen willst. Für die ersten Schritte ist vimtutor auf der Kommandozeile die beste Übung.
Weiterführende Links
- ubuntuusers-Wiki: vim – deutschsprachige Einführung in Bedienung und Konfiguration
- vim.org – offizielle Seite – Projektseite mit Dokumentation, Download und Hilfe (englisch)