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.

i

I — Wechselt am Zeilenanfang in den Einfügemodus.

I

a — Wechselt nach dem Cursor in den Einfügemodus.

a

A — Wechselt am Zeilenende in den Einfügemodus.

A

o — Öffnet eine neue Zeile darunter und wechselt in den Einfügemodus.

o

O — Öffnet eine neue Zeile darüber und wechselt in den Einfügemodus.

O

Esc — Kehrt aus jedem anderen Modus in den Normalmodus zurück.

Esc

v — Wechselt in den visuellen Modus (zeichenweise Auswahl).

v

V — Wechselt in den visuellen Zeilenmodus (zeilenweise Auswahl).

V

Ctrl+v — Wechselt in den visuellen Blockmodus (spaltenweise Auswahl).

Ctrl+v

R — Wechselt in den Ersetzungsmodus. Überschreibt Zeichen beim Tippen.

R

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.

b

e — Springt vorwärts zum Ende des aktuellen/nächsten Worts.

e

0 — 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.

gg

G — 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+f

Ctrl+b — Blättert eine volle Seite rückwärts (nach oben).

Ctrl+b

Ctrl+d — Blättert eine halbe Seite nach unten.

Ctrl+d

Ctrl+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.

dw

d$ — Löscht vom Cursor bis zum Ende der Zeile.

d$ (oder D)

d0 — Löscht vom Cursor bis zum Anfang der Zeile.

d0

yy — Kopiert (yank) die aktuelle Zeile.

3yy (kopiert 3 Zeilen)

yw — Kopiert vom Cursor bis zum Anfang des nächsten Worts.

yw

p — Fügt nach dem Cursor oder unterhalb der aktuellen Zeile ein.

p

P — Fügt vor dem Cursor oder oberhalb der aktuellen Zeile ein.

P

u — 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.

cc

cw — Ändert vom Cursor bis zum Ende des aktuellen Worts.

cw

c$ — Ä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.

?error

n — Springt zum nächsten Suchtreffer.

n

N — 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.

:noh

Dateien & 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 3

Fenster & 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.css

Ctrl+w w — Wechselt zwischen den offenen Fensterteilungen.

Ctrl+w w

Ctrl+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 q

Ctrl+w = — Macht alle Teilungen gleich groß.

Ctrl+w =

:tabnew <file> — Öffnet eine Datei in einem neuen Tab.

:tabnew index.php

gt / gT — Wechselt zum nächsten / vorherigen Tab.

gt

:tabclose — Schließt den aktuellen Tab.

:tabclose

Marken & 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.

:marks

Ctrl+o — Springt zur vorherigen Position in der Sprungliste zurück.

Ctrl+o

Ctrl+i — Springt in der Sprungliste vorwärts.

Ctrl+i

Makros

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.

Verwandte Kommandos

  • nano – einfacher Editor ohne Modi für schnelle Änderungen
  • less – Pager zum reinen Anzeigen von Dateien ohne Bearbeiten
  • mc – Dateimanager fürs Terminal mit eingebautem Editor mcedit