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

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

War doch klar...
(243 Punkte bei 15 Stimmen)
Re: War doch klar...
(179 Punkte bei 5 Stimmen)
Re: Skype für 64-Bit-Prozessor u. Suse 12.1
(161 Punkte bei 4 Stimmen)
Kubuntu verliert Finanzierung
(130 Punkte bei 4 Stimmen)
Offen fürs Geschäft
(80 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

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.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

2278 Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 03/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

Duden Korrektor unter 64-Bit
Duden Korrektor unter 64-Bit
Tim Schürmann, 06.02.2012 10:36, 0 Kommentare

Der Duden Korrektor bietet eine äußerst nützliche Rechtschreib- und Grammatikkorrektur für LibreOffice und bringt in der aktuellen Version 8 e...

Aktuelle Fragen

Ubuntu 11.10 Compiz 3D Cube flackern
Moritz Obenauer, 12.02.2012 12:25, 0 Antworten
Hallo! Ich habe Ubuntu 11.10 mit Unity und den Compiz 3D Cube ein gerichtet. Er funktioniert...
Suse 12.1 Bootvorgang bleibt seit Update stehen
Wimpy *, 12.02.2012 09:22, 2 Antworten
Seit Update auf Kernel 3.1.9-1.4-desktop i686 bleibt der Bootvorgang stehen. Es erscheint der gr...
N24 Stick (Huawei E173) und Ubuntu 11.04
Patrick Obenauer, 11.02.2012 11:54, 1 Antworten
Hallo zusammen! Ich benutze einen alten Laptop, der mit Ubuntu 11.04 flott und problemlos läuft....
Wie kann man beim Einsatz von Compiz die Fenster-Dekoration einstellen?
GoaSkin , 10.02.2012 20:12, 0 Antworten
Hallo, ich nutze Linux Mint mit dem Gnome-Derivat Mate. Da die Distribution Compiz nicht autom...
rndc reload zone - failed bad zone
Ludwig jun. B., 06.02.2012 16:08, 2 Antworten
Schönen guten Tag, ich habe folgendes Problem. Immer wenn ich folgendes Kommando ausführen bek...