Kleine Helfer

Aufgaben automatisieren in Vim

01.11.2006
Als leistungsfähige Editoren helfen Vim und seine grafische Variante Gvim, Zeit zu sparen – mit Mappings, Makros, Abkürzungen und automatischen Befehlen.

Wie jeder gute Editor bietet auch Vim [1] viele Möglichkeiten, wiederkehrende Aufgaben schnell zu erledigen. Mappings ermöglichen es, Tasten oder Tastenkombinationen mit neuen Funktionen zu belegen, Folgen von Tastatureingaben in Makros aufzuzeichnen oder über Abkürzungen Tipparbeit bei der Eingabe zu sparen. Autobefehle treten selbsttätig in Aktion, wenn bestimmte Ereignisse eintreten – etwa, wenn Sie eine neue Datei anlegen.

TIPP

Möchten Sie ein Mapping, eine Abkürzung oder einen Autobefehl wiederverwenden, übernehmen Sie die entsprechenden Definitionen in die Konfigurationsdatei .vimrc in Ihrem Home-Verzeichnis.

Mappings

Mappings definieren Sie im Kommandozeilenmodus [2] des Editors (siehe Kasten "Vim-Modi"). Innerhalb des Editors liefert der Befehl :help map.txt Ihnen eine Hilfe zum Thema Mapping.

Vim-Modi

Normalmodus: In diesem befindet sich der Editor nach dem Start. Hier löscht beispielsweise [X] das Zeichen unter dem Cursor.

Auswahlmodus: In diesen gelangen Sie, wenn Sie im Normalmodus die Tasten [V],[Umschalt]+[V] oder [Strg]+[V] drücken. So markieren Sie beispielweise Textbereiche (Abbildung 1). Aus diesem Modus (sowie aus dem Operator- und Einfügemodus) kommen Sie mit [Esc] wieder zurück in den Normalmodus.

Operatormodus: In diesem befindet sich der Editor, wenn Sie einen Befehl im Normalmodus angefangen haben, aber noch die Angabe zur Bewegung fehlt. Ein Beispiel: Geben Sie im Normalmodus [D] ein, wartet Vim auf eine Bewegungsangabe – das Programm läuft im Operatormodus. Beispielsweise mit [W] zum Löschen eines Wortes oder [$] zum Löschen bis zum Zeilenende erhält es die gewünscht Information.

Einfügemodus: In diesen Modus gelangen Sie durch [I] (für "insert", einfügen) oder [A] (für "append", anhängen). Die Eingabe von Text ist nun möglich.

Kommandozeilenmodus: Hier landen Sie, sobald Sie im Normalmodus [:] tippen. Dieser Modus kommt üblicherweise für längere Befehle zum Einsatz, deren Aufbau Sie während der Eingabe sehen wollen. Beispiele sind die Definition von Mappings, wie in diesem Artikel, oder zum Speichern einer Datei mit :w Dateiname. Normalerweise führen Sie den eingegebenen Befehl mit [Eingabe] aus. Sie brechen ihn mit [Esc] ab. In beiden Fällen kommen Sie zurück in den Normalmodus.

Abbildung 1: Markierung eines Rechteckblocks in Vim mit Strg+V zum Entfernen von Kommentarzeichen.

Die Syntax für eine Mapping-Definition lautet Mapping-Befehl Kurzform Langform. Dabei steht als Mapping-Befehl beispielsweise nmap für ein Mapping, das im Normalmodus arbeitet. Die Kurzform beschreibt, welche Tasten man drücken muss, um die Mapping-Aktion auszulösen. Die Langform beschreibt Tastendrücke (Tabelle "Tastenumschreibungen"), die Sie ohne die Mapping-Definition für die entsprechende Aktion drücken müssten.

In Vim sollten Sie in Mappings und Abkürzungen für Funktions- und Steuertasten Tastenumschreibungen nutzen. Dadurch bleiben die Mappings und Abkürzungen portabel auf ganz verschiedene Plattformen und Terminalemulatoren.

Manche Tasten eignen sich nur bedingt für die Terminalemulation beziehungsweise funktionieren nicht zuverlässig (in extremen Fällen nicht einmal die Tasten, für die in der entsprechenden Tabellenspalte ein "Ja" steht). Bei Gvim sollte das Problem nicht auftreten, wenn der Windowmanager die Tastendrücke nicht abfängt.

Tastenumschreibungen

Umschreibung umschriebene Taste geeignet für Terminal
<Space> [Leertaste] Ja
<CR> [Eingabe] Ja
<Tab> [Tab] Ja
<C-A> [Strg]+[A] Ja
<Del> [Rück] Meistens
<Home>, <End> [Pos1],[Ende] Meistens
<Up>, <Down>, <Left>, <Right> Cursortasten Meistens
<F1> [F1] Meistens
<BS> [Rück] Bedingt
<C-F1> [Strg]+[F1] Bedingt
<S-F1> [Umschalt]+[F1] Bedingt
<C-Up> [Strg]+[Pfeil oben] Bedingt
<S-Up> [Umschalt]+[Pfeil oben] Bedingt
<PageUp>, <PageDown> [Bild auf],[Bild ab] Bedingt
<C-PageUp>, <C-PageDown> [Strg]+[Bild auf],[Strg]+[Bild ab] Bedingt
<S-PageUp>, <S-PageDown> [Umschalt]+[Bild auf],[Umschalt]+[Bild ab] Bedingt

Die Eingabe von nmap <F2> :w<CR> im Kommandozeilenmodus belegt die Funktionstaste F2 im Normalmodus mit einem Befehl zum Speichern der gerade bearbeiteten Datei. Dabei geben Sie <F2> und <CR> jeweils als vier einzelne Zeichen ein, also [<],[F],[2] und [>] für <F2>. Drücken Sie [Eingabe], um die Definition des Mappings abzuschließen und wieder in den Normalmodus zu gelangen. Ein paar Anmerkungen zum Mapping:

  • Die Langform beginnt mit :, damit Vim in den Kommandomodus wechselt.
  • Mit w speichert das Programm die Datei. Das funktioniert nur mit einer Datei, die bereits einen Namen hat – jedoch nicht mit einer Datei, die Sie in Vim erstellt, aber noch nie abgespeichert haben.
  • Da Sie beim (simulierten) Drücken der Funktionstaste F2 im Normalmodus sind, sollte der Editor auch wieder dort landen, nachdem er das Mapping ausgeführt hat. Das geschieht mit <CR>. Achten Sie darauf, dass dahinter keine Leerzeichen stehen, bevor Sie beim Definieren des Mappings [Eingabe] drücken. Leerzeichen interpretiert Vim als Bestandteil der Definition.

Durch Eingabe von nmap <F2> prüfen Sie, ob Vim die Mapping-Eingabe verstanden hat. Sie sollten die folgende Zeile sehen:

n  <F2>          :w<CR>

Dabei bedeutet n, dass das Mapping vom Normalmodus aus zu aktivieren ist (möglich wären – für die anderen Modi – v, o, i oder c). Bei <F2> und :w<CR> handelt es sich um die Kurz- respektive Langform der Mapping-Definition. In der Ausgabe des obigen Befehls würden Sie sehen, ob Sie bei der Eingabe etwas falsch gemacht haben (abgesehen von zusätzlichem Leerraum am Ende der Langform).

Nach dem Betätigen von [F2] sollten Sie durch eine Meldung, die der nachfolgenden ähnelt, sehen, dass Vim die Datei gespeichert hat:

"testdatei.txt" 1L, 16C written

Nun möchten Sie aber unter Umständen die aktuelle Datei auch dann speichern, wenn der Editor gerade nicht im Normalmodus ist. Dazu definieren Sie weitere Mappings:

vmap <F2> <ESC>:w<CR>gv

Das Mapping eignet sich für den Auswahlmodus. Mit gv markieren Sie wieder den Textbereich, dessen Auswahl Sie vorher mit <ESC> aufgehoben haben. Das nachfolgende Mapping definiert das Speichern für den Operatormodus. Der gerade noch eingegebene Operator, zum Beispiel c für "change", geht dabei verloren:

omap <F2> <ESC>:w<CR>

Als Definition für den Eingabemodus dient wiederum eine Variante. Dabei verlassen Sie mit <ESC> den Eingabemodus und aktivieren ihn nach dem Speichern mit a wieder:

imap <F2> <ESC>:w<CR>a

Verwenden Sie i statt a, steht der Cursor nach der Rückkehr in den Eingabemodus nicht mehr an der vorherigen Stelle, es sei denn, dies war die erste Spalte. Zu guter Letzt noch das Mapping für den Kommandozeilenmodus:

cmap <F2> <ESC>:w<CR>:

Mit <ESC> löschen Sie den aktuellen Inhalt der Vim-Kommandozeile, kehren danach mit : aber sofort in den Kommandozeilenmodus zurück. Nach dem Schreiben der Datei wechseln Sie mit dem zweiten Doppelpunkt erneut in den Kommandozeilenmodus, der vor dem Druck auf [F2] aktiv war. Wie beim Mapping für den Operatormodus geht der vor dem Drücken von [F2] bereits eingegebene Text verloren.

Aus drei mach eins

Schauen wir uns noch einmal die oben definierten Mappings an:

nmap <F2> :w<CR>
vmap <F2> <ESC>:w<CR>gv
omap <F2> <ESC>:w<CR>
imap <F2> <ESC>:w<CR>a
cmap <F2> <ESC>:w<CR>:

Alle enthalten den Teil :w<CR>. Wenn Sie Mappings mit gleicher Funktion für verschiedene Modi definieren, finden Sie dieses Muster für verschiedene Modi immer wieder. Sie vermeiden einen Teil der Redundanz, indem Sie die Definition von [F2] für den Normalmodus in den anderen Mappings wiederverwenden:

nmap <F2> :w<CR>
vmap <F2> <ESC><F2>gv
omap <F2> <ESC><F2>
imap <F2> <ESC><F2>a
cmap <F2> <ESC><F2>:

Das simulierte [Esc] in den letzten vier Definitionen aktiviert den Normalmodus, sodass das jeweils folgende <F2> das Mapping für den Normalmodus nutzen kann.

Vim (und auch schon sein Ahn Vi) kennen den Befehl map, der gleichzeitig Mappings für den Normal-, Auswahl- und Operatormodus definiert. Da ein zusätzliches <ESC> für nmap nicht stört, können Sie mit

map <F2> <ESC>:w<CR>

die ersten drei Mappings – fast – ersetzen. Die Markierung im Auswahlmodus geht durch den Druck auf [F2] verloren. Sie können den Text nach dem Speichervorgang über [G],[V] wieder auswählen.

Ebenfalls in Vi und Vim gibt es den Befehl map!, der gleichzeitig Mappings für den Einfüge- und den Kommandozeilenmodus definiert. Das Ausrufezeichen gehört zum Befehl und muss direkt auf das p folgen.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Vim-Workshop
    Vim ist auf allen Linux-Distributionen zu Hause: Der Editor arbeitet im Textmodus, ganz ohne Maus, und steht damit allen Konsolenfans hilfreich zur Seite.
  • Automatikgetriebe
    Makros automatisieren wiederkehrende Tätigkeiten in OpenOffice. Schon mit wenigen Zeilen Programmcode hört im virtuellen Büro alles auf Ihr Kommando.
  • Tipps&Tricks für´s Office
    Gerade die Größe und Komplexität von Office-Software bringt es mit sich, dass man manchmal bei ganz banalen Dingen wie der Ochs vorm Scheunentor steht und unter unglücklichem Softwaredesign zu leiden hat. Einige oft gestellte Fragen beantwortet die – nichttanzende – Büroklammer.
  • Tabelle unter Kontrolle
    OpenOffice bringt eine eigene Makro-Programmiersprache mit: Mit StarBasic können Sie umständliche manuelle Tätigkeiten automatisieren. Wir stellen Variablen, Kontrollstrukturen und Schleifen vor.
  • Interaktive Geometrie
    Mathematik gilt als theorielastig, trocken und abschreckend. Es geht aber auch anders: Dr. Geo macht euklidische Geometrie zum interaktiven Erlebnis.
Kommentare

Infos zur Publikation

LU 01/2015: E-Books im Griff

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

ICEauthority
Thomas Mann, 17.12.2014 14:49, 2 Antworten
Fehlermeldung beim Start von Linux Mint: Could not update ICEauthority file / home/user/.ICEauth...
Linux einrichten
Sigrid Bölke, 10.12.2014 10:46, 5 Antworten
Hallo, liebe Community, bin hier ganz neu,also entschuldigt,wenn ich hier falsch bin. Mein Prob...
Externe USB-Festplatte mit Ext4 formatiert, USB-Stick wird nicht mehr eingebunden
Wimpy *, 02.12.2014 16:31, 0 Antworten
Hallo, ich habe die externe USB-FP, die nur für Daten-Backup benutzt wird, mit dem YaST-Partition...
Steuern mit Linux
Siegfried Markner, 01.12.2014 11:56, 2 Antworten
Welches Linux eignet sich am besten für Steuerungen.
Nach Ubdates alles weg ...
Maria Hänel, 15.11.2014 17:23, 5 Antworten
Ich brauche dringen eure Hilfe . Ich habe am wochenende ein paar Ubdates durch mein Notebook von...