Mäusefrei

Wenn ich erzähle, dass ich IT-Berater bin, meine ich eigentlich, dass ich Vim benutzen kann. Alle Probleme werden nämlich auf einmal so leicht und schnell lösbar, weil das Editieren der Dateien wie von Geisterhand geht.

Und das im Notfall auch ganz ohne grafische Oberfläche. Hier kommt deswegen ein erster Schwung Tipps, die allen Leser:innen das Leben und Arbeiten mit Vim erleichtern sollen.

Kürzlich ist übrigens Version 9 dieses besten Editors der Welt erschienen. Das ist ein guter Zeitpunkt zu eruieren, warum Vim so gut ist, und zu überlegen, was Vim 9 noch besser als die Vorgängerversionen macht.

Vor gar nicht allzu langer Zeit habe ich auf dem Münchner Linux-Stammtisch einen kurzen Vortrag gehalten, wie ich Vim nutze. Man kann das natürlich nicht oft genug erzählen, besser noch, wenn sogar etwas nützliches hängen bleibt. Die Folien vom Stammtisch gibt es hier.

In diesem Beitrag greife ich ein paar Punkte aus dem Vortrag auf und vertiefe den Bereich Cursor-Navigation weiter, als der Vortrag dafür Raum geboten hat.

Möglichst wenig Tastendrücke

Wer Vim kennt, weiß, dass man ihn leicht verlassen kann, indem man :wq eingibt. Alternativ kann man auch :x verwenden. Noch etwas effizienter ist :ZZ – das bringt genau das gleiche Ergebnis mit einem Keystroke weniger. Zwei Anmerkungen hier: Die Zahl der Tastendrücke zu minimieren ist das eigentlich Ziel der Vim-Meisterschaft. Die alten Vim-Meister zählen außerdem alle Arten von Klammergriffen jeweils als einen Keystroke.

Wo man diese alten Vim-Meister trifft? Die beste Adresse ist sicher vimgolf.com. Dort messen sie sich und unterbieten sich in den Keystrokes, die sie zum Lösen komplexer Aufgaben benötigen. Aber gehen wir einen Schritt zurück.

Vim-Nutzer:innen wechseln typischerweise zwischen verschiedenen Modi, die alle ihre Stärken und Schwächen haben. Beim Öffnen des Editors befindet man sich im „Normal Mode“. Um Text einzugeben, muss man erst in den „Insert Mode“ kommen. Das geht auf ganz verschiedene Arten. Am bekanntesten ist der Druck aufs :i für „insert“. (Tatsächlich verwende ich das :i gar nicht so häufig für den Wechsel in den Insert Mode.

Besonders empfehlen möchte ich das :c und warum das so mächtig ist, steht in den folgenden Abschnitten.)

Zurück kommt man durch einen Druck auf die Escape-Taste. Durch die Eingabe von : im Normal Mode betritt man den „Command Mode“, zu erkennen an dem : Symbol ganz unten links. In diesem Modus kann man Anweisungen eingeben die erst nach dem Drücken der Enter-Taste ausgeführt werden (siehe :wq). Der Vollständigkeit halber soll an dieser Stelle noch der „Visual Mode“ erwähnt werden, in dem man beliebig lange Zeichenketten oder ganze Zeilen markieren und weiterverarbeiten kann.

Hilfreiche Eselsbrücken

Wer gerne mit Eselsbrücken arbeitet, merke sich jetzt „append“, „change“, „substitute“, „replace“ und „open new line“. Jeweils der erste Buchstabe (plus eventuell eine Bewegung) bringt uns in den Insert Mode. Dabei passieren unterschiedliche Dinge mit dem Zeichen unter dem Cursor sowie der aktuellen Cursorposition. Bei diesen Kommandos gibt es auch immer eine Variante mit dem Großbuchstaben, die verhält sich etwas anders.

Am besten einfach einmal ausprobieren.

Halt, da war außerdem gerade von Bewegung die Rede. Wichtig: Das Kommando change erwartet eine Bewegung direkt nach dem Druck aufs c. Es löscht dann alle Zeichen bis zum Ende der Bewegung und wechselt in den Insert Mode.

Was ist so eine Bewegung? Gemeint ist eine Cursorbewegung, also ein Kommando, das den Zeiger von der aktuellen Position irgendwo andershin im Dokument bewegt. Bewegung geschieht normalerweise im Normal Mode und alle dort erlaubten Kommandos sind nach dem c erlaubt. Im einfachsten Fall sind das die Cursor-Tasten oder die vimmigeren Pendants h, j, k, l. c löscht den Text ab der Positition direkt vor dem Cursor bis zur Position direkt nach diesem Zeichen (eines rechts davon) — oder einfach ausgedrückt das Zeichen unter dem Cursor — und veranlasst einen Wechsel in den Insert-Mode. c↓ entfernt die aktuelle Zeile sowie die darunter und erlaubt, sie durch neuen Text zu ersetzen.

Spezielle Bewegungen

Eine der großen Stärken von Vim sind aber die vielfältigen Bewegungen, die Kommandos wie das change so mächtig machen. w und b bewegen den Cursor z.B. jeweils zum Beginn des nächsten Worts oder des vorherigen („before“), das e zum Ende das aktuellen Worts. Runde Klammern führen zum vorherigen oder nächsten Satzanfang, die geschweiften Klammern zu Absatzenden. 0 und $ zeigen auf Zeilenanfang bzw. -ende. fy bewegt uns zum nächsten „y“ („following“), ty zum Zeichen direkt davor („till“). F und T machen das gleich nur rückwärts.

G bringt den Cursor an den Anfang des Dokuments, H zum ersten Zeichen auf dem Bildschirm, gg geht ganz nach unten. Befindet sich in der aktuellen Zeile eine Klammer, springt % zum Gegenstück. Und dann kann man noch zu Suchergebnissen springen. n wäre das nächste Suchergebnis, N sucht rückwärts. Apropos: Suchen startet man mit dem Forward Slash /. Das * sucht im Dokument das nächste Vorkommen des Worts unter dem Cursor, die Raute # ebenfalls, nur rückwärts.

Möchte man an den Anfang einer speziellen Zeile springen, erreicht man dies durch :N, wobei N der Zeilennummer entspricht. :42 springt somit an den Anfang der Zeile 42. Die Zeilennummern kann man sich übrigens mit :set number einblenden lassen.

Zu guter Letzt kann ich noch Markierungen setzen und mich zwischen diesen bewegen. ma markiert die aktuelle Zeile als Sprungmarke „a“, mit 'a kann ich mich jederzeit dorthin bewegen. Sprungmarken, die mit Großbuchstaben bezeichnet sind, sind global, öffnen also eventuell die Datei, in der sie gespeichert sind.

Sieben Absätze, bitte!

Alle Bewegungen oder überhaupt alle Kommandos lassen sich multiplizieren.

Eine vorangestellte Zahl führt zu einer mehrfachen Bewegung: 7w springt 7 Wörter weiter. Und damit lässt sich eben das c spezifizieren.

ct: lässt alles bis zum nächsten Doppelpunkt editieren — sehr hilfreich in YAML Dateien. c$ erlaubt, alle Zeichen von der aktuellen Position bis zum Zeilenende zu modifizieren. Und weil das gar so wichtig und mächtig ist, gibt es das auch als Single-Keystroke: C entspricht c$.

Neben change gibt es noch eine Reihe anderer Kommandos, die Bewegungen erwarten. Mit ein bisschen Übung spart man sich hier viel Arbeit. Und wenn man so weit plant, schreibt man seine Dokumente ab sofort so, dass man besonders viel aus Vim-Kommandos nutzen kann. Sinnvoll gewählte Absätze sind ein gutes Beispiel. d} löscht alles von der aktuellen Zeile bis zum Ende des Abschnitts (kommt von delete). Danach einfach zur Stelle navigieren, an der die gerade gelöschte Passage besser passt und mit p wieder einfügen (paste wie in Copy & Paste).

Einer noch: y3w kopiert die nächsten drei Wörter in den (Vim-internen) Zwischenspeicher. Das kommt von „yank“, c war ja schon für change reserviert. Diesen Zwischenspeicher kann ich dann mit p an einer beliebigen Stelle einfügen. Übrigens wird dieses Speicher jedes Mal befüllt, wenn ich etwas lösche, auch nach einem c2w kann ich die zwei gelöschten Wörter später woanders einfügen. Beispiel: cib""P setzt den Inhalt der Klammern (innerhalb derer sich der Cursor gerade befinden muss) in Anführungszeichen. Das i ist hier eine spezielle Bewegung, deren genaue Bedeutung ich ebenso wie das Nachvollziehen dieser Zeichenfolge als Hausaufgabe stehen lassen.

Neu in Vim 9

Wir sind nämlich schon ganz schön weit gekommen und ich hoffe, für alle war mindestens eine neue Erkenntnis dabei. Mit Vim 9 hat sich an dem bisher erwähnten nicht viel geändert. Das größte neue Feature ist dessen neue Skripting-Sprache: Vim9-Skript. Für Plugin-Entwickler ist das ein Segen, weil das alte Vimscript – sagen wir mal – ungewohnt war, betrifft Nutzer*innen vermutlich erst in der Zukunft. Vim9-Skript ist dazu auch noch deutlich schneller. Die restlichen Verbesserungen finden sich eher unter der Haube: eine bessere Test-Abdeckung, mehr Sicherheit und Bugfixes. Interessant könnten die neuen Farbschemata sein und sort berücksichtigt neuerdings die Spracheinstellungen.

Probiert die Bewegungen und freut euch auf Vim 9! Wenn ihr durch seid, empfehle ich die Themen Visual Mode, Makros und Register fürs weitere Vorankommen. Zone-Folding kann ich auch sehr empfehlen. Ein bisschen was dazu erörtere ich auch im Podcast „Focus On Linux“ der SVA mit Christian Stankowic und dessen Kollegen.

Und vielleicht treffen wir uns ja mal auf vimgolf.com

The following two tabs change content below.

Jan Bundesmann

This post is also available in: English