Vim Motions

Ich glaube, dass Benutzer von vim (oder neovim) gar keine Probleme haben alte Flugsimulatoren zu spielen. Die Anzahl an Tastatur-Shortcuts ist überwältigend und erinnert mich an die doppelte oder dreifache Belegung in solchen Simulatoren. Das ganze ist aber natürlich Teil des Konzepts. Man arbeitet schließlich in einem Terminal und die haben in ihrer reinen Form keine Mausunterstützung.
Außerdem ist es mein Ziel, die Maus so wenig wie möglich in die Hand nehmen zu müssen, da dies auch zum Teil eine Art Ablenkung beim Programmieren bedeuten kann. Nicht, dass man viel größere Probleme hat, Ablenkung zu vermeiden, aber man kann ja bei den kleinen Sachen anfangen.

Ich komme zwar schon halbwegs zurecht, was die Bewegung in vim angeht und auch wie man gewisse “Events” auslöst und das wird hier auch keine vollständige Auflistung, was so alles möglich ist, aber ich schreibe ein wenig die Befehle und Shortcuts auf, die ich mittlerweile benutze oder mir vorgenommen habe, zu verinnerlichen. Zur Erklärung der Befehle in den Tabellen: wenn dort sowas wie <C-v> steht, ist damit gemeint, dass man CTRL(STRG)-v drückt.

Grundsätzlich werden alle folgenden Befehle im Normal-Mode von vim ausgeführt. Es gibt die verschieden Modi Normal-Mode, Visual-Mode, Visual-Line-Mode, Visual-Block-Mode, Insert-Mode (hier schreibt man Code), den Replace-Mode und den Command-Mode, in die man, wie soll es auch anders sein, mit Tastatureingaben wechselt. Zum Beispiel wechselt man mit i in den Insert-Mode, um Code zu schreiben. Und zwar fängt man dann vor dem Cursor an zu schreiben. Möchte man hinter dem Cursor anfangen zu schreiben, drückt man a. Möchte man am Ende der aktuellen Zeile weiterschreiben, kann man sich mit A dorthin beamen und sofort loslegen.

BefehlBeschreibung
iWechsel in den Insert-Mode
aWechsel in den Insert-Mode (nach dem Cursor)
AWechsel in den Insert-Mode (am Ende der Zeile)
vWechsel in den Visual-Mode
<C-v>Wechsel in den Visual-Block-Mode
:Wechsel in den Command-Mode
RWechsel in den Replace-Mode
ESCWechsel in den Normal-Mode

Bewegung in vim

wasd ist natürlich neben den Pfeiltasten auch eine Art, sich in einer 3D-Landschaft virtuell zu bewegen, ist aber auch dem Umstand geschuldet, dass man dann der in der anderen Hand eine Maus hält und aufgrund der Position der Hand über der Tastatur an die üblichen Tasten zum Waffenwechsel kommt oder andere Kommandos ausführen kann beziehungsweise hierüber schnell an SHIFT, CTRL oder TAB kommt.
In vim werden die Tasten h,j,k und l für diese Bewegungen innerhalb des Textes benutzt, was einfach nur dem Umstand entsprungen ist, dass der Entwickler von vi, damals eine Tastatur verwendet hat, auf der auf diesen Tasten die Pfeiltasten lagen.

BefehlBeschreibung
hCursor nach links
jCursor nach unten
kCursor nach oben
lCursor nach rechts

Jetzt wäre es natürlich umständlich, wenn man 10 mal auf j hämmern müsste, um 10 Zeilen nach unten zu scrollen. Hier kommen dann neben den Motions von vim zusätzlich ein Count (Faktor) ins Spiel, um zu sagen, wie oft die folgende Bewegung ausgeführt werden soll. Mit 10j bewegt man sich also zehn Zeilen nach unten, was im Zusammenspiel mit relativen Zeilennummern eine Möglichkeit offenbart, sich super schnell im Code nach oben und unten zu bewegen. Grundsätzlich kann man auch mit 17l sagen, dass man den Cursor 17 Zeichen nach rechts bewegen möchte, aber mein Gehirn ist alt und kann die Zeichen horizontal nicht so schnell abzählen. Für die Bewegung innerhalb einer Zeile gibt es aber dafür auch bessere Motions.
Zum Beispiel kann man sich mit $ ans Ende der Zeile katapultieren, sich mit fx zum ersten Vorkommen des Buchstabens x bewegen. Oder man gelangt mit W zum nächsten Wort nach einem Leerzeichen. Diese Bewegungen kann man übrigens auch mit Faktoren kombinieren: mit 3W gelangt man also zum dritten Wort, dem ein Leerzeichen vorangeht.

BefehlBeschreibung
$Bewegt Cursor zum Ende der Zeile
0Bewegt Cursor zum Anfang der Zeile
^Bewegt Cursor zum ersten Zeichen einer Zeile
fxBewegt Cursor zum nächsten Buchstaben ‘x’
FxBewegt Cursor rückwärts zum nächsten Buchstaben ‘x’
txBewegt Cursor vor den nächsten Buchstaben ‘x’
TxBewegt Cursor rückwärts vor den nächsten Buchstaben ‘x’
;Wiederholt vorangegangene Motions f, F, t oder T
,Wiederholt vorangegangene Motions f, F, t oder T rückwärts
wBewegt den Cursor zum Anfang des nächsten Wortes (Interpunktion gilt auch als Wort)
WBewegt den Cursor zum Anfang des nächsten Wortes (Leerzeichen vor dem Wort)
bBewegt den Cursor zum Anfang des vorhergehenden Wortes (Interpunktion gilt auch als Wort)
BBewegt den Cursor zum Anfang des vorhergebenden Wortes (Leerzeichen vor dem Wort)
eBewegt den Cursor zum Ende des Wortes (Interpunktion gilt auch als Wort)
EBewegt den Cursor zum Ende des Wortes (Leerzeichen vor dem Wort)
geBewegt den Cursor zum Ende des vorhergehenden Wortes (Interpunktion gilt auch als Wort)
gEBewegt den Cursor zum Ende des vorhergehenden Wortes (Leerzeichen vor dem Wort)

So langsam dämmert es einem, dass da noch eine Menge Befehle kommen werden. Bereiche, wie das Springen zu bestimmten Zeilen, das Springen zwischen Funktionsblöcken oder das Suchen sind hier noch gar nicht erwähnt. Und dann kommen auch noch Motions zum Bearbeiten von Text (Löschen und so weiter). Aber für heute können wir uns schon mal recht gut innerhalb eines Dokuments bewegen.

Kommentare

Keine Kommentare

Kommentar schreiben

* Diese Felder sind erforderlich