neovim Teil 2 – Bedienung von Vim und nvim für Einsteiger
Auffrischung und Anleitung für Neu- und Wiedereinsteiger
Im ersten Teil haben wir neovim installiert. Nun kann es sein, dass Du entweder vi
, vim
oder neovim
noch gar nicht verwendet hast und es zum ersten mal diese Art von Editor richtig testen willst oder vielleicht ist die letzte Verwendung etwas her. Für Dich habe ich diesen Beitrag erstellt.
Vielleicht ist aber auch für den einen oder anderen noch was dabei.
Starten des Editors
Mit vi
wird auf fast allen Systemen inzwischen direkt vim
gestartet. Neovim wird über nvim
aufgerufen. Standardmäßig sind alle diese Editoren für die Command Line gedacht. Also werden auf dem Mac im Terminal, iTerm2 und co gestartet.
Natürlich kannst Du zum öffnen einer Datei diese beim Start des Editors mit angeben.
Auf dem: Mac gibt es MacVim
als GUI-Version des “klassischen” VIM und inzwischen vimr
für eine GUI-Variante von neovim. Letzten werde ich demnächst noch genauer vorstellen.
Standardmäßig begrüßt Dich der Editor wir im Screenshot und Du befindest Dich im Modus Normal
.
normal, insert, command?
Modus | Beschreibung |
---|---|
normal | Für Navigation und Manipulation von Texten. In den Modus kommt mit mit Drücken der ESC -Taste |
insert | Der eigentliche Modus zum schreiben von Texten. Du kommst u.a. mit i in diesen Modus |
visual | Hier wird ein Bereich markiert, um innerhalb diesen Bereichs etwas durchzuführen |
command | Die Command Line des Editors. Aus dem Normal-Modus mit : zu erreichen |
Ex-Mode | Eigentlich für Batch-Verarbeitung und der Ursprung von vi |
So sieht das dann in der Praxis aus:
Bei den Videos nicht wundern, wenn es etwas anders aussieht als bei Dir. Mein Editor hat rund 300 Zeilen Konfiguration. Auch ist Autovervollständigung aktiv, deshalb werden machen Wörter beim tippen in der kleinen Box neben dem Cursor angezeigt.
Mit ESC
kommst Du also immer wieder in den Normal-Mode zurück. Dort kannst Du Dich lesend im Text bewegen und Befehle für den Text eingeben. Typisches Beispiel für einen solchen Befehl wäre dd
um eine Zeile zu löschen. Im Insert-Mode schreibst Du dann den Text.
Das hört sich nun kompliziert an, ist aber nach einiger Zeit komplett logisch und macht man im Unterbewusstsein.
Die wichtigsten Befehle im command mode
Da eines der ersten Probleme das Beenden des Editors ist, fangen wir mal mit dem command mode an.
Im Command-Modus (mit :
aus dem Normal-Modus), kann man dann “richtige” Befehle eingeben. Beispiel wären hier, speichern, öffnen, das Beenden des Editors, usw.
Ich schreibe immer einen Doppelpunkt vor den Befehl, damit klar ist, dass es er im Command-Mode eingegeben wird.
Alle Befehle und Möglichkeiten würden absolut den Rahmen hier sprengen. Es sind die wichtigsten, um überhaupt vi, vim und neovim bedienen zu können.
Hilfe?
Bevor ich loslege. Schaue Dir auf jeden Fall den Befehl :help
an. VIM hat eine sehr umfangreiche Hilfe. Wenn mal ein Fenster, wie bei der Hilfe aufgeht oder einen Teil des Bildschirms benötigt, kommst Du mit :q
meistens raus.
Öffnen, speichern und beenden
Befehl | Was passiert? |
---|---|
:q | Beendet den Editor. Sollte etwas nicht gespeichert sein, kannst Du in nicht beenden |
:q! | Beendet den Editor, auch wenn noch etwas nicht gespeichert ist (Datenverlust) |
:w | Speichert, aber beendet nicht. Mit :w Dateiname kannst Du entsprechend einen Namen zum speichern angeben |
:w! dateiname | Speichert (und überschreibt auch falls es die Datei schon gibt), aber beendet nicht. |
:wq | Speichern und beenden. Ja ja, die coolen Leute drücken ZZ im normal mode. |
:wqa | Speichern und beendet auch alle Tabs. Eher für später interessant, da Du erst mal Tabs lernen musst. |
:e dateiname | Öffnet eine Datei in einem weiteren Buffer. Ein Buffer ist eine Art weitere Layer im Editor. |
Ein paar Beispiele für obere Befehle:
Suchen und Ersetzen
Gesucht wird über den normal mode und somit findest Du den Befehl etwas weiter unten im Beitrag.
Befehl | Was passiert? |
---|---|
:%s/suchbegriff/ersatzbegriff/g | Sucht nach suchbegriff und ersetzt dies durch ersatzbegriff im aktuellen Dokument |
:%s/suchbegriff/ersatzbegriff/gc | Wie zuvor, aber man wird gefragt, ob es ersetzt werden soll |
:%s/suchbegriff/ersatzbegriff | Ohne dem /g wird nur das nächste passende Wort gesucht und ersetzt |
:s/suchbegriff/ersatzbegriff/g | Suchen und Ersetzen nur in der aktuellen Zeile und auch hier ohne /g nur das nächste Wort |
:set ignorecase | Suche nicht Case-Sensitive. Befehl wirkt nur in der aktuellen Session |
:set smartcase | Zusatz zu ignorecase. Aber wenn ich Groß-/Kleinschreibung verwende dann diese beachten |
Hinweis: Damit die Set-Befehle permanent funktionieren, müssen diese in die Config von VIM/Neovim eingetragen werden. Das ist dann einer der nächsten Beiträge von mir.
Hier mal ein Beispiel für die Suche. In diesem Fall war ignorecase und smartcase aktiv:
Buffer
Befehl | Was passiert? |
---|---|
:bn | Spingt zum nächsten Buffer. Du kannst mehrere Dateien offen haben in unterschiedlichen Buffern |
:bp | Springt zum vorherigen Buffer |
:bf | Springt zum ersten Buffer |
:bl | Springt zum letzten Buffer |
:buffers | Zeigt an, welche Dateien (Buffer) geöffent sind |
Das Arbeiten mit Buffers:
Das sieht recht umständlich aus. Du kannst aber Befehle, wie bf und bl auf Tasten legen. Hier ein Beispiel, wie ich 32 Dateien öffne und mich darin etwas bewege:
Es würde auch noch die Möglichkeit geben, Dateien in Tabs oder in Splits zu öffnen. Das würde aber hier wahrscheinlich auch den Rahmen komplett sprengen.
Tastaturbefehle für normal, insert, visual und co.
Bewegen im normal mode
Befehl/Taste | Was passiert? |
---|---|
h | Cursor nach links. Geht natürlich auch mit den Cursor-Tasten |
j | Cursor nach unten |
k | nach oben |
l | nach rechts |
$ | Springe zum Ende der Zeile |
0 | Springe zum Start der Zeile |
^ | Springe zum ersten Zeichen der Zeile, also nach z.B. Leerzeichen |
gg | Gehe zum Anfang des Dokuments |
G | Springe zum Ende des Dokuments |
w | Bewegt den Cursor zum ersten Zeichen des nächsten Worts. Dabei ist auch ein Sonderzeichen ein neues Wort |
W | Überspringt auf das nächste Wort nach einem Leerzeichen |
b | Identisch zu w, nur rückwärts |
B | Identisch zu W, nur rückwärts |
e | Wie w nur ist des nun der letzte Zeichen des Wortes |
E | Wie W nur ist des nun der letzte Zeichen des Wortes |
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 |
+ | Begt den Cursor zum ersten Zeichen der nächsten Zeile |
– | Entsprechend den Cursor in die vorherige Zeile |
H | Springt mit dem Cursor zu ersten Zeile des sichtbaren Fensters |
M | Gehe mit Cursor in die Zeile die sich in der Mitte des sichtbaren Bereichs befindet |
L | Und entsprechend in die letzte Zeile |
fx | Gehe zum nächsten Zeichen x der aktuellen Zeile. f, würde zum nächsten Komma springen |
Fx | wie fx, nur rückwärts |
tx | Identisch zu fx, nur ein Zeichen dafür |
Tx | Identisch zu Fx, nur ein Zeichen danach |
% | Bewegen den Cursor zur nächsten Klammer, geschweiften Klammer oder Kommentar, die mit der aktuellen Cursorposition gekoppelt ist |
5 | Springt 5 Zeilen nach unten |
5- | Springt 5 Zeilen nach oben |
Bewegen im normal mode und im insert mode
Befehl/Taste | Was passiert? |
---|---|
Cursor-Tasten | Gewohnte Funktion wie in jedem Editor |
CTRL+u | Halbe Seite nach oben springen |
CTRL+d | Halbe Seite nach unten springen |
CTRL+b | Ganze Seite nach oben |
CTRL+f | Ganze Seite nach unten |
Suche im normal mode
Befehl/Taste | Was passiert? |
---|---|
* | Sucht nach dem nächsten Wort, welches sich unter dem Cursor befindet |
# | Das ganze rückwärts |
/suchbegriff | Suche vorwärts nach dem Wort Suchbegriff. Je nach Einstellung wird Groß-/Kleinschreibung beachtet |
?word | Die Suche entsprechend rückwärts |
n | Springe zum nächsten Suchbegriff der gefunden wird |
N | Entsprechend wieder rückwärts |
Wie eine Suche in der Praxis aussehen kann:
Wie komme ich vom normal mode in den insert mode
Befehl/Taste | Was passiert? |
---|---|
i | Geht in den insert mode, um Text zu schreiben |
a | Geht ein Zeichen weiter in den insert mode |
I | Springt zum ersten Zeichen der Zeile und geht in insert mode |
A | Geht in insert mode bei dem letzten Zeichen der Zeile |
o | Fügt eine Zeile unter der aktuellen Zeile ein und geht in insert mode |
O | Fügt eine Zeile oberhalb der aktuellen Zeile ein und geht in insert mode |
cm | Ersetzte das aktuelle Wort. Löscht das Wort und geht in insert mode |
cc | Löscht die ganze Zeile und geht in insert mode. Wäre wie ddO. |
C | Entfernt alles bis zum Ende der Zeile und geht in insert mode |
s | Entfernt Zeichen unter dem Cursor und geht dann in inset mode. |
Löschen (im normal mode)
Befehl/Taste | Was passiert? |
---|---|
x | Löscht das Zeichen unter dem Cursor. Entspricht Backspace, was auch geht |
r | Tauscht das Zeichen unter dem Cursor aus und bleibt dabei im normal mode. Beispiel ra macht ein a an der Stelle. |
dw | Löscht das Wort. Du kannst auch dW, db oder eine andere Kombination nehmen. |
dd | Löscht die ganze Zeile |
D | Löscht alles ab dem Cursor bis zum Ende der Zeile |
Kopieren und Einfügen (im normal mode)
Befehl/Taste | Was passiert? |
---|---|
y | Kopiert den markierten Text (siehe v und V) |
yy | Kopiert die ganze Zeile |
yw | Kopiert das Wort unter dem Cursor. Du merkst die Kombinationen wiederholen sich. |
ynw | Kopiert eine Anzahl n Wörter. 5yy würde 5 Zeilen Kopieren |
y$ | Kopiert bis zum Ende der Zeile |
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 MODE
Befehl/Taste | Was passiert? |
---|---|
v | Visual mode, sozusagen Text markieren |
V | Visual mode für ganze Zeile |
o | Bewegt Cursor im visual mode zwischen ersten und letzten Zeichen |
~ | Ändert Groß-/Kleinschreibung der Auswahl. Also klein wird groß und umgekehrt |
» | Ist wie Einrücken mit Tab-Taste. Entweder die Zeile oder alles im visual mode |
« | In die andere Richtung. |
Mit einer kleinen Demo ist der visual Mode wohl verständlicher:
Groß-/Kleinschreibung
Befehl/Taste | Was passiert? |
---|---|
g~ | Ändere Zeichen unterhalb des Cursors. Aus klein macht groß etc. |
g~$ | Bis zum Ende der Zeile alle Zeichen ändern |
g~~ | Aktuelle Zeile |
gUU | Ganze Zeile in Großbuchstaben ändern |
guu | Und die ganze Zeile in Kleinbuchstaben wandeln |
Undo, Redo, Repeat
Befehl/Taste | Was passiert? |
---|---|
u | Undo |
U | Alle Änderungen einer Zeile zurücknehmen |
CTRL+R | Das Gegenteil von Undo, also Wiederherstellen |
. | Letzte Änderung oder löschen wiederholen. Zeile löschen und mit . wird nochmals eine Zeile gelöscht |
; | Wiederholt letztes f, t, F, or T Kommando. |
, | Wie ; nur in die andere Richtung |
Mehr Infos
Ich habe mich bei den VIM Keyboard Shortcuts von tuxfight3r bedient. Dort findest Du dann noch viele weitere Tastenbefehle, die aber diesen Beitrag komplett sprängen würden.
So kannst Du z.B. bei vielen Befehlen durch eine Zahl zuvor den Befehl erweitern. Also 5dd
löscht 5 Zeilen 2dw
löscht zwei Wörter, usw.
Im nächsten Beitrag kommen wir dann endlich zu einer Config von Neovim. Wir verlassen damit dann die Standard-Einstellung und passen den Editor an unsere Bedürfnisse an.
Super Beschreibung der wichtigsten Shortcuts und Workflows…gerade für mich als Windows->Mac Umsteiger 🙂