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.

Neovim direkt nach dem ersten Start

So sieht neovim nach dem ersten Start aus.

Normal, Insert, Command?

ModusBeschreibung
normalFür Navigation und Manipulation von Texten. Mit ESC kommst Du in diesen Modus zurück.
insertDer Modus zum Schreiben von Text. Reinkommen u.a. mit i.
visualBereich markieren, um darin etwas auszuführen.
commandDie Command Line des Editors. Aus dem Normal-Modus mit : aufrufen.
Ex-ModeEigentlich 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

BefehlWas passiert
:qBeendet den Editor. Wenn etwas nicht gespeichert ist, geht das nicht.
:q!Beendet auch dann, wenn etwas nicht gespeichert ist. Datenverlust möglich.
:wSpeichert ohne zu beenden. Mit :w Dateiname speicherst Du unter neuem Namen.
:w! dateinameSpeichert und überschreibt eine bestehende Datei, ohne zu beenden.
:wqSpeichern und beenden. Die coolen Leute drücken ZZ im Normal-Modus.
:wqaSpeichert 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.

BefehlWas passiert
:%s/suchbegriff/ersatzbegriff/gSucht und ersetzt im ganzen Dokument.
:%s/suchbegriff/ersatzbegriff/gcWie oben, aber Du wirst vor jedem Ersetzen gefragt.
:%s/suchbegriff/ersatzbegriffOhne /g wird nur das nächste passende Wort ersetzt.
:s/suchbegriff/ersatzbegriff/gSuchen und Ersetzen nur in der aktuellen Zeile.
:set ignorecaseSuche nicht case-sensitive. Wirkt nur in der aktuellen Sitzung.
:set smartcaseZusatz 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

BefehlWas passiert
:bnSpringt zum nächsten Buffer. Du kannst mehrere Dateien in unterschiedlichen Buffern offen haben.
:bpSpringt zum vorherigen Buffer.
:bfSpringt zum ersten Buffer.
:blSpringt zum letzten Buffer.
:buffersZeigt 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

BefehlWas passiert
hCursor nach links. Geht auch mit den Cursor-Tasten.
jCursor nach unten.
knach oben.
lnach rechts.
$Springt zum Ende der Zeile.
0Springt zum Anfang der Zeile.
^Springt zum ersten Zeichen der Zeile, also etwa nach Leerzeichen.
ggSpringt zum Anfang des Dokuments.
GSpringt zum Ende des Dokuments.
wCursor zum ersten Zeichen des nächsten Worts. Sonderzeichen zählen als Wort.
WSpringt auf das nächste Wort nach einem Leerzeichen.
bWie w, nur rückwärts.
BWie W, nur rückwärts.
eWie w, nur landet der Cursor auf dem letzten Zeichen des Worts.
EWie W, nur auf dem letzten Zeichen des Worts.
geWie b, nur rückwärts.
gEWie 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.
HSpringt zur ersten Zeile des sichtbaren Fensters.
MSpringt in die Zeile in der Mitte des sichtbaren Bereichs.
LSpringt in die letzte Zeile des sichtbaren Bereichs.
fxSpringt zum nächsten Vorkommen von x in der aktuellen Zeile. f, springt zum nächsten Komma.
FxWie fx, nur rückwärts.
txWie fx, aber landet ein Zeichen davor.
TxWie Fx, nur ein Zeichen danach.
%Springt zur passenden Klammer, geschweiften Klammer oder dem Kommentarpartner an der Cursorposition.

Bewegen im Normal- und im Insert-Modus

BefehlWas passiert
Cursor-TastenWie in jedem anderen Editor.
Ctrl+uHalbe Seite nach oben.
Ctrl+dHalbe Seite nach unten.
Ctrl+bGanze Seite nach oben.
Ctrl+fGanze Seite nach unten.

Suche im Normal-Modus

BefehlWas passiert
*Sucht nach dem nächsten Vorkommen des Wortes unter dem Cursor.
#Das Ganze rückwärts.
/suchbegriffSucht vorwärts. Je nach Einstellung wird Groß-/Kleinschreibung beachtet.
?suchbegriffSuche rückwärts.
nSpringt zum nächsten Treffer.
NSpringt zum vorherigen Treffer.

Vom Normal- in den Insert-Modus

BefehlWas passiert
iGeht in den Insert-Modus, um Text zu schreiben.
aGeht ein Zeichen weiter und dann in den Insert-Modus.
ISpringt zum ersten Zeichen der Zeile und in den Insert-Modus.
AGeht ans Ende der Zeile und in den Insert-Modus.
oFügt eine Zeile unter der aktuellen ein und geht in den Insert-Modus.
OFügt eine Zeile oberhalb ein und geht in den Insert-Modus.
cwErsetzt das aktuelle Wort. Löscht es und geht in den Insert-Modus.
ccLöscht die ganze Zeile und geht in den Insert-Modus.
CLöscht alles ab dem Cursor bis zum Zeilenende und geht in den Insert-Modus.
sLöscht das Zeichen unter dem Cursor und geht in den Insert-Modus.

Löschen im Normal-Modus

BefehlWas passiert
xLöscht das Zeichen unter dem Cursor. Entspricht Backspace, das funktioniert auch.
rTauscht das Zeichen unter dem Cursor und bleibt im Normal-Modus. ra setzt ein a an die Stelle.
dwLöscht das Wort. Auch dW, db oder andere Kombinationen funktionieren.
ddLöscht die ganze Zeile.
DLöscht alles ab dem Cursor bis zum Zeilenende.

Kopieren und Einfügen im Normal-Modus

BefehlWas passiert
yKopiert den markierten Text (siehe v und V).
yyKopiert die ganze Zeile.
ywKopiert das Wort unter dem Cursor. Die Kombinationen wiederholen sich.
5yyKopiert 5 Zeilen. Funktioniert auch mit anderen Zahlen.
y$Kopiert bis zum Zeilenende.
pFügt das Kopierte unter dem Cursor ein.
PFügt das Kopierte vor dem Cursor ein.
JFügt die aktuelle mit der nächsten Zeile zusammen.

Visual-Modus

BefehlWas passiert
vVisual-Modus, Text markieren.
VVisual-Modus für ganze Zeilen.
oBewegt 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

BefehlWas 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.
gUUGanze Zeile in Großbuchstaben.
guuGanze Zeile in Kleinbuchstaben.

Undo, Redo, Wiederholen

BefehlWas passiert
uUndo.
UAlle Änderungen einer Zeile zurücknehmen.
Ctrl+rWiederherstellen, 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.