Hauptseite

vim Bewegungskommandos

30. April 2009 von

vim besitzt unglaublich viele Kommandos um den Cursor an eine andere Stelle zu bewegen. Diese können die Navigation in einem Dokument erheblich vereinfachen. Darüber hinaus können viele Kommandos mit den Bewegungskommandos kombiniert werden. Daher hier einige interessante Kommandos zum Bewegen des Cursors. Die Bewegungskommandos erlauben auch die Angabe eines Quantifizierers (Count). z.B. bewegt man den Cursor mittels j eine Zeile nach unten, mit 3j jedoch 3 Zeilen nach unten.

Neben den wohl bekanntesten zeichenweisen Bewegungskommandos h,j,k und l (links, hoch, runter und rechts) gibt es die Wortweisen Kommandos:

  • w – Bewegt den Cursor zum Anfang des nächsten Worts
  • W – Bewegt den Cursor zum Anfang des nächsten WORTS
  • b – Bewegt den Cursor zum Anfang des vorherigen Worts
  • B – Bewegt den Cursor zum Anfang des vorherigen WORTS
  • e – Bewegt den Cursor zum Ende des aktuellen Worts
  • E, – Bewegt den Cursor zum Ende des aktuellen WORTS

Dabei besteht ein Wort nur aus Zeichen, Ziffern und Unterstrichen, während ein WORT auch Sonderzeichen enthält und lediglich durch Whitespaces getrennt wird.

Dann gibt es noch die zeilenweisen Bewegungskommandos 0 und $ (um zum Anfang bzw. Ende einer Zeile zu springen) sowie die dokumentweiten gg und G (um zum Anfang bzw. Ende des Dokuments zu springen).
Mit ( und ) springt man jeweils zum vorherigen bzw. nächsten Satz (genauer gesagt auf das erste nicht whitespacezeichen hinter einem Satzzeichen), wohingegen { und } jeweils einen Absatz (definiert durch eine Leerzeile am Ende) zurück bzw. vor springt .

[[ und ]] springen zur jeweils nächsten öffnenden (bzw. schließenden) geschweiften Klammer, die am Anfang der Zeile steht. Dies ist vor allem beim Programmieren praktisch, da man so immer zur nächsten Funktion kommt (wenn man die öffnende Klammer jeweils in die nächste Zeile setzt). Mit % kann man von einer Klammer auf die korresponiderende Klammer springen. Also z.B. von } nach { oder von [ nach ]. Innerhalb einer Klammer springt % auf die öffnende Klammer. Wird ein Quantifizierer angegeben, so wird das Zeichen wirklich als Prozent interpretiert und man kann z.B. mit 20% an die Stelle Springen, die 20 % der Zeilen vom Dolumentanfang entfernt ist.

Weitere Bewegungskommandos sind t<Zeichen> und f<Zeichen>, so springt ta vor das nächste auftretende a in der Zeile. f; Springt z.B. auf das nächste Semicolon. T und F haben die gleiche Funktionalität aber rückwärts. Diese kann man mit ; wiederholen oder mit , in die entgegengesetzte Richtung.

Auch die Suche mit / und ? gilt als Bewegung wenn sie mit Enter abgeschlossen ist. Diese Kann übrigens auch quantifiziert werden, so dass 3/foo nach dem 3. Vorkommen von foo sucht. (An dieser Stelle sei nochmal darauf hingewiesen, dass die Suche auch komplexe reguläre Ausdrücke beherrscht.) Sprünge zu Markierungen gelten ebenso als Bewegung (hier kann jedoch kein Quantifizierer benutzt werden).

Diese Bewegungskommandos kann man nun mit vielen Kommandos kombinieren. Hier einige Beispiele (der Phantasie sind kaum Grenzen gesetzt):

  • c4/foo – ändert ab der aktuellen Position bis zum vierten vorkommen von “foo”.
  • y3) – kopiert von der aktuellen Position bis zum Ende des übernächsten Satzes.
  • dt, – löscht von der aktuellen Position bis zum nächsten Komma.
  • zf’a – erzeugt eine Faltung bis zur mit a markierten Zeile.
  • gUw – ändert alle Buchstaben bis zum Wortende in Großbuchstaben um.
  • >]] – rückt die Zeilen bis zum Ende des Blocks (also bis zum }) ein.
  • !}sort – Sortiert alle Zeilen bis zum Ende des Absatzes. (Hier wird das Linux-Kommando sort benutzt)

Spezielle Bewegungskommandos

Darüber hinaus gibt es noch spezielle Bewegungskommandos, die nur im Zusammenhang mit anderen Funktionen genutzt werden können:

  • i) zum Bearbeiten des Inhalts einer Klammer so löscht di) den Inhalt einer Klammer, während ci) ihn ändert. Dies Funktioniert mit allen Klammertypen, also auch mit (,{,},[,],< und >.
  • a) beabeitet einen kompletten Klammerausdruck. Also wie i), nur dass die Klammern mit hinzugezogen werden.
  • is und as sind die gleichen Funktionen wie i) und a) nur für Sätze sowie ip und ap für Absätze.
  • i” und a” und i’ und a’ sowie i` und a` sind für Strings bzw. Wörter und Sätze in den entsprechenden Anführungszeichen gedacht.

Auch hier ein Paar Beispiele (die innerhalb der entsprechenden “Blöcke” ausgeführt werden müssen):

  • gui” – ändert alle Buchstaben innerhalb der Anführungszeichen in Kleinbuchstaben um
  • da< – löscht (z.B.) ein HTML Tag
  • yip – kopiert den aktuellen Absatz (ohne Leerzeile dahinter)
  • das – löscht den aktuellen Satz (mit Leerzeichen dahinter)

Im Gegensatz zu den normalen Bewegungskommandos wie w ist es hier egal, wo im “Block” der Cursor steht.

Mit dem Wissen um diese mächtigen Operationen und Kombinationsmöglichkeiten wird das Editieren von Texten noch viel effizienter. Es gibt noch viele weitere Bewegungskommandos für spezielle Einsatzzwecke (z.B. Programmieren) oder zum genaueres navigieren (z.B. erstes/letztes Zeichen eines Satzes). Mehr zu diesem Thema gibt es in der Hilfe von vim, die man mittels :h navigation aufrufen kann.


Schlagworte: , , ,



5 Kommentare zu „vim Bewegungskommandos“

  1. deifl sagt:

    Super Artikel! Bitte mehr davon ;-)

    Ich persoenlich habe mir angewoehnt so wenig wie moeglich im insert-Modus zu arbeiten und die ESC-Taste (CapsLock) sofort nach Aenderungen im Text zu benutzen.

  2. zimon sagt:

    Hallo deifl,

    Ich hab mir die ESC-Taste auch auf CapsLock gelegt, weil sie unter vim so häufig gebraucht wird. Man kann das Potential von vim auch nur wirklich ausschöfpen, indem man ausgiebigen Gebrauch vom Kommandomodus macht und nicht die ganze Zeit im Insert-Modus bleibt (von daher gehe ich auch nach jeder Eingabe dorthin zurück).

    Schön, dass Dir der Artikel gefällt, ich schreibe gerne noch mehr davon. Gibt es ein Thema, was besonders von Interesse ist?

    Gruß
    zimon

    PS: Das ESC in Deinem Kommentar ist durch die spitzen Klammern verschwunden, ich schreibe es wieder rein. Mal sehen, ob ich da ne Lösung für finde.

  3. minitux sagt:

    Hallo Zimon,
    Es ist wie beim lesen von Asterix-Comix… man entdeckt immer wieder ein neues Detail… So gehts mir mit vim – ich liebe diesen editor und mag ihn nicht missen. Toll haste hier hier für mich zusammengefasst, wie ich ihn noch besser nutzen kann, anyway aufrichtigen Dank – von alleine wär ich nich draufgekommen – und heute hab ich schon profitiert – Danke, minitux

  4. Carambakaracho sagt:

    Schöner kleiner Einblick, ich bin grade im Vim Training und genau Beispiele für Kombinationen von Befehlen interessieren mich brandheis.
    Gerne mehr…

    C. karacho

  5. zimon sagt:

    Vielen Dank für die netten Kommentare mit den positiven Rückmeldungen.
    Ich freue mich immer, wenn meine Artikel gut ankommen.
    Es wird definitiv noch viele weitere Artikel über vim geben. Teilweise die grundlegenden Funktionen, wie auch schon viele hier im Blog vorgestellt wurden, aber auch speziellere Themen und Tricks. Ob ich noch einen Artikel mit Kombinationen von Befehlen zustande bringe, weis ich noch nicht. Mir fällt da spontan nicht so wirklich viel ein, aber mal schauen.

    Viele Grüße
    zimon

Kommentieren

Kommentarlinks könnten nofollow frei sein.


Bloggeramt.de frisch gebloggt Blogverzeichnis - Blog Verzeichnis bloggerei.de