Die Installation von neovim auf macOS habe ich separat beschrieben. Hier geht es um die Bedienung. Wer vi, vim oder neovim noch nie ernsthaft verwendet hat oder lange nicht mehr, findet hier die wichtigsten Befehle für den Alltag. Das gilt für vim und neovim gleichermaßen, die Basis ist identisch.
Den Editor starten
Mit vi startet auf den meisten Systemen direkt vim. Neovim wird über nvim aufgerufen. Standardmäßig sind diese Editoren für die Command Line gedacht, also Terminal, iTerm2 oder ein anderes Terminal-Programm.
Beim Start kannst Du eine Datei direkt mitgeben, etwa nvim ~/.zshrc.
Auf dem Mac gibt es MacVim als GUI-Version vom klassischen vim und VimR als GUI-Variante von neovim. Wer ohnehin im Terminal lebt, braucht beides nicht.
Beim Start landest Du im Normal-Modus.

So sieht neovim nach dem ersten Start aus.
Normal, Insert, Command?
| Modus | Beschreibung |
|---|---|
| normal | Für Navigation und Manipulation von Texten. Mit ESC kommst Du in diesen Modus zurück. |
| insert | Der Modus zum Schreiben von Text. Reinkommen u.a. mit i. |
| visual | Bereich markieren, um darin etwas auszuführen. |
| command | Die Command Line des Editors. Aus dem Normal-Modus mit : aufrufen. |
| Ex-Mode | Eigentlich für Batch-Verarbeitung gedacht und der Ursprung von vi. |
Mit ESC kommst Du immer wieder zurück in den Normal-Modus. Dort bewegst Du Dich im Text und gibst Befehle ein, etwa dd zum Löschen einer Zeile. Im Insert-Modus schreibst Du den Text.
Klingt am Anfang umständlich, ist nach kurzer Zeit aber komplett logisch und läuft im Unterbewusstsein.
Die wichtigsten Befehle im Command-Modus
Eines der ersten Probleme ist das Beenden des Editors, also fangen wir damit an.
Im Command-Modus gibst Du nach dem : aus dem Normal-Modus „richtige" Befehle ein. Speichern, Öffnen, Beenden und so weiter. Ich schreibe immer einen Doppelpunkt vor den Befehl, damit klar ist, dass er im Command-Modus eingegeben wird.
Alle Befehle würden den Rahmen sprengen. Das hier sind die wichtigsten, um vim oder neovim überhaupt bedienen zu können.
Hilfe
Schau Dir auf jeden Fall den Befehl :help an. vim hat eine extrem umfangreiche Hilfe. Wenn ein Hilfefenster oder ein Teil des Bildschirms damit blockiert ist, kommst Du mit :q meistens wieder raus.
Öffnen, speichern und beenden
| Befehl | Was passiert |
|---|---|
:q | Beendet den Editor. Wenn etwas nicht gespeichert ist, geht das nicht. |
:q! | Beendet auch dann, wenn etwas nicht gespeichert ist. Datenverlust möglich. |
:w | Speichert ohne zu beenden. Mit :w Dateiname speicherst Du unter neuem Namen. |
:w! dateiname | Speichert und überschreibt eine bestehende Datei, ohne zu beenden. |
:wq | Speichern und beenden. Die coolen Leute drücken ZZ im Normal-Modus. |
:wqa | Speichert und beendet alle Tabs. Eher später interessant. |
:e dateiname | Öffnet eine Datei in einem weiteren Buffer. Buffer ist eine Art zusätzliche Layer im Editor. |
Suchen und Ersetzen
Gesucht wird über den Normal-Modus, das findest Du weiter unten.
| Befehl | Was passiert |
|---|---|
:%s/suchbegriff/ersatzbegriff/g | Sucht und ersetzt im ganzen Dokument. |
:%s/suchbegriff/ersatzbegriff/gc | Wie oben, aber Du wirst vor jedem Ersetzen gefragt. |
:%s/suchbegriff/ersatzbegriff | Ohne /g wird nur das nächste passende Wort ersetzt. |
:s/suchbegriff/ersatzbegriff/g | Suchen und Ersetzen nur in der aktuellen Zeile. |
:set ignorecase | Suche nicht case-sensitive. Wirkt nur in der aktuellen Sitzung. |
:set smartcase | Zusatz zu ignorecase. Wenn Du Großbuchstaben verwendest, wird das beachtet. |
Damit set-Befehle dauerhaft greifen, müssen sie in die Config von vim oder neovim.
Buffer
| Befehl | Was passiert |
|---|---|
:bn | Springt zum nächsten Buffer. Du kannst mehrere Dateien in unterschiedlichen Buffern offen haben. |
:bp | Springt zum vorherigen Buffer. |
:bf | Springt zum ersten Buffer. |
:bl | Springt zum letzten Buffer. |
:buffers | Zeigt alle geöffneten Dateien (Buffer). |
Das wirkt umständlich, lässt sich aber auf Tasten legen. Splits und Tabs gibt es zusätzlich, das würde hier zu weit führen.
Tastaturbefehle für Normal, Insert, Visual und Co.
Bewegen im Normal-Modus
| Befehl | Was passiert |
|---|---|
h | Cursor nach links. Geht auch mit den Cursor-Tasten. |
j | Cursor nach unten. |
k | nach oben. |
l | nach rechts. |
$ | Springt zum Ende der Zeile. |
0 | Springt zum Anfang der Zeile. |
^ | Springt zum ersten Zeichen der Zeile, also etwa nach Leerzeichen. |
gg | Springt zum Anfang des Dokuments. |
G | Springt zum Ende des Dokuments. |
w | Cursor zum ersten Zeichen des nächsten Worts. Sonderzeichen zählen als Wort. |
W | Springt auf das nächste Wort nach einem Leerzeichen. |
b | Wie w, nur rückwärts. |
B | Wie W, nur rückwärts. |
e | Wie w, nur landet der Cursor auf dem letzten Zeichen des Worts. |
E | Wie W, nur auf dem letzten Zeichen des Worts. |
ge | Wie b, nur rückwärts. |
gE | Wie B, nur rückwärts. |
) | Springt zum ersten Zeichen des nächsten Satzes. |
( | Springt zum ersten Zeichen des letzten Satzes. |
} | Springt zum nächsten Absatz. |
{ | Springt zum vorherigen Absatz. |
+ | Bewegt den Cursor zum ersten Zeichen der nächsten Zeile. |
- | Bewegt den Cursor in die vorherige Zeile. |
H | Springt zur ersten Zeile des sichtbaren Fensters. |
M | Springt in die Zeile in der Mitte des sichtbaren Bereichs. |
L | Springt in die letzte Zeile des sichtbaren Bereichs. |
fx | Springt zum nächsten Vorkommen von x in der aktuellen Zeile. f, springt zum nächsten Komma. |
Fx | Wie fx, nur rückwärts. |
tx | Wie fx, aber landet ein Zeichen davor. |
Tx | Wie Fx, nur ein Zeichen danach. |
% | Springt zur passenden Klammer, geschweiften Klammer oder dem Kommentarpartner an der Cursorposition. |
Bewegen im Normal- und im Insert-Modus
| Befehl | Was passiert |
|---|---|
| Cursor-Tasten | Wie in jedem anderen Editor. |
Ctrl+u | Halbe Seite nach oben. |
Ctrl+d | Halbe Seite nach unten. |
Ctrl+b | Ganze Seite nach oben. |
Ctrl+f | Ganze Seite nach unten. |
Suche im Normal-Modus
| Befehl | Was passiert |
|---|---|
* | Sucht nach dem nächsten Vorkommen des Wortes unter dem Cursor. |
# | Das Ganze rückwärts. |
/suchbegriff | Sucht vorwärts. Je nach Einstellung wird Groß-/Kleinschreibung beachtet. |
?suchbegriff | Suche rückwärts. |
n | Springt zum nächsten Treffer. |
N | Springt zum vorherigen Treffer. |
Vom Normal- in den Insert-Modus
| Befehl | Was passiert |
|---|---|
i | Geht in den Insert-Modus, um Text zu schreiben. |
a | Geht ein Zeichen weiter und dann in den Insert-Modus. |
I | Springt zum ersten Zeichen der Zeile und in den Insert-Modus. |
A | Geht ans Ende der Zeile und in den Insert-Modus. |
o | Fügt eine Zeile unter der aktuellen ein und geht in den Insert-Modus. |
O | Fügt eine Zeile oberhalb ein und geht in den Insert-Modus. |
cw | Ersetzt das aktuelle Wort. Löscht es und geht in den Insert-Modus. |
cc | Löscht die ganze Zeile und geht in den Insert-Modus. |
C | Löscht alles ab dem Cursor bis zum Zeilenende und geht in den Insert-Modus. |
s | Löscht das Zeichen unter dem Cursor und geht in den Insert-Modus. |
Löschen im Normal-Modus
| Befehl | Was passiert |
|---|---|
x | Löscht das Zeichen unter dem Cursor. Entspricht Backspace, das funktioniert auch. |
r | Tauscht das Zeichen unter dem Cursor und bleibt im Normal-Modus. ra setzt ein a an die Stelle. |
dw | Löscht das Wort. Auch dW, db oder andere Kombinationen funktionieren. |
dd | Löscht die ganze Zeile. |
D | Löscht alles ab dem Cursor bis zum Zeilenende. |
Kopieren und Einfügen im Normal-Modus
| Befehl | Was passiert |
|---|---|
y | Kopiert den markierten Text (siehe v und V). |
yy | Kopiert die ganze Zeile. |
yw | Kopiert das Wort unter dem Cursor. Die Kombinationen wiederholen sich. |
5yy | Kopiert 5 Zeilen. Funktioniert auch mit anderen Zahlen. |
y$ | Kopiert bis zum Zeilenende. |
p | Fügt das Kopierte unter dem Cursor ein. |
P | Fügt das Kopierte vor dem Cursor ein. |
J | Fügt die aktuelle mit der nächsten Zeile zusammen. |
Visual-Modus
| Befehl | Was passiert |
|---|---|
v | Visual-Modus, Text markieren. |
V | Visual-Modus für ganze Zeilen. |
o | Bewegt den Cursor im Visual-Modus zwischen erstem und letztem Zeichen der Auswahl. |
~ | Ändert Groß-/Kleinschreibung der Auswahl. Klein wird groß und umgekehrt. |
> | Rückt die Auswahl nach rechts ein. |
< | Rückt die Auswahl nach links zurück. |
Groß-/Kleinschreibung
| Befehl | Was passiert |
|---|---|
g~ | Ändert Zeichen unter dem Cursor. Aus klein wird groß und umgekehrt. |
g~$ | Bis zum Ende der Zeile alle Zeichen ändern. |
g~~ | Aktuelle Zeile umdrehen. |
gUU | Ganze Zeile in Großbuchstaben. |
guu | Ganze Zeile in Kleinbuchstaben. |
Undo, Redo, Wiederholen
| Befehl | Was passiert |
|---|---|
u | Undo. |
U | Alle Änderungen einer Zeile zurücknehmen. |
Ctrl+r | Wiederherstellen, also das Gegenteil von Undo. |
. | Letzte Änderung wiederholen. Zeile löschen, dann ., und es wird nochmal eine Zeile gelöscht. |
; | Wiederholt den letzten f-, t-, F- oder T-Befehl. |
, | Wie ;, nur in die andere Richtung. |
Mehr
Vor sehr viele Bewegungs- und Bearbeitungsbefehle kannst Du eine Zahl setzen. 5dd löscht 5 Zeilen, 2dw löscht zwei Wörter, 5j springt 5 Zeilen nach unten.
Eine umfangreiche Übersicht findest Du in den vim Keyboard Shortcuts von tuxfight3r. Dort sind weit mehr Befehle drin, als hier sinnvoll wäre.