Operator + Anzahl + Bewegung/Textobjekt
Vim-Befehle sind Sätze: ein Verb (Operator), eine Zahl und ein Ziel. Wer 5 Operatoren und 20 Ziele kennt, beherrscht 100 Befehle – statt 100 Tastenkürzel auswendig zu lernen. d2w = „lösche zwei Wörter“, ci" = „ändere innerhalb der Anführungszeichen“, yap = „kopiere einen Absatz“.
① Operator – was?
② Anzahl – wie oft?
③ Bewegung – wohin?
… oder Textobjekt – welches Stück?
Tipp: Klicke im Text rechts auf ein Zeichen, um den Cursor dorthin zu setzen.
dw
„lösche bis zum Anfang des nächsten Wortes“
exklusiv – das Zeichen am Ziel gehört NICHT mehr dazu
VORHER – farbig: der Bereich, auf den der Operator wirkt
| 1 | const summe = berechne(preis, menge) * 1.19; |
| 2 | if (summe > 100) { |
| 3 | rabatt = "zehn Prozent"; |
| 4 | log("<b>Rabatt</b> gewährt"); |
| 5 | } |
| 6 | |
| 7 | Ein zweiter Absatz: Wörter, Satzzeichen und WORTE. |
NACHHER
| 1 | const summe = be(preis, menge) * 1.19; |
| 2 | if (summe > 100) { |
| 3 | rabatt = "zehn Prozent"; |
| 4 | log("<b>Rabatt</b> gewährt"); |
| 5 | } |
| 6 | |
| 7 | Ein zweiter Absatz: Wörter, Satzzeichen und WORTE. |
Lösche (d) + Bewegung w (exklusiv): „rechne“ (6 Zeichen) gelöscht → Register "" + "-
🔬 Wie Vim die Tasten liest
Register
"a
Text landet in Register "a
Anzahl
3
3 ×
Operator
d
löschen (landet im Register – „ausschneiden“)
Anzahl
2
2 ×
Bewegung / Textobjekt
w
zum Anfang des nächsten Wortes (Wort = Buchstaben/Ziffern/_ oder eine Folge von Satzzeichen)
✔ vollständig – Gesamtanzahl 6
Zwei Anzahlen werden multipliziert: 2d3w = d6w. Register und Anzahl sind optional, das Ziel nicht.
📚 Nachschlagen
Operatoren
| d | löschen (landet im Register – „ausschneiden“) |
| c | löschen und in den Einfügemodus wechseln |
| y | kopieren (in ein Register) |
| > | Zeilen um 'shiftwidth' einrücken |
| < | Zeilen um 'shiftwidth' ausrücken |
| gU | in GROSSBUCHSTABEN umwandeln |
| gu | in kleinbuchstaben umwandeln |
| g~ | Groß- und Kleinschreibung umkehren |
Operator doppelt = ganze Zeile: dd cc yy >> gUU
Bewegungen
Zeichen & Zeilen
| h | ein Zeichen nach links | exklusiv |
| l | ein Zeichen nach rechts | exklusiv |
| j | eine Zeile nach unten | zeilenweise |
| k | eine Zeile nach oben | zeilenweise |
Wörter
| w | zum Anfang des nächsten Wortes (Wort = Buchstaben/Ziffern/_ oder eine Folge von Satzzeichen) | exklusiv |
| W | zum Anfang des nächsten WORTES (WORT = alles bis zum nächsten Leerraum) | exklusiv |
| e | zum Ende des (nächsten) Wortes | inklusiv |
| E | zum Ende des (nächsten) WORTES | inklusiv |
| b | zum Anfang des (vorigen) Wortes | exklusiv |
| B | zum Anfang des (vorigen) WORTES | exklusiv |
| ge | zum Ende des vorigen Wortes | inklusiv |
Zeile
| 0 | zur ersten Spalte der Zeile | exklusiv |
| ^ | zum ersten Nicht-Leerzeichen der Zeile | exklusiv |
| $ | zum letzten Zeichen der Zeile (mit Anzahl: n-1 Zeilen weiter) | inklusiv |
| f | f{z}: vorwärts auf das nächste Zeichen z in der Zeile | inklusiv |
| t | t{z}: vorwärts bis direkt vor das nächste z | inklusiv |
| F | F{z}: rückwärts auf das vorige z | exklusiv |
| T | T{z}: rückwärts bis direkt hinter das vorige z | exklusiv |
| ; | letztes f/F/t/T in gleicher Richtung wiederholen | inklusiv |
| , | letztes f/F/t/T in Gegenrichtung wiederholen | exklusiv |
Datei & Absatz
| gg | zur ersten Zeile (mit Anzahl: zu Zeile n) | zeilenweise |
| G | zur letzten Zeile (mit Anzahl: zu Zeile n) | zeilenweise |
| } | zur nächsten Leerzeile | exklusiv |
| { | zur vorigen Leerzeile | exklusiv |
Suchen & Springen
| % | zur passenden Klammer ( ) [ ] { } (sucht ab Cursor die erste Klammer der Zeile) | inklusiv |
| / | /muster⏎ – zum nächsten Treffer | exklusiv |
| ? | ?muster⏎ – zum vorigen Treffer | exklusiv |
| n | letzte Suche wiederholen | exklusiv |
| N | letzte Suche in Gegenrichtung | exklusiv |
| * | nächstes Vorkommen des Wortes unter dem Cursor | exklusiv |
| # | voriges Vorkommen des Wortes unter dem Cursor | exklusiv |
Textobjekte
| Objekt | i… (inner) | a… (around) |
|---|---|---|
| Wort | nur das Wort | Wort + folgender Leerraum (sonst vorangehender) |
| WORT | nur das WORT (bis Leerraum) | WORT + Leerraum |
| Absatz | die Zeilen des Absatzes | Absatz + folgende Leerzeilen |
| "…" | Text zwischen den Anführungszeichen | inkl. Anführungszeichen + Leerraum |
| '…' | Text zwischen den Hochkommas | inkl. Hochkommas + Leerraum |
| (…) – auch b | Inhalt der runden Klammer | inkl. Klammern |
| […] | Inhalt der eckigen Klammer | inkl. Klammern |
| {…} – auch B | Inhalt des Blocks | inkl. geschweifter Klammern |
| <…> | Inhalt der spitzen Klammer | inkl. < > |
| <tag>…</tag> | Inhalt zwischen den Tags | inkl. öffnendem und schließendem Tag |
Textobjekte gibt es nur nach einem Operator oder im Visual-Modus – sie sind keine Bewegungen. Der Cursor darf irgendwo im Objekt stehen. LazyVim erweitert sie mit mini.ai (z. B. af Funktion,ac Klasse, ao Block).
exklusiv, inklusiv, zeilenweise – der feine Unterschied
Text: foo bar baz Cursor auf f (Spalte 1)
dw [foo ]bar baz w ist exklusiv: bis VOR den Anfang von „bar“ → "bar baz"
de [foo] bar baz e ist inklusiv: bis EINSCHLIESSLICH „o“ → " bar baz"
d$ [foo bar baz] $ ist inklusiv → ""
dj ganze Zeilen j ist zeilenweise: aktuelle + nächste Zeile weg
Sonderregel (:help exclusive): Endet eine exklusive Bewegung in Spalte 1 einer späteren Zeile,
wird das Ende an das Ende der Zeile davor verschoben – beginnt sie vor dem ersten Zeichen der
Zeile, wird der Befehl sogar zeilenweise. Darum löscht di{ die Innenzeilen eines Blocks komplett.