c't 12/2018
S. 162
Praxis
Vim für Einsteiger
Aufmacherbild

Wer? Vim? Was?

Den Texteditor Vim verwenden

Es gibt auch heute noch gute Gründe, textbasierte Editoren wie Vim zu benutzen. Sie funktionieren problemlos in der Shell, sind schnell und effizient, wenn man sie zu bedienen weiß, und praktisch überall verfügbar, wo es nach Unix riecht. Mit ein paar Tipps kann man sich den Einstieg in den Editorklassiker Vim erleichtern.

Jeder, der schon einmal eine Linux-Distribution verwendet hat, kennt ihn: Vim. Ein seltsam wirkender Texteditor, der sich nicht mit der Maus, sondern nur mit Tastendrücken bedienen lässt – und aus dem es scheinbar kein Entkommen gibt. Allerdings ist Vim oft der Standardeditor zum Bearbeiten von Konfigurationsdateien. Die Basics sollte also jeder Unix- oder Linux-Benutzer drauf haben. Wenn Sie außerdem bereit sind, die steile Lernkurve zum Vim-Expertenstatus auf sich zu nehmen, erhalten Sie ein vielseitiges und präzises Werkzeug, das auch unter Windows und macOS seine Daseinsberechtigung hat. Vim ist, trotz der altbackenen Anmutung, ein moderner Editor, der nicht nur Standards wie Syntaxhervorhebung beherrscht, sondern auch geskriptet werden kann und mit Plug-ins typische IDE-Funktionen wie automatische Code-Vervollständigung lernt.

Zum Kasten: Erste Hilfe …

Vim ist eigentlich ein Klon des Ur-Unix-Editors Vi, der vieles besser machen soll als das Original. Vim ist eine Verkürzung von Vi IMproved. Den ursprünglichen Vi trifft man aber nur noch selten an, denn es ist völlig egal, ob Sie bei einer modernen Linux-Distribution oder macOS vi oder vim eintippen. Sie bekommen immer Vim vorgesetzt, nur ist er meist durch Konfigurationsvorgaben etwas beschnitten, um dem echten Vi ähnlicher zu sein. Da Vim von der Bedienung her quasi identisch, flexibler und mit mehr Funktionen ausgestattet ist, bekommt er immer den Vorzug.

Das noch relativ junge NeoVim-Projekt hat sich auf die Fahne geschrieben, dem klassischen Vim Konkurrenz zu machen. Das läuft bislang relativ gut, denn NeoVim hat, dank etwas modernerer Architektur, anderer Voreinstellungen und zahlreicher grafischen Oberflächen viele Freunde gefunden. Für den Einsteiger ist es zunächst unerheblich, ob man Vim oder NeoVim den Vorzug gibt.

Klein anfangen

Für den Einstieg in Vim sollte man ein simples Programmier- oder Schreibprojekt wählen. Etwas, bei dem man nicht viel kaputt machen kann und außer dem Umgang mit Vim nicht viel lernen muss. Basteln Sie also lieber in Ihrer Lieblingsprogrammiersprache eine Kleinigkeit zusammen, als dass Sie mit dem noch unbekannten Begleiter Vim gleich auf ein neues Software-Framework losgehen. Das senkt den Frustrationsfaktor ungemein.

Das Fenster von Gvim begrüßt den Anwender freundlich, wirkt aber dennoch erstmal befremdlich.

Wer bislang auf grafische Editoren und die Maus zurückgegriffen hat, muss sich nicht ganz ins kalte Wasser stürzen, denn Vim gibt es auch in einer grafischen Variante namens Gvim (für macOS empfehlen die Gvim-Entwickler das Projekt MacVim). Die bietet ein gewöhnliches grafisches Menü, um allerhand Einstellungen vorzunehmen, ohne dass man lange rumsuchen muss. Die meisten Menüeinträge verraten zusätzlich noch die Tastenkombination oder das Kommando, das den gewünschten Vorgang auslöst. Das ist leider bei MacVim nicht der Fall.

Haben Sie das Gvim-Fenster das erste Mal geöffnet, begrüßt Sie ein weißer Hintergrund mit einem Hinweis auf Programmautor und -version. An der linken Seite finden Sie eine Reihe von Tilden (~). Diese symbolisieren Zeilen ohne Inhalt, da die Datei (von Vim Puffer genannt) keinerlei Inhalt hat, bis auf einen Zeilenumbruch in der ersten Zeile. Ganz unten ist noch eine weitere leere Zeile im Fenster. In dieser gibt Vim Status-, Fehlermeldungen und Informationen über den aktuellen Modus aus.

Modi operandi

Direkt nach dem Start ist Vim im Normalmodus (Normal Mode). Dieser Modus ist der Grundzustand von Vim. Durch einen Druck auf Escape kommt man jederzeit wieder dort hin. Die erste Begegnung mit Vim ist genau wegen dieses Modus verstörend. Es erscheint beim Tippen nicht die erwartete Eingabe, sondern nur Bruchstücke und wirre Meldungen. Das ist kein Wunder, da Vim im Normalmodus alle Tastatureingaben als Befehle interpretiert. Ein paar Zeichen der ersten Eingabe erscheinen aber dennoch immer im Fenster, denn spätestens mit dem Druck auf das i haben Sie in den Einfügemodus (Insert Mode) gewechselt. Einen ähnlichen Effekt haben aber auch a, s oder o. Den darauffolgenden Buchstaben interpretiert Vim dann als Texteingabe. Tippen Sie zum Beispiel das Wort „Plexiglas“ ein, bleibt davon nur noch das „glas“ übrig. Am unteren Rand sollte nun „EINFÜGEN“ oder „INSERT“ stehen.

Zur Navigation innerhalb von Texten können Sie die Pfeiltasten verwenden oder in Gvim auch die Maus. Vim-Profis verwenden stattdessen aber auch die Tasten h (links), j (unten), k (oben) und l (rechts) zur Steuerung des Cursors. Die seltsame Tastenauswahl ist einem alten Tastatur-Layout geschuldet. Der Vorteil der Buchstaben ist, dass man die Hand nicht so weit vom Tastenfeld bewegen muss, dafür funktionieren Sie nicht im Einfügemodus.

Die Tasten des Blocks über den Pfeiltasten (Einfügen bis „Bild nach unten“) funktionieren im Normal- sowie im Einfügemodus wie in anderen Editoren. Mit deren Vor- und Nachteilen verhält es sich aber genauso wie mit den Pfeiltasten. Man sollte wissen, dass man mit dem Betätigen der Einfügen-Taste im Einfügemodus im Gegensatz zum i das Überschreiben aktiviert und wieder deaktiviert – zu erkennen am „ERSETZEN“ am unteren Rand.

Um den Eingabemodus wieder zu verlassen, drücken Sie einmal die Escape-Taste. Das „EINFÜGEN“ am unteren Bildschirmrand verschwindet dann. Vim ist wieder im Normalmodus, der ist daran zu erkennen, dass in der Statuszeile am unteren linken Bildschirmrand kein Hinweis auf den aktuellen Modus in Form eines großgeschriebenen Wortes oder eines Sonderzeichens zu sehen ist. In diesem Modus führt man die formalen Bearbeitungsschritte am Inhalt durch, wie Löschen, Verschieben und die Suche nach Textstellen. Praktisch jede Taste hat hier eine spezifische Funktion. Als Gedächtnisstütze kann man eines der zahlreichen „Vim Cheat Sheets“ verwenden, die man im Netz findet. Ein paar sehenswerte haben wir auf ct.de/y9xt verlinkt.

Im Folgenden zeigen wir den Umgang mit den Kommandos für die häufigsten Tätigkeiten. Möchten Sie Änderungen am Text rückgängig machen, drücken Sie im Normalmodus u wie „Undo“. Um Änderungen wiederherzustellen, drücken Sie STRG+R („Redo“). Dank Undo-Bäumen kann man mit Vim komplex verzweigte Veränderungen innerhalb von Dateien durchführen und wieder rückgängig machen. Dies ist übrigens ein Unterschied zu Vi, der keine Undo-Bäume beherrscht. Mehr Informationen dazu finden Sie ebenfalls über den c’t-Link.

Vom Suchen und Finden

Sie finden in Gvim und MacVim zwar Suchen- und Ersetzen-Dialoge, aber es ist durchaus hilfreich zu wissen, wie man Vims Suchfunktion bedient. Die Suche von Text startet ein Slash (/) im Normalmodus gefolgt vom gesuchten Text. Befehl und Suchbegriff erscheinen in der Statuszeile nebst eines blinkenden Cursors. Geben Sie dort /foo ein, sucht Vim nach der Buchstabenfolge foo. Ist der Suchbegriff komplett, drücken Sie die Eingabetaste. Zum nächsten Suchergebnis kommen Sie mittels n; ein großes N geht zum vorherigen Ergebnis. Vim beachtet beim Suchen Groß- und Kleinschreibung. Um das auszuschalten, stellen Sie dem Suchbegriff ein \c voran, also /\cfoo. Dann bekommen Sie auch alle Vorkommnisse von Foo, fOo und FOO angezeigt.

Beim Suchen und Ersetzen von Text kommt ein neuer Modus ins Spiel, der Kommandozeilenmodus. Dieser wird aus dem Normalmodus mittels des Doppelpunkts aktiviert. Er bietet nicht nur Zugriff auf zahlreiche komplexe Bearbeitungsfunktionen, sondern dient auch zur Konfiguration von Vim. Wenn Sie den Doppelpunkt eingetippt haben, erscheint der in der Statuszeile mit einem Eingabe-Prompt. Das Ersetzen geschieht über das Schlüsselwort s wie „Substitute“. Hier ein Beispiel:

:%s/foo/bar/g

Der Buchstabe s weist Vim an, in der gesamten Datei nach dem Text foo zu suchen und alle Vorkommnisse durch bar zu ersetzen. Der Slash trennt die Parameter voneinander. Das einleitende %-Symbol weist Vim an, in allen Zeilen der Datei zu suchen; das abschließende g, dass Vim alle Vorkommnisse innerhalb einer Zeile und nicht nur das erste ersetzt. Falls Sie nicht jedes foo zu bar machen wollen, stellen Sie dem g ein c hinten an, dann fragt Vim vor dem Ersetzen noch einmal nach. Bejahen oder Verneinen Sie die einzelnen Ersetzungen mit y oder n. Wollen Sie die Suche abbrechen, drücken Sie einfach q oder Escape.

Sehen statt tippen

Das Ausschneiden und Einfügen gelingt am einfachsten mit dem visuellen Modus (Visual Mode) – einen Modus, den der originale Vi nicht kannte. Den aktiviert man mit der Taste v. In der Statuszeile erscheint nun „VISUELL“ und beim Bewegen des Cursors wird der Text farbig hinterlegt. Wer sich an die Markierung des Textes per Maus in anderen Editoren erinnert fühlt, liegt richtig, denn genau das geschieht hier. Das Markieren mittels der Maus ist ebenfalls möglich. Sobald Sie klicken und den Text mit gehaltener Maustaste überfahren, wechselt Vim in den visuellen Modus und markiert die Auswahl.

Um den markierten Text zu kopieren, drücken Sie das y (für „yank“ = herausziehen). Die Markierung verschwindet wieder und Vim hat den Text in seine Zwischenablage kopiert, zudem landen Sie wieder im Normalmodus. Bewegen Sie den Cursor anschließend an die Stelle, an der Sie den Text einfügen wollen. Beachten Sie dabei, dass Vim die Einfügungen hinter dem Cursor vornimmt. Wenn man nicht darauf achtet, trennt man öfter mal Wörter auf, die man nicht trennen wollte. Die Taste für das Einfügen nach dem Cursor ist p wie „paste“. Das große P fügt den Text vor dem Cursor ein.

Sie können markierten Text auch löschen, indem Sie d drücken. Das Löschen entspricht aber eher einem Ausschneiden, denn auch dabei landet die Auswahl in der Zwischenablage. Vor dem Einfügen von großen Textmengen aus anderen Anwendungen sollte man im Kommandozeilenmodus set paste eingeben, um Hilfsfunktionen wie das automatische Einrücken von Zeilen zu deaktivieren. set nopaste schaltet die Option wieder ab.

Apropos Zwischenablage: Vim teilt seine Zwischenablage nicht mit dem restlichen System. Der Editor verwendet eigene sogenannte Zwischenablageregister, mit deren Hilfe man verschiedene Inhalte jonglieren kann. Um Inhalte aus der Systemzwischenablage einzufügen, stellen Sie den zuvor gelernten Befehlen "+ voran. Zum Einfügen tippen Sie dann "+p ein beziehungsweise "+y zum Kopieren dorthin. Ausschneiden geht mittels "+x. Achten Sie darauf, dass Sie die Befehle im visuellen respektive Normalmodus eintippen. Ein Befehl wie "+p gliedert sich wie folgt: Das Zollzeichen kündigt Vim an, dass etwas mit dem Inhalt des nachfolgenden Zwischenablageregister (+) geschehen soll. Vim hat zahlreiche solcher Zwischenablageregister, in denen man Text für die spätere Verwendung „aufbewahren“ kann. Das Register + bezeichnet die Systemzwischenablage. Als Letztes kommt mit dem p der eigentliche Befehl, also das Einfügen von Text aus dem Register. Unter Linux steht auch noch das Register * zur Verfügung und repräsentiert den in einer Anwendung ausgewählten Text. Das ist das Standardregister für das Kopieren und Einfügen von Text in Vim unter Linux.

Fertig machen

Haben Sie Ihre Datei fertig bearbeitet, sollten Sie sie speichern. Wenn Sie mit einem leeren Puffer (also Dokument) begonnen haben, wechseln Sie mit : in den Kommandozeilenmodus. Anschließend tippen Sie den Befehl sav gefolgt von einem Leerzeichen und dem Dateinamen (mit oder ohne Pfadangabe) ein. Beenden Sie das Kommando mit der Eingabetaste. Wurde eine bestehende Datei von Ihnen bearbeitet, wechseln Sie ebenfalls in den Kommandozeilenmodus und tippen w gefolgt von der Eingabetaste. Vim meldet das Ergebnis des Speichervorgangs in der Statuszeile. Wollen Sie eine neue Datei bearbeiten, geben Sie das Kommando enew ein. Dann erstellt Vim einen neuen leeren Puffer. Mit q können Sie Vim verlassen. Das Speichern und Schließen kann auch auf wq verkürzt werden.

Modus vivendi

Vim wäre ein ziemlich lausiges Unix-Programm, wenn man es nicht bis zum Exzess konfigurieren könnte. Dafür ist die Konfigurationsdatei „.vimrc“ zuständig. Unter Linux und macOS liegt Sie im Benutzerverzeichnis. Für Windows-Betriebssysteme ist der Ort und Dateiname unterschiedlich. Der einfachste Weg ist, sich mit :echo $HOME den Wert der Variable $HOME ausgeben zu lassen. Dort sollte man nach der Datei „_vimrc“ oder „_gvimrc“ Ausschau halten. Man beachte, dass (G)vim statt des einleitenden Punkts unter Windows ein Unterstrich verwendet.

Der noch recht junge Vim-Konkurrent NeoVim besticht mit schicken Interfaces (hier Oni) und moderner Software-Architektur.

Die Syntax der Konfigurationsdatei ist analog zu den Befehlen des Kommandozeilenmodus, jedoch spart man sich die Doppelpunkte. Beim Start arbeitet Vim die Datei ab und führt jeden darin befindlichen Befehl aus. Komplexere Konfigurationsdateien muten nicht ohne Grund wie Programmcode an, denn eigentlich operiert man hier mit der Skriptsprache Vimscript. In die Konfigurationsdatei kommen auch Einstellungen für die zahlreichen und sehr mächtigen Vim-Plug-ins.

Mit ein paar Plug-ins nimmt Vim es mit jeder IDE auf.

Für den Anfang reichen ein paar wenige Konfigurationsoptionen, um Vim etwas anwenderfreundlicher zu machen. In Foren und Blogs findet man oft zahlreiche weitere Optionen, Tipps und Plug-ins, um mehr aus Vim herauszuholen. Die sollte man mit Vorsicht genießen, denn oft sind darin zueinander inkompatible Optionen aktiviert. Wenn Sie sich unsicher sind, ob eine Option wirklich sinnvoll ist, konsultieren Sie die Vim-Dokumentation. Um aus Vim heraus darauf zuzugreifen, geben Sie das Kommando help ein oder Sie lesen sie auf vim.org im Browser.

01  set nocompatible
02  syntax on
03  filetype indent plugin on
04  set number
05  set hlsearch
06  set mouse=a
07  set ruler
Eine Handvoll Konfigurationsoptionen machen Vim gleich schon viel nützlicher.

Im nebenstehenden Listing haben wir ein paar sinnvolle Optionen zusammengestellt, die für die meisten Anwendungsfälle hilfreich sind. Einige davon sind vermutlich schon in der globalen Vim-Konfiguration Ihres Betriebssystems festgelegt. Die Option set nocompatible schaltet den Vi-Kompatibilitätsmodus ab und aktiviert unter anderem die Anzeige des Modus in der Statusleiste. Ohne diese ist Vim kaum zu ertragen. Auch ein Klassiker ist syntax on, welches das Syntax-Highlighting einschaltet. Ebenfalls essenziell für Programmierer ist die dritte Zeile im Kasten, die dafür sorgt, dass Vim versucht, das Dateiformat zu erkennen, und zudem bei Bedarf passende Einrückungen vornimmt. Zeilennummern sollte man ebenfalls einschalten (set number). Auch wenn diese zu Anfang überflüssig erscheinen, werden Sie mit Ihren wachsenden Vim-Fertigkeiten immer hilfreicher. Mit der Option in Zeile 5 wird das Highlighting von Suchergebnissen aktiviert, damit man leichter sieht, was man sucht. set mouse=a schaltet die Mausunterstützung in allen Modi ein. Das letzte Kommando blendet die aktuelle Cursorposition rechts unten ein. Möchten Sie einzelne Optionen deaktivieren, können Sie die mittels Zollzeichen auskommentieren oder natürlich löschen.

Vim komplett zu erklären, würde vermutlich eine ganze c’t füllen. Es lohnt sich, bei Problemen und Fragen auch im Vim Tips Wiki oder auf Stack Exchange nach Tipps und Vorschlägen zu suchen. Vims Dokumentation ist sehr gut, aber auch nicht immer die eingängigste und attraktivste Anlaufstelle bei Fragen. Die Grundzüge haben Sie aber jetzt gelernt und sollten in der Lage sein, die ersten und viele weitere Schritte zu tun. :wq (mls@ct.de)