Home / LinuxUser / 2006 / 11 / Aufgaben automatisieren in Vim

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(179 Punkte bei 5 Stimmen)
Mandriva in Nöten
(161 Punkte bei 4 Stimmen)
Mageia 2 ist fertig
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

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 number die 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".

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 06/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...