# 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.

Source: https://www.jpkc.com/db/cheatsheets/files-text/vim/

<!-- PROSE:intro -->
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.
<!-- PROSE:intro:end -->

## Modi

`i` — Wechselt am Cursor in den Einfügemodus.

```bash
i
```

`I` — Wechselt am Zeilenanfang in den Einfügemodus.

```bash
I
```

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

```bash
a
```

`A` — Wechselt am Zeilenende in den Einfügemodus.

```bash
A
```

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

```bash
o
```

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

```bash
O
```

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

```bash
Esc
```

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

```bash
v
```

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

```bash
V
```

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

```bash
Ctrl+v
```

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

```bash
R
```

## Navigation

`h / j / k / l` — Bewegt links / unten / oben / rechts (ein Zeichen bzw. eine Zeile).

```bash
5j (5 Zeilen nach unten)
```

`w` — Springt vorwärts zum Anfang des nächsten Worts.

```bash
3w (3 Wörter weiter)
```

`b` — Springt rückwärts zum Anfang des vorherigen Worts.

```bash
b
```

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

```bash
e
```

`0` — Springt an den Anfang der Zeile.

```bash
0
```

`^` — Springt zum ersten Zeichen der Zeile, das kein Leerraum ist.

```bash
^
```

`$` — Springt an das Ende der Zeile.

```bash
$
```

`gg` — Springt zur ersten Zeile der Datei.

```bash
gg
```

`G` — Springt zur letzten Zeile der Datei.

```bash
G
```

`<n>G` — Springt zur Zeile mit der Nummer n.

```bash
42G (zu Zeile 42)
```

`Ctrl+f` — Blättert eine volle Seite vorwärts (nach unten).

```bash
Ctrl+f
```

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

```bash
Ctrl+b
```

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

```bash
Ctrl+d
```

`Ctrl+u` — Blättert eine halbe Seite nach oben.

```bash
Ctrl+u
```

`%` — Springt zur passenden Klammer ({}, (), []).

```bash
%
```

`{` — Springt zum vorherigen Absatz / zur vorherigen Leerzeile.

```bash
{
```

`}` — Springt zum nächsten Absatz / zur nächsten Leerzeile.

```bash
}
```

## Bearbeiten

`x` — Löscht das Zeichen unter dem Cursor.

```bash
5x (löscht 5 Zeichen)
```

`dd` — Löscht (schneidet aus) die aktuelle Zeile.

```bash
3dd (löscht 3 Zeilen)
```

`dw` — Löscht vom Cursor bis zum Anfang des nächsten Worts.

```bash
dw
```

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

```bash
d$ (oder D)
```

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

```bash
d0
```

`yy` — Kopiert (yank) die aktuelle Zeile.

```bash
3yy (kopiert 3 Zeilen)
```

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

```bash
yw
```

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

```bash
p
```

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

```bash
P
```

`u` — Macht die letzte Änderung rückgängig.

```bash
5u (macht 5 Änderungen rückgängig)
```

`Ctrl+r` — Stellt die letzte rückgängig gemachte Änderung wieder her.

```bash
Ctrl+r
```

`.` — Wiederholt den letzten Bearbeitungsbefehl.

```bash
.
```

`r<char>` — Ersetzt das Zeichen unter dem Cursor durch das angegebene Zeichen.

```bash
ra (ersetzt durch 'a')
```

`cc` — Ändert (ersetzt) die gesamte Zeile. Löscht sie und wechselt in den Einfügemodus.

```bash
cc
```

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

```bash
cw
```

`c$` — Ändert vom Cursor bis zum Ende der Zeile.

```bash
c$ (oder C)
```

`J` — Verbindet die aktuelle Zeile mit der nächsten Zeile.

```bash
3J (verbindet 3 Zeilen)
```

`>>` — Rückt die aktuelle Zeile ein.

```bash
3>> (rückt 3 Zeilen ein)
```

`<<` — Rückt die aktuelle Zeile aus.

```bash
<<
```

`~` — Schaltet die Groß-/Kleinschreibung des Zeichens unter dem Cursor um.

```bash
~
```

## Suchen & Ersetzen

`/<pattern>` — Sucht vorwärts nach einem Muster.

```bash
/function
```

`?<pattern>` — Sucht rückwärts nach einem Muster.

```bash
?error
```

`n` — Springt zum nächsten Suchtreffer.

```bash
n
```

`N` — Springt zum vorherigen Suchtreffer.

```bash
N
```

`*` — Sucht vorwärts nach dem Wort unter dem Cursor.

```bash
*
```

`#` — Sucht rückwärts nach dem Wort unter dem Cursor.

```bash
#
```

`:s/<old>/<new>/` — Ersetzt das erste Vorkommen in der aktuellen Zeile.

```bash
:s/foo/bar/
```

`:s/<old>/<new>/g` — Ersetzt alle Vorkommen in der aktuellen Zeile.

```bash
:s/foo/bar/g
```

`:%s/<old>/<new>/g` — Ersetzt alle Vorkommen in der gesamten Datei.

```bash
:%s/foo/bar/g
```

`:%s/<old>/<new>/gc` — Ersetzt alle Vorkommen mit Bestätigung für jeden Treffer.

```bash
:%s/foo/bar/gc
```

`:noh` — Hebt die Hervorhebung der Suchtreffer auf.

```bash
:noh
```

## Dateien & Buffer

`:w` — Speichert die aktuelle Datei.

```bash
:w
```

`:w <filename>` — Speichert unter einem anderen Dateinamen.

```bash
:w backup.txt
```

`:q` — Beendet (schlägt fehl, wenn ungespeicherte Änderungen vorliegen).

```bash
:q
```

`:q!` — Beendet ohne zu speichern (verwirft die Änderungen).

```bash
:q!
```

`:wq` — Speichert und beendet.

```bash
:wq (oder ZZ im Normalmodus)
```

`:x` — Speichert und beendet (schreibt nur, wenn es Änderungen gab).

```bash
:x
```

`:e <filename>` — Öffnet eine Datei zum Bearbeiten.

```bash
:e config.php
```

`:e!` — Lädt die aktuelle Datei neu und verwirft alle Änderungen.

```bash
:e!
```

`:bn` — Wechselt zum nächsten Buffer.

```bash
:bn
```

`:bp` — Wechselt zum vorherigen Buffer.

```bash
:bp
```

`:ls` — Listet alle offenen Buffer auf.

```bash
:ls
```

`:b <n>` — Wechselt zum Buffer mit der Nummer n.

```bash
:b 3
```

## Fenster & Tabs

`:sp <file>` — Teilt das Fenster horizontal (öffnet optional eine Datei).

```bash
:sp config.php
```

`:vsp <file>` — Teilt das Fenster vertikal (öffnet optional eine Datei).

```bash
:vsp styles.css
```

`Ctrl+w w` — Wechselt zwischen den offenen Fensterteilungen.

```bash
Ctrl+w w
```

`Ctrl+w h/j/k/l` — Setzt den Fokus auf die Teilung in der angegebenen Richtung.

```bash
Ctrl+w l (fokussiert rechte Teilung)
```

`Ctrl+w q` — Schließt die aktuelle Teilung.

```bash
Ctrl+w q
```

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

```bash
Ctrl+w =
```

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

```bash
:tabnew index.php
```

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

```bash
gt
```

`:tabclose` — Schließt den aktuellen Tab.

```bash
:tabclose
```

## Marken & Sprünge

`m<letter>` — Setzt eine Marke an der aktuellen Cursorposition (a-z lokal, A-Z global).

```bash
ma (setzt Marke 'a')
```

`'<letter>` — Springt zur Zeile der angegebenen Marke.

```bash
'a (springt zur Marke 'a')
```

`` `<letter> `` — Springt zur exakten Position der angegebenen Marke.

```bash
`a
```

`:marks` — Listet alle aktuellen Marken auf.

```bash
:marks
```

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

```bash
Ctrl+o
```

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

```bash
Ctrl+i
```

## Makros

`q<letter>` — Beginnt, ein Makro in das angegebene Register aufzuzeichnen.

```bash
qa (nimmt in Register 'a' auf)
```

`q` — Beendet die Makroaufzeichnung.

```bash
q
```

`@<letter>` — Spielt ein aufgezeichnetes Makro aus dem angegebenen Register ab.

```bash
@a
```

`<n>@<letter>` — Spielt ein Makro n-mal ab.

```bash
10@a (Makro 'a' 10-mal ausführen)
```

`@@` — Wiederholt das zuletzt ausgeführte Makro.

```bash
@@
```

## Nützliche Befehle

`:set number` — Zeigt Zeilennummern an.

```bash
:set number (oder :set nu)
```

`:set relativenumber` — Zeigt relative Zeilennummern an (zum einfacheren Springen).

```bash
:set relativenumber
```

`:set paste` — Aktiviert den Einfügemodus (deaktiviert die Auto-Einrückung beim Einfügen).

```bash
:set paste
```

`:set syntax=<lang>` — Legt die Sprache für die Syntaxhervorhebung fest.

```bash
:set syntax=php
```

`:set wrap / :set nowrap` — Aktiviert oder deaktiviert den Zeilenumbruch.

```bash
:set nowrap
```

`:!<command>` — Führt einen externen Shell-Befehl aus.

```bash
:!ls -la
```

`:r <file>` — Liest eine Datei ein und fügt ihren Inhalt unterhalb des Cursors ein.

```bash
:r header.html
```

`:r !<command>` — Fügt die Ausgabe eines Shell-Befehls unterhalb des Cursors ein.

```bash
:r !date
```

`:%!<command>` — Filtert die gesamte Datei durch einen externen Befehl.

```bash
:%!sort (sortiert alle Zeilen)
```

`:set hlsearch` — Hebt alle Suchtreffer hervor.

```bash
:set hlsearch
```

<!-- PROSE:outro -->
## 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](https://wiki.ubuntuusers.de/vim/) – deutschsprachige Einführung in Bedienung und Konfiguration
- [vim.org – offizielle Seite](https://www.vim.org/) – Projektseite mit Dokumentation, Download und Hilfe (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [nano](https://www.jpkc.com/db/cheatsheets/files-text/nano/) – einfacher Editor ohne Modi für schnelle Änderungen
- [less](https://www.jpkc.com/db/cheatsheets/files-text/less/) – Pager zum reinen Anzeigen von Dateien ohne Bearbeiten
- [mc](https://www.jpkc.com/db/cheatsheets/files-text/mc/) – Dateimanager fürs Terminal mit eingebautem Editor mcedit

