Kleine Helfer
Aufgaben automatisieren in Vim
Makros
Manchmal brauchen Sie eine längere Befehlsfolge, um eine Aufgabe zu erledigen. Stellen Sie sich vor, Sie haben eine Datei mit Vor- und Nachnamen:
Willibald Stefan Hugo Schmittchen Wusel Schwarzer Hampel Schleicher
und wollen die Vornamen folgendermaßen hinter die Nachnamen hängen:
Wusel, Willibald Schwarzer, Stefan Hampel, Hugo Schleicher, Schmittchen
Falls die Liste nicht vier, sondern tausend Namen umfasst, haben Sie einiges an Arbeit vor sich. Mit einem Makro (siehe dazu :help recording) haben Sie es einfacher.
Setzen Sie den Cursor an den Anfang der Datei und tippen Sie im Normalmodus die Taste [Q] und eine weitere Buchstabentaste. (Besonders einfach ist es, [Q] ein zweites Mal zu drücken.) Vim zeigt daraufhin unten im Kommandobereich recording an. Geben Sie nun die Befehle ein, um einen der Vornamen hinter den zugehörigen Nachnamen zu hängen. Zum Beispiel drücken Sie dabei nacheinander folgende Tasten:
- [d][d] – den Vornamen löschen,
- [1][0][0][0][j] – 1000 Zeilen nach unten gehen (das muss die genaue Anzahl der Namenskombinationen sein. Sie finden sie leicht heraus, indem Sie mit
:set numberdie Zeilennummern anzeigen), - [p][k] – Vornamen unter dem Nachnamen einfügen und eine Zeile nach oben gehen (auf den Nachnamen),
- [Umschalt]+[A][,][Esc] – hinter dem Nachnamen ein Komma einfügen und den Einfügemodus verlassen,
- [Umschalt]+[J] – den Vornamen hinter den Nachnamen bewegen,
- [g][g] – an den Anfang der Datei springen, also auf den ersten Namen der Vornamenliste.
Insgesamt lautet das Makro also dd1000jpkA,[ESC]Jgg, wobei 1000 der Anzahl der Namenskombinationen entspricht.
Drücken Sie nun wieder [Q]. Damit haben Sie ein Tastaturmakro im Register "q" (die Buchstabentaste nach dem einleitenden [Q]) aufgezeichnet. Sie können das Makro nun ausführen, indem Sie [@][Q] drücken, wobei "q" das Register bezeichnet, das das Makro enthält. Vim arbeitet jetzt Ihr Makro ab, dass heißt, es verbindet die nächsten Vor- und Nachnamen und springt zurück an den Anfang der gekürzten Vornamenliste.
TIPP
Als Bezeichner für Register lassen sich Ziffern sowie Klein- und Großbuchstaben verwenden, jedoch nicht die Umlaute und das "ß".
Sie haben keine Lust, für die 999 restlichen Namen 999 mal [@][Q] zu drücken? Glücklicherweise können Sie Makros durch eine vorangestellte Zahl mehrfach ausführen (aber nur in einer Datei, sofern das Makro keine Befehle zum Wechseln der Datei enthält). Genau so, wie Sie mit [3][X] drei Zeichen löschen, führen Sie mit [9][9][9][@][Q] 999 mal das Makro im Register "q" aus.
Tipp: Makros nachträglich bearbeiten
Vim erlaubt es, ein Makro nachzubearbeiten, nachdem Sie es aufgezeichnet haben. Dieser Trick funktioniert, da das Programm Makros in den gleichen Registern speichert, die auch dem Kopieren von Textstücken zum Einsatz kommen.
Angenommen, Sie haben ein Makro im Register "a" aufgezeichnet. Gehen Sie an eine übersichtliche Stelle eines Dokuments und tippen Sie im Normalmodus ["][A][P]. Die Tastendrücke für das Makro erscheinen im Text.
Editieren Sie nun den Text, der den zu drückenden Tasten entspricht, nach Ihren Wünschen. Verwenden Sie hier keine Tastenumschreibungen – geben Sie vielmehr Steuerzeichen wie [Strg]+[R] mit Hilfe eines vorangestellten [Strg]+[V] im Eingabemodus ein, tippen Sie also [Strg]+[V][Strg]+[R]. Wenn Sie mit den Änderungen fertig sind, markieren Sie den neuen Makro-Text mit [V] und Cursorbewegungen. Drücken Sie ["][A][Y], um das geänderte Makro zu speichern, und [@][A], um es auszuführen.
Abkürzungen
Abkürzungen (siehe dazu: :help abbreviations) funktionieren ähnlich wie Mappings. Sie lassen sich aber nur im Einfüge- oder Kommandozeilenmodus anwenden. Mit der Syntax Abkürzungsbefehl
Kurzform
Langform
definieren Sie ein entsprechendes Kommando.
Der Abkürzungsbefehl beginnt dabei wieder mit einem Buchstaben, der anzeigt, für welchen Modus die Definition gilt. So kennzeichnet iabbrev solche, die nur im Einfügemodus gelten, cabbrev definiert Abkürzungen für den Kommandozeilenmodus und abbrev für beide Modi. Um noch mal Tipparbeit zu sparen, dürfen Sie den Teil abbrev auch jeweils mit ab abkürzen. Es genügt also, iab statt iabbrev zu schreiben.
Wie bei den Mappings handelt es sich bei der Kurzform um das, was Sie tippen, um das Ersetzen auszulösen. Die Langform beinhaltet, was Vim für die Kurzform einsetzt. Ein Beispiel macht dies deutlich. Geben Sie wie gewohnt im Kommandozeilenmodus den folgenden Befehl ein:
iabbrev mfg Mit freundlichen Grü↩ ßen<CR>Willibald Wusel
Geben Sie nun im Einfügemodus mfg ein, erscheint die definierte Schlussformel. Das funktioniert aber nur, wenn Vim die Zeichenkette mfg als eigenständiges Wort erkennt. Dass heißt, direkt davor und danach darf kein anderes alphanumerisches Zeichen stehen: Die Langform wird erst eingesetzt, wenn Sie die Kurzform durch [Esc], Leerraum (zum Beispiel [Eingabe]) oder ein nicht-alphanumerisches Zeichen abschließen.
Ein beliebtes Einsatzgebiet von Abkürzungen besteht darin, häufig gemachte Schreibfehler während der Eingabe zu korrigieren, wie im Beispiel iab hervoragend hervorragend zum Verdoppeln des Buchstaben "r". Nett sind auch Vereinfachungen fürs Programmieren. So hilft iab def def():<Left><Left><Left> beim Python-Programmieren.
Tippen Sie nun def , erscheint def (): und die Einfügemarke steht vor der öffnenden Klammer – eine nützliche Abkürzung, um eine Funktions- oder Methodendefinition in Python-Code einzufügen. Nicht mehr gewünschte Abkürzungen entsorgen Sie mit iunabbrev Kurzform
aus dem Speicher. Für das letztgenannte Beispiel erledigt iunabbrev def diese Aufgabe.
Abkürzungen für den Kommandozeilenmodus entfernen Sie mit cunabbrev. Die gerade gültigen Abkürzungen lassen Sie sich anzeigen, indem Sie den Abkürzungsbefehl ohne weitere Zusätze eingeben. So listet die Angabe von iab im Kommandozeilenmodus alle Abkürzungen für den Eingabemodus. Der Befehl beginnt ja mit einem "i".



