# Vim

Vim (Vi IMproved) ist eine Weiterentwicklung des Texteditors vi. Das freie Open-Source-Programm wurde 1991 von Bram Moolenaar veröffentlicht und seitdem weiterentwickelt. Wie vi zeichnet sich Vim durch seine verschiedenen Betriebs-Modi aus, während viele andere gebräuchliche Editoren nur einen kombinierten Modus für Eingabe und Befehle kennen, in dem Befehle über Tastenkombinationen und grafische Oberflächen ausgeführt werden.

## Vi IMproved

Vim funktioniert wie der vi-Editor im Textmodus auf jedem Terminal. Die Bedienung erfolgt dann üblicherweise über die Tastatur, eine Maus wird zwar auf vielen Terminals unterstützt, ihre Verwendung ist aber limitiert. Das ist zum einen historisch bedingt durch die zu Ur-vi-Zeiten Mitte der 1970er Jahre üblichen Bildschirmterminals mit einer langsamen, seriellen Verbindung zum Hauptrechner, zum anderen schätzen erfahrene Benutzer die Effizienzvorteile der mächtigen Tastatursteuerung („vi is at your fingertips“). Aus der Limitierung damaliger Terminals resultiert sein modales Konzept. Vim ist nahezu vollständig abwärtskompatibel zu vi, hat jedoch eine Vielzahl an Weiterentwicklungen und eine moderne grafische Benutzerschnittstelle mit Menüs (GVim) sowie eine vereinfachte Version für Einsteiger (eVim).
Vim kann auf vielen Betriebssystemen genutzt werden und ist auf fast jedem GNU/Linux-Rechner zu finden. In der Regel wird beim Aufruf vi unter Linux Vim über eine Verknüpfung oder einen Alias aufgerufen. Welcher vi-Ableger gestartet wurde, lässt sich im Kommando-Modus über den Befehl :version überprüfen.

## Geschichte
### Historischer Exkurs zu ed/vi

Anfang der 1970er Jahre war ed von Ken Thompson der Unix-Standardeditor. Er arbeitete zeilenorientiert, d. h. die Anzeige des Textes erfolgte nicht wie heute gewohnt mehrzeilig, sondern sie musste über explizite Ausgabebefehle angewiesen werden (da die Ausgabe häufig nicht auf einem Bildschirm, sondern einem Fernschreiber erfolgte). Um mit den begrenzten Möglichkeiten einer Zeile arbeiten zu können, war es notwendig, einen Editier- und einen Kommandomodus zu verwenden (modaler Editor).
Die ed-Kommandos bestanden normalerweise aus einem Buchstaben, dem ein Zeilenbereich vorangestellt werden konnte. Als Bill Joy ab 1976 vi entwickelte, stellte dieser – als visueller Editor – einen wesentlichen Fortschritt gegenüber ed dar, da er Änderungen am editierten Text im Kontext umgebender Zeilen darstellte. Dabei erbte vi das modale Konzept, die Zeilenorientierung und die Kommandos. Diese ed-Kommandos finden sich in allen aktuellen vi-kompatiblen Editoren, wie auch in Vim, wieder.

### Entwicklung des Vim

Bram Moolenaar wollte Ende der 1980er Jahre gerne auf einem Amiga-Computer den Editor benutzen, welchen er von Unix her kannte und gewohnt war. Allerdings gab es damals keinen vi für den Amiga. So entwickelte er auf Basis des vi-Klones Stevie 1988 die Version 1.0 von Vim. Dieser hieß zu der Zeit noch vi IMitation, da das Hauptziel zunächst darin bestand, die Funktionalität von vi nachzubilden. Am 2. November 1991 wurde Vim mit Version 1.14 erstmals auf der sogenannten Fish disk #591, einer Sammlung freier Software für den Amiga, veröffentlicht. Die Version 1.22 wurde 1992 nach Unix und PC-kompatibles DOS (wie MS-DOS) portiert. Zu dieser Zeit wurde die Langform der Abkürzung in Vi IMproved geändert. Die Großbuchstaben sollen dabei das Kürzel Vim erklären: VIM ist Vi IMproved (improved, engl. für verbessert).
In den folgenden Jahren erfuhr Vim umfassende Verbesserungen. Ein Meilenstein war die Einführung der mehrfachen Editier-Fenster in der Version 3.0 (1994) (Bild 1). Mit vi konnte man zwar auch mehrere Dateien mit einem Aufruf editieren, aber man konnte immer nur eine Datei davon sehen und nicht mehrere gleichzeitig. Mit der Version 4.0, die 1996 erschien, war erstmals auch eine grafische Benutzeroberfläche verfügbar, an der Robert Webb großen Anteil hatte. Seit 1998 beherrscht Vim (in der Version 5.0) Syntax-Einfärbung (Bild 2a).
Als bisher letzter großer Schritt wurden 2001 mit der Version 6.0 Code-Faltung, Plug-ins, Unterstützung für Mehrsprachigkeit und vertikal aufgeteilte Fenster eingeführt (Bilder 2 bis 5). Die Version 6.4 (erschienen im Oktober 2005) behebt viele Fehler, fügt aber keine neuen Funktionen hinzu. Dies war Version 7.0 im Mai 2006 vorbehalten; sie verfügt über eine integrierte Rechtschreibprüfung und unterstützt Reiter (Tabs). Die Version 7.3 erschien im August 2010. Sie enthielt als größere Neuerungen (neben allen Patches, die sich ab Version 7.2 angesammelt haben) komplette Undo-Verzweigungen (mehrstufiges Undo beherrscht Vim seit langem), Blowfish-Verschlüsselung, Lua- und Python-3-Skriptfähigkeit sowie die Möglichkeit, Texte zu verbergen. Im August 2013 wurde die Version 7.4 veröffentlicht. Neu in dieser Version ist ein verbesserter RegEx-Parser. Vim 8, erschien am 12. September 2016. Sie enthält unter anderem neue Features wie die Unterstützung von JSON. Die bislang letzte Version ist Vim 9.

#### Versionierung

Während zwischen kleinen Versionssprüngen (zum Beispiel von Version 7.1 auf Version 7.2) oft mehrere Monate vergehen, wird Vim dennoch kontinuierlich entwickelt. Die Vim-Benutzergemeinschaft steuert Fehlerbehebungen oder kleine Verbesserungen in Form von Patches bei, die dann mehrmals im Monat in den Vim-Code einfließen.

## Funktionalität
### Überblick: Ausgewählte Eigenschaften und vi-Erweiterungen

* integrierte Rechtschreibprüfung
* Wortvervollständigung mit Dropdown-Menü
* Anordnung mehrerer Dateien in Tabs
* mehrfache Puffer- und Split-Screens, mehrere Editier-Fenster, auch vertikal
* Text-Formatierungen und Visual Mode, zum Beispiel mit Blockoperationen
* unbegrenztes Undo (Rückgängig machen) und Redo (Wiederherstellen) auch, wenn Vim zwischendurch beendet wurde
* umfangreiche Online-Hilfe
* Syntaxhervorhebung abhängig von der Programmiersprache für etwa 500 Sprachen und Dateitypen
* eigene Skriptsprache zur Funktions-Erweiterung (analog zu Plug-ins)
* Komplettierung von Kommandos, Wörtern oder Dateinamen
* Editieren von Archiven (tar, gz/tgz, zip)
* Auto-Kommandos (z. B. Dekompression von gezippten Dateien vor dem Editieren)
* Dateiformat-Erkennung und -Konvertierung
* History-Mechanismus für Kommandos, Suchbegriffe usw.
* Aufzeichnung und Ausführung von Makros
* Speichern und Laden von Sitzungseinstellungen
* optionale Integration von Perl, Python 2 und 3, Lua, Ruby und Tcl
* Verschlüsselung mit dem Blowfish-Algorithmus
* Unterstützung von bidirektionalem Text (u. a. Arabisch)
* automatisches und manuelles Zusammenfalten von Textteilen zur besseren Übersicht
* einfaches Ansprechen von Debuggern, Make-Programmen und Toolchains aus dem Editor heraus
* Interprozesskommunikation und Job-Kontrolle über Sockets und Pipes („Channels“)
* Terminal-Integration
Die Leistungsfähigkeit von Vim soll an einigen markanten vi-Verbesserungen dargestellt werden.

### Vim-Hilfefunktion

Vim besitzt eine umfassende Dokumentation. Der Nutzer wird bei der Suche nach Lösungen zu seinem Problem durch verschiedene Funktionen unterstützt. Durch Syntaxhervorhebung und eine eigene Hilfe-Syntax werden Schlüsselbegriffe farbig hervorgehoben (Bild 1). Im Bild sind diese Begriffe grün dargestellt und werden in der Kommandozeilenversion in zwei senkrechte Striche eingeschlossen. Über Tastenkürzel kann zwischen diesen Schlüsselwörtern vorwärts und rückwärts navigiert werden, ähnlich wie in einem Webbrowser. Das funktioniert in der grafischen Oberfläche bzw. bei entsprechender Unterstützung im Terminal auch mit der Maus per Doppelklick oder rechter Maustaste. Es gibt noch weitere Funktionen, die dem Nutzer das Suchen erleichtern. Eine wichtige davon ist das :helpgrep-Kommando. Dabei kann der Nutzer nach einem Begriff in der gesamten Hilfe suchen, die Treffer in einem weiteren Fenster darstellen lassen und von diesem dann zu den entsprechenden Stellen in der Hilfe wechseln (Bild 3). Die Trefferliste (Bild 3 unten) kann mit der Suchfunktion von Vim nach weiteren Begriffen durchsucht werden. Ergänzt wird die Hilfe durch eine HTML-Version dieser Hilfe im Internet, eine umfangreiche Sammlung der häufig gestellten Fragen (FAQ), Literatur auf Englisch und Deutsch und vieles mehr.

### Unterstützung für Programmierer

Vim ist ein Editor, der ebenso wie vi für Programmierer geschrieben wurde. Daher gibt es die Möglichkeit, über Plugins edit-compile-fix (deutsch „Editieren-Übersetzen-Fehlerkorrektur“)-Funktionalitäten nachzurüsten. Ähnlich wie bei einer integrierten Entwicklungsumgebung wird der Quelltext editiert und dann mittels eines Compilers direkt aus Vim heraus übersetzt. Falls beim Kompilieren Fehler aufgetreten sind, werden diese in einem weiteren Fenster angezeigt. Von der Fehlermeldung kann direkt ins andere Fenster zur fehlerhaften Stelle im Quelltext gesprungen und dieser korrigiert werden. Danach kann ein weiterer Zyklus gestartet und es können gegebenenfalls weitere Fehler korrigiert werden. Der Programmierer wird dabei durch die Funktionen Syntaxhervorhebung und Textfaltung unterstützt.

### Dateivergleich

Eine weitere häufige Aufgabenstellung besteht im Vergleichen von zwei Versionen einer Datei. Vim bietet hier eine Möglichkeit, die Unterschiede zweier Dateiversionen nebeneinander in zwei Fenstern darzustellen und die Differenzen farbig zu markieren (Bild 4), die typische Aufgabe eines Merge-Programms. Dabei werden geänderte und eingefügte Zeilen farbig hervorgehoben und Bereiche, die in beiden Versionen gleich sind, durch Text-Faltung ausgeblendet. Im Beispiel sind geänderte Stellen rot gekennzeichnet und eingefügte Zeilen blau bzw. fehlende Zeilen hellblau markiert. Gefaltete Zeilen sind hier grau unterlegt mit Angabe der Zeilenanzahl, die unverändert sind.

### Vim-Skriptsprache

Vim ist über die Skriptsprache Vimscript erweiter- und programmierbar. Damit lassen sich komplexe Vorgänge automatisieren, die für ein Makro zu kompliziert wären. Ein Beispiel für ein Vim-Skript ist die Vim-Start-Datei .vimrc unter Unix und GNU/Linux oder _vimrc unter Windows, DOS und OS/2, in der hauptsächlich Konfigurations-Einstellungen vorgenommen werden. Diese wird beim Start von Vim automatisch ausgeführt. In der Vim-Skriptsprache sind alle Kommandozeilen-Befehle verfügbar und über das Kommando ':normal' auch alle Normalmodus-Befehle. Es gibt mehrere Datentypen: Fließkommazahlen, ganze Zahlen, Zeichenketten, Listen und assoziative Arrays. Boolesche Werte werden über ganze Zahlen realisiert, wobei eine Null als falsch gewertet wird und alle anderen Zahlen als wahr. Es sind die wichtigsten Operatoren für Vergleiche, logische Verknüpfungen und Grundrechenarten vorhanden. Als Kontrollstrukturen stehen die Entscheidung 'if – then – elseif – else – endif' und die while-Schleife zur Verfügung. Der Nutzer kann eigene Funktionen definieren und über einhundert vordefinierte Funktionen verwenden, die im Wesentlichen den Unix-Systemaufrufen entsprechen. Die Skripte können mit einem Debug-Modus getestet werden. Wer plant, ein Vim-Skript zu schreiben, sollte vorher auf der Vim-Skript-Seite nachsehen, ob es nicht schon ein Skript mit der entsprechenden Funktionalität gibt. Obwohl es dort viele Skripte zur Unterstützung von Programmieraufgaben gibt, lohnt sich auch für Nicht-Programmierer ein Blick auf diese Seite. Nicht zuletzt kann jeder Nutzer, der ein Problem von allgemeinem Interesse gut gelöst hat, sein Skript anderen zur Verfügung stellen. Als Beispiel für ein Vim-Skript soll das Kalender-Skript dienen (Bild 5).

### Einsteigerfreundliche Modifikationen

Im Laufe der Jahre wurden für Vim einige Modifikationen entwickelt, welche die Benutzung dieses Editors für ungeübte Benutzer einfacher machen sollen. Die bekanntesten sind der in Vim integrierte easy-Vim-Modus und das GUI GVim.

#### GVim

Mit GVim steht Vim unter den meisten aktuellen Betriebssystemen eine grafische Oberfläche zur Verfügung, die viele Befehle des Programms ähnlich den heute gängigen grafischen Texteditoren auch über Menüeinträge und eine Werkzeugleiste zugänglich macht. Über seine Konfigurationsdateien lässt sich GVim, ähnlich Vim, umfassend konfigurieren, auch das Einbinden von Vim-Skripten ist hier möglich. Im Gegensatz zum Vim lassen sich jedoch mehr Farben und Schriftarten für die Darstellung von Textdateien einstellen sowie fertige Farbschemata erstellen und nutzen.

#### eVim

eVim (kurz für easy Vim) ist ein einfacher Modus, in dem Vim betrieben werden kann. Wird Vim in diesem Modus gestartet, so ist sofort der Einfüge-Modus aktiv; Befehle können nur über einen speziellen Befehlsmodus eingegeben werden. Auf diese Weise kann Vim fast wie ein nicht modaler Editor verwendet werden.

#### Cream

Mit der GVim-Erweiterung Cream ist es schließlich möglich, Vim vollständig auf eine Weise zu nutzen, die bisherigen Nutzern einfacherer Editoren (wie gedit oder dem Microsoft Notepad) vertraut ist. Es handelt sich um eine Reihe von Skripten zur weiteren Vereinfachung von GVim. So können praktisch alle wichtigen Kommandos mit der Maus über Menüs erreicht werden, und die Betriebs-Modi entfallen in der Defaultausführung gänzlich (können aber nach Belieben hinzugeschaltet werden). Cream ist weder in Vim noch in GVim integriert, sondern setzt auf beiden auf, ohne sie dabei zu ersetzen, d. h. auch die gleichzeitige Verwendung von Cream und GVim ist problemlos möglich.

## Modi

Vim ist ein modaler Editor. Dies bedeutet, dass man in unterschiedlichen Modi arbeitet, was Einsteigern oft Probleme bereitet, andererseits aber eine sehr große Zahl von Tastenkürzeln erlaubt, da sich diese an einzelne Modi binden und daher auch mehrfach belegen lassen. Die sechs Grundmodi sollen hier nur kurz erklärt werden. Zu den ersten drei Modi siehe auch vi: Arbeitsmodi. Es gibt noch fünf weitere Modi, auf die hier aber der Einfachheit halber nicht eingegangen werden soll. Diese sind Varianten der Grundmodi.

### Normalmodus

Vim startet im Normalmodus, oft auch als Kommando- oder Befehlsmodus bezeichnet. Hier kann man über Tastenkürzel zum Beispiel Zeilen kopieren und verschieben oder Text formatieren. Dies ist der zentrale Modus, von dem in alle anderen Modi gewechselt wird. Durch das zweifache Drücken der Esc-Taste gelangt man immer in den Normalmodus zurück. Falls man sich nicht sicher ist, ob man sich bereits im Normalmodus befindet, kann man jederzeit die Esc-Taste drücken. War man bereits im Normalmodus, wird dies im Normalfall, je nach Vim-Konfiguration und Terminal-Einstellungen, mit einem Piepton signalisiert.

### Einfügemodus

Im Einfügemodus verändern Tastatureingaben den editierten Text, so wie man es von anderen Editoren kennt. Man erreicht diesen Modus vom Normalmodus aus zum Beispiel über i (für engl. insert = einfügen). Es gibt eine Vielzahl anderer Befehle, um in diesen Modus zu gelangen.
Im Einfügemodus werden (fast) alle Tastatureingaben in den editierten Text übernommen, und nur ganz wenige Tasten und -kombinationen haben eine andere Wirkung. Die Wichtigste ist die Esc-Taste zur Beendigung des Einfügemodus. Anschließend sind die Normalmodus-Befehle wieder verfügbar.
Nach einer alternativen, weniger verbreiteten Sichtweise ist das Einfügen von Text kein eigener Modus. Danach gibt es nur eine Reihe von Textänderungs-Befehlen, denen unmittelbar eine Eingabe folgt, die mit Esc abzuschließen ist. Ein Vorteil dieser Sichtweise ist, dass niemals Zweifel aufkommen, ob momentan der Normalmodus gewählt ist, und auch das Potenzial der Befehlswiederholung erschließt sich in dieser Sichtweise eher.

### Kommandozeilenmodus

Dieser Modus wird durch den einleitenden Doppelpunkt : erreicht. Hinter dem Doppelpunkt können dann komplexe Kommandos wie beispielsweise zum Suchen und Ersetzen eingegeben werden. Nach dem abschließenden Enter wird der Befehl ausgeführt und man befindet sich wieder im Normalmodus. Zu diesem Modus zählen des Weiteren die Kommandos / (Textmuster vorwärts suchen), ? (Textmuster rückwärts suchen) und das Filter-Kommando !, mit dem die UNIX-Kommandos (zum Beispiel sort) aufgerufen und auf den Text angewandt werden können.

### Visueller Modus

Dieser Modus ist eine Verbesserung von Vim und ähnelt dem Normalmodus. Mit der Maus oder bestimmten Tastenkürzeln wird ein Bereich zeilenweise, zeichenweise oder blockweise markiert und visuell hervorgehoben. Auf diesen Bereich können dann die Kommandos des Normal- sowie des Kommandozeilen-Modus angewandt werden. Die Arbeit mit diesem Modus ist einfacher als mit dem Normalmodus, da man genau sieht, welchen Bereich man gerade bearbeitet.

### Auswahlmodus

Dieser Modus ähnelt dem insbesondere von Windows-Programmen gewohnten GUI-Verhalten, wo man einen Bereich mit Maus oder Shift+Pfeiltasten markiert. Gibt man nun ein druckbares Zeichen ein, so wird der selektierte Bereich gelöscht und gleichzeitig in den Einfüge-Modus gewechselt. Das heißt, der selektierte Bereich wird mit dem eingegebenen Text überschrieben. Einfacher ist der Auswahlmodus über die Tastenkombination Umschalttaste-Pfeiltasten erreichbar. Allerdings muss Vim dazu entsprechend konfiguriert werden. Beendet wird dieser Modus wie üblich mit der Esc-Taste. Auch dieser Modus ist eine Vim-Erweiterung.

### Ex-Modus

Dieser Modus ähnelt dem Kommandozeilenmodus, mit dem Unterschied, dass nach Ausführung eines Kommandos nicht in den Normalmodus zurück gewechselt wird. Dieser Modus stammt aus dem UNIX-Zeileneditor ex (wie auch der traditionelle vi-Editor).

## Verfügbarkeit

Vim ist unter vielen Betriebssystemen lauffähig. Vor allem für unixoide Systeme existieren Portierungen, beispielsweise für die UNIX- bzw. BSD-Derivate AIX IRIX, HP-UX, macOS und iOS und freie BSD-Distributionen wie FreeBSD sowie für Linux-basierende Systeme einschließlich Android. Windows wurde seit 3.1 unterstützt, Vim 8 benötigt Windows XP und aufwärts. Auch für VMS, RISC OS, MorphOS, AmigaOS, Atari MiNT, klassisches Mac OS, Haiku und BeOS, NeXTStep, OS/2 sind (oder waren) Portierungen verfügbar.

## Auszeichnungen

Vim war Gewinner des Readers’ Choice Awards in der Kategorie Favorite Text Editor in den Jahren 2001 bis 2005 und erhielt 2000 den Slashdot Beanie Award als Best Open Source Text Editor sowie 1999 den Linuxworld Editors' Choice Award. Im Mai 2008 erhielt Bram Moolenaar für seine Arbeit an Vim den NLUUG Award, eine Auszeichnung der niederländischen Unix User Group.

## Lizenz

Vim steht unter einer GPL-kompatiblen Charityware-Lizenz (charity, engl.: Nächstenliebe). Das bedeutet, dass Vim frei verteilt werden darf, jedoch erbittet der Entwickler bei Gefallen eine Spende für Waisenkinder in Uganda durch das ICCF Holland.

## Entwickler und Community

Vim wurde bis zu seinem Tod im Jahr 2023 hauptsächlich von Bram Moolenaar entwickelt. Er wurde dabei schon zu Lebzeiten von einer Community von vielen Freiwilligen unterstützt, die die Entwicklung weiterführen. Die Hilfeseite der aktuellen Version nennt über 60 Mitwirkende namentlich. Es gibt eine große Anzahl ungenannter Helfer, die sich nicht nur um die Weiterentwicklung des Vim kümmern, sondern auch um die Portierung auf andere Betriebssysteme, um Programmtests und das Sammeln von Bugs, die Vervollständigung der Dokumentation und die Übersetzung der Hilfeseiten. Außerdem übernehmen sie die Beantwortung von Nutzeranfragen und die Einbindung des Vim in andere Projekte.
Andererseits entstand, wie auch im Fall von Emacs, über die Zeit eine ganze Reihe von Abspaltungen, häufig mit recht deutlichen Unterschieden in Motivation und Zielsetzung, Pflege und Weiterentwicklung wie auch dem Versuch, Kompatibilität zu Vim und seinen Erweiterungen zu wahren und sich gleichzeitig voneinander abzugrenzen. Größere Aufmerksamkeit in diesem Sinne erlangte Neovim, das sich in erster Linie als Weiterentwicklung und Refactoring-Projekt versteht und darum bemüht ist, den Editor durch Aussparen so verstandener Legacy-Teile, oder heute seltener benutzten Funktionen, zu verschlanken.