Der Texteditor Vim ist nicht nur unter Linux-Nutzern sehr populär. Auch andere Programme nutzen das gleiche Bedienkonzept – ein Grund, es genauer unter die Lupe zu nehmen.
Bei den aktuellen Linux-Distributionen heißt der Standard-Editor zumeist Vim [1]. Mit ihm erstellen und bearbeiten Sie nicht nur Textdateien jeglicher Art, sondern beispielsweise auch Programmcode, LaTeX-Dokumente, Stilvorlagen für Webseiten im CSS-Format und die Konfigurationsdateien des Betriebssystems und seiner Dienste.
Die Vielseitigkeit von Vi und Vim erschließt sich nicht auf den ersten Blick. Der große Vorteil: Das Bedienkonzept ist seit Jahrzehnten über die Systemgrenzen hinweg weitestgehend unverändert geblieben. Wer sich damit intensiv auseinandersetzt, dem steht einem nicht nur ein sehr mächtiges Werkzeug bereit, sondern der verfügt auch über das Know-how für die Bedienung einer ganzen Reihe von weiteren Unix-Programmen. Es lohnt sich daher für jeden Benutzer, mit den grundlegenden Konzepten und Tastenkombinationen dieses Texteditors vertraut zu sein. In den Zertifizierungen des Linux Professional Institutes (LPI,[2]) bilden die Texteditoren Vim und Emacs essenzielle Bestandteile.
Rückblick
Ein Blick in der Geschichte der Betriebssysteme zeigt, dass Unix-Systeme nunmehr seit Jahrzehnten Vi(m) als den Standard-Texteditor enthalten. Auf einem Unix-artigen System finden Sie entweder das Original Vi oder einen entsprechenden Nachfolger.
Der Ursprung der gesamten Vi-Familie liegt in den Siebziger Jahren des letzten Jahrhunderts. 1976 erweiterte Bill Joy den zeilenorientierten Editor Ex um einen visual mode, der schnell an Populärität gewann. Von nun an war ein Navigieren mittels eines Cursors im Text möglich, anstatt einzelne Zeilen erst anzufordern, um sie zu ändern. Bald startete das Programm grundsätzlich im Visual Mode und erhielt in der Folge den Namen Vi als Ableitung von der kürzesten, unzweideutigen Abkürzung für das Kommando visual im Editor Ex.
Daraus entwickelten sich eine Reihe von Erweiterungen und Portierungen auf andere Plattformen [3]. Zu den bekanntesten Varianten gehören Vim (“Vi Improved”) und Gvim. Beide Programme unterstützen das charakteristische Bedienkonzept über Modi und Tastenkombinationen. Vim bietet einen gegenüber Vi deutlich erweiterten Funktionsumfang. Gvim bereichert den Vim um eine graphische Benutzeroberfläche auf der Basis des Gimp Toolkits (Gtk).
Bei Vim handelt es sich um die weitaus populärste erweiterte Version von Vi, die aber nicht auf dessen Programmcode basiert. Der Autor Bram Moolenaar entwickelte seit 1991 einen dem Vi-ähnlichen Editor auf seinem Amiga, daher stand Vim zunächst auch für “Vi IMitation”. Schrittweise kamen weitere Funktionen hinzu (siehe Kasten “Vim: Erweiterungen”). 1992 war dann bis auf eine kleine Menge der komplette Umfang von Vi erreicht – und aus der “Imitation” entstand der verbesserte Vi alias Vim.
Die GUI-Variante Gvim (Abbildung 1) erlaubt es, das Programm über Menüs, Schalter und Scroll-Leisten zu bedienen. Es eignet sich sehr gut für Einsteiger, weil es sich nicht nur in der klassischen Weise per Tastatur, sondern zusätzlich auch mithilfe der Maus bedienen lässt. Zudem zeigen diemeisten Menüeinträge die passenden Tastenkürzel an. Das hilft, diese zu erlernen und später im Terminal zu verwenden.
Vim: Erweiterungen
Gegenüber dem Ur-Vi von Bill Joy weist der Vi Improved eine ganze Reihe von Erweiterungen und Verbesserungen auf. Dazu zählen:
- unbegrenztes Undo/Redo ([U] und [Strg]+[R])
- mehrere Fenster über- und nebeneinander
- Fenstergruppen in Reitern
- Syntax-Highlighting für mehr als 500 strukturierte Formate, darunter über 42 (Programmier-)Sprachen
- Vervollständigen von Namen, Wörtern oder Variablen im Quellcode
- Vergleichen und Kombinieren von Dateien
- erweiterte reguläre Ausdrücke
- Ein- und Ausklappen von Textblöcken (“Folding”)
- Öffnen von komprimierten Dateien
- eingebauter Textumbruch
- integrierte Hilfefunktion
- Historie für Suche und Cursor-Positionen
- Session-Datei zum Merken von Pufferlisten und Registerinhalten
- Arbeiten mit Makros (Aufnehmen und Abspielen von Tastensequenzen)
- Maus-Interaktion
Unter der Haube
Bei vielen aktuellen Linux-Systemen verweist lediglich ein symbolischer Link /usr/bin/vi auf ein bestimmtes Programm, das dann tatsächlich ausgeführt wird. In Debian-basierten Distributionen führt der Aufruf von vi zunächst zu einem gleichnamigen Symlink, der auf die Datei /etc/alternatives/vi zeigt. Diese verweist ihrerseits wiederum auf die Datei /usr/bin/vim.gtk. Wie das Kommando file verrät, handelt es sich dabei um das Programm, welches das System letztendlich ausführt (Abbildung 2).
Für Gvim sieht das Ganze recht ähnlich aus: Der symbolische Link nach /etc/alternatives/gvim zeigt ebenfalls auf /usr/bin/vim.gtk. Der Name legt bereits nahe, dass das Programm gegen die Bibliotheken des Gimp Toolkit (Gtk) gelinkt ist. Eine detailliertere Auskunft darüber, welche Module und Bibliotheken es integriert, gibt das Kommando vim --version in einem Terminal (Abbildung 3).
Vim gibt es für fast alle Betriebssysteme, insbesondere für alle Varianten von Linux, Unix, Mac OS und Windows (siehe Kasten “Vim-Klone”). Erlerntes Wissen nützt also auch auf diesen Systemen. Über Vim gibt es bereits eine ganze Reihe exzellenter Bücher und Beschreibungen, zum Beispiel Steve Ouallines “Vi IMproved – Vim” [4] (englisch) und Reinhard Wobsts “Vim gepackt” [5]. Hilfreich ist auch das “Vi/Vim Graphical Cheat Sheet” [6], das eine farbige Übersicht der einzelnen Tastenbelegungen im jeweiligen Modus bietet.
Vim-Klone
Während Sie Vim unter Windows erst nachrüsten müssen, bringen unixoide Systemen das Programm gleich mit, wenn auch zum Teil in anderen Varianten. Auf einem BSD 4.4 (FreeBSD und NetBSD) steht der Nvi [7] bereit. Dabei handelt es sich um eine fehlerbereinigte Neuimplementation des Editors, die sich an die Originalversion des Vi anlehnt. Slackware [8], Kate OS [9] und Minix [10] kommen mit Elvis [11] als Standard-Editor.
Mac OS X “Snow Leopard” installiert einen Vim 7.2, der dem Unix-Vim ähnelt. Für erweiterte Features steht Macvim [12] bereit: Er basiert auf der Vim-Version 7.3. Neben dem Darstellen der geöffneten Dateien in Reitern bietet er Mac-OS-typische Tastenkürzel, einen transparenten Hintergrund des Fensters, einen Vollbildmodus und die Möglichkeit, Multibyte-Sequenzen zu bearbeiten. Auch für ältere Mac-Versionen stehen Binär-Pakete bereit [13]. Diese basieren auf der Vim-Version 6 und erhalten keine Updates mehr.
Wessen Herz sowohl für Emacs als auch für Vim pocht, der sollte den Texteditor Vile [14] ausprobieren. Vile steht für “VI Like Emacs” und versucht, das beste aus beiden Welten in einem Programm zu vereinen. Das Paket für das Terminal heißt Vile, das für X11 Xvile (Abbildung 4).
Bedienkonzept
Vi war für den Einsatz am Textterminal konzipiert und weist daher absichtlich eine spartanische Benutzerschnittstelle auf. Grundlegend für das Verständnis des Editors ist das Konzept der mehreren Modi – Navigation und blockweises Ändern im Kommandomodus, Schreiben und Korrigieren einzelner Zeichen im Einfügemodus, Überschreiben im Ersetzungsmodus, Markieren im visuellen Modus und komplexe Kommandos im Kommandozeilenmodus. Diese Modi erlauben das Wiederverwenden der Tasten in unterschiedlichen Kontexten.
Verschiedene weiter Konzepte, wie man sie zum Teil auch aus grafischen Programmen kennt, vereinfachen die Textbearbeitung weiter. Diese Konzepte basieren auf Zeichenfolgen und Tastenkombinationen, mit denen Sie die einzelnen Aktionen auslösen und steuern (siehe Tabelle “Konzepte in Vim”).
Konzepte in Vim
| Konzept | Beschreibung, Beispiele |
|---|---|
| Kommandokombination | [D],[W] (lösche bis zum Wortende), [D],[$] (lösche bis zum Zeilenende), [D],[^] (lösche bis zum Zeilenanfang), [D],[1],[Umschalt+][G] (lösche vom Anfang des Dokuments bis zur aktuellen Cursor-Position) |
| Nummernpräfix vor Kommandos | [5],[D],[D] (lösche drei Zeilen) |
| Filtern | :%!sort (sortiere den Text über das externe UNIX-Kommando sort) |
| Suchen und Ersetzen | :%s/foo/bar/g (Ersetze foo durch bar im gesamten Text) |
| mehrere Zwischenablagen (ein allgemeiner plus 35 weitere, benannte Puffer) | [Y],[Y] (kopiert aktuelle Zeile in den allgemeinen Puffer), [Umschalt]+[2],[A],[Y],[Y] (kopiert aktuelle Zeile in den benannten Puffer “a”), [Umschalt]+[2],[A],[P] (fügt Inhalt des benannten Puffers “a” hinter aktueller Cursorposition ein) |
Nach dem Start befinden Sie sich im Kommandomodus, in dem Sie den Text über die Tastaturkommandos verändern. Hier arbeiten Sie mit Tastenkombinationen auf Zeichen oder Textblöcken: Zum Beispiel löscht [3],[D],[W] drei Worte ab der aktuellen Position des Cursors im Text, [5],[D],[D] dagegen fünf Zeilen, beginnend bei der aktuellen Zeile. [D],[Umschalt]+[G] tilgt alle Zeichen von der aktuellen Cursorposition bis zum Textende. Die Position der Schreibmarke ändern Sie über die Tasten [H] (links), [J] (unten), [K] (oben) und [L] (rechts). In Vim sind zusätzlich die Pfeil- und Bewegungstasten entsprechend belegt. Kombinieren Sie die Tasten mit den Ziffernpräfixen, springen Sie hier durch den Text. Mit [Umschalt]+[G] bewegt sich der Cursor zum letzten Zeichen in der Datei.
Über weitere Tasten schalten Sie in die anderen Modi um. Über [Esc] gelangen Sie stets in den Kommandomodus zurück. Den Einfügemodus erreichen Sie über [I] oder [A] (Einfügen vor oder nach der Cursorposition). Mittels [R] überschreiben Sie nur das Zeichen unter dem Cursor. Mit [Umschalt]+[R] wechseln Sie in den Überschreibmodus.
Mit [Umschalt]+[.] gelangen Sie aus dem Kommandomodus in den Kommandozeilenmodus für globale Aufgaben und öffnen in der letzten Zeile des Terminals eine Eingabezeile. Dort speichert zum Beispiel w Dateiname den aktuellen Text unter dem angegebenen Dateiname, wq Dateiname speichert und beendet den Editor in einem Zug. Mit q! beenden Sie den Editor ohne die Änderungen im Text zu speichern.
In den visuellen Modus gelangen Sie mittels [V] und [Umschalt]+[V]. Über die Bewegungstasten markieren Sie zunächst den Text, den Sie dann mit den oben benannten Kommandos bearbeiten.
Um das effektive Bedienen des Texteditors zu erlernen, hilft es, sich im Einfügemodus auf die Eingabe zu konzentrieren, um dann im Kommandomodus die Tippfehler auszubessern und Wörter, Sätze oder Absätze entsprechend zu verschieben.
Nächste Schritte
Mit diesen Informationen gelingen bereits die ersten Schritte in der Vim-Welt. Noch interessanter wird es, wenn Sie dieses Wissen in weiteren Programmen in ähnlicher Art und Weise anwenden können. Mit solchen Werkzeugen beschäftigen wir uns in einem Artikel in der nächsten Ausgabe von LinuxUser.
Danksagung
Lieben Dank für die Kommentare und Ergänzungen beim Zusammenstellen dieses Artikels gehen an Axel Beckert, Thomas Osterried, Werner Heuser, Sven Guckes, Julius Plenz und Wolfram Eifler.
Infos
[1] Vim-Homepage: http://http.//www.vim.org
[2] Linux Professional Institute (LPI): http://www.lpi.org
[3] Vi bei Wikipedia: http://en.wikipedia.org/wiki/Vi
[4] Vim-Buch: Steve Oualline, “Vi IMproved – Vim”, New Riders Publishing, Indianapolis, 2001, ISBN 0-7357-1001-5, ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf
[5] Vim-Referenz: Reinhard Wobst, “Vim ge-packt”, MITP Verlag Bonn 2004, ISBN 3-8266-1425-9, http://home.wtal.de/rwobst/vim/
[6] Vi/Vim-Cheat-Sheet: http://www.viemu.com/vi-vim-cheat-sheet.gif
[7] Nvi – 4.4-BSD-Reimplementierung von Vi: http://packages.debian.org/squeeze/nvi
[8] Slackware Linux: http://www.slackware.com/
[9] Kate OS: http://www.kateos.org/
[10] Minix 3: http://www.minix3.org/
[12] Mac Vim: http://code.google.com/p/macvim/
[13] Mac Vim (Again): http://macvim.org
[11] Elvis: http://packages.debian.org/squeeze/elvis
[14] Vile: http://packages.debian.org/squeeze/vile
[] Frank Hofmann hat Informatik an der Technischen Universität Chemnitz studiert. Derzeit arbeitet er in Berlin im Büro 2.0, einem Open-Source Experten-Netzwerk, als Dienstleister mit Spezialisierung auf Druck und Satz. Seit 2008 koordiniert er das Regionaltreffen der Linux User Groups aus der Region Berlin-Brandenburg.
[] Thomas Winde ist selbständiger Ausflugsfahrtenunternehmer und langjähriger Linuxanwender. Als Mitorganisator der Chemnitzer Linux-Tage zeichnet er für das Einsteigerforum verantwortlich. Auch auf verschiedenen anderen Linux-Veranstaltungen hält er Vorträge für Einsteiger.









