Der Editor vi
CIP Index Up Right

vi

vi ist ein Display-orientierter Editor, der auf dem Zeilen-Editor ex aufbaut. Er ist der traditionelle UNIX-Editor und ist quasi als Standard zu betrachten; daher sollte jeder UNIX-Benutzer wenigstens die grundlegensten Kommandos kennen. Man startet ihn mit vi filename. Die Manuals zum vi sind auf den verschiedenen Rechnern von stark unterschiedlicher Qualität. Am umfassendsten sind sie wohl auf den SGI Maschinen.

Da der vi auf einem zeilenorientierten Editor aufbaut, sind alle Kommandos noch irgendwie zeilenorientiert, d.h. man sieht zwar immer eine Seite Text, kann aber nur in der aktuellen Zeile (die, in der der Cursor ist) Änderungen vornehmen. Wenn man einen Zeilenumbruch einfügt, kommt man mit Backspace nicht mehr in die vorherige zurück, da diese nicht mehr zur aktuellen gehört.

Die Modi

Das verwirrendste für den Anfänger sind wahrscheinlich die zwei verschiedenen Modi. Wenn man das Programm startet, befindet man sich im Kommando-Modus. Jetzt kann man all die unten gelisteten ein-buchstabigen Kommandos und die ":" - Befehle eingeben. Sobald man ein : tippt springt der Cursor in die unterste Zeile am Bildschirm und man kann eine Kommandozeile eintippen. Dies benutzt man für alle Kommandos die Parameter benötigen (wie z.B. Suche oder das Laden einer Datei). Dieser Modus ist jedoch ungeeignet, um mehr als ein neues Zeichen in den Text einzufügen. Dazu gibt es den Einfüge-Modus. Man wechselt in ihn z.B. durch eines der Kommandos i s o. Dann werden alle Zeichen, die man tippt, in den Text eingefügt. Man verläßt ihn durch Drücken der ESC-Taste.

Die wichtigsten Kommandos

Kommandos, die mit : beginnen, müssen mit RETURN abgeschlossen werden. Um diese Kommandos einzugeben muß man evtl. erst die ESC-Taste drücken um den Eingabemodus zu verlassen.
   i     Beliebigen Text ab Cursorposition einfügen
   x     Zeichen unter dem Cursor löschen
   dd    Aktülle Zeile löschen
   u     Letzte Veränderung rückgängig machen
   p     Daten aus Puffer an Cursorposition einfügen
   o     Neue Zeile unter der aktuellen einfügen
   ZZ    Text in Datei schreiben und Editor verlassen
   hjkl  Cursor links/runter/hoch/rechts bewegen
   :q    Editor verlassen
   :q!   Editor verlassen ohne den Text zu speichern
   :w    Text in Datei schreiben
Vor jedes dieser Kommandos ohne : kann man eine Zahl setzen um sie mehrfach auszuführen (z.B. 5x löscht 5 Zeichen). Die Kargheit der Bedienung sollte nicht darüber hinwegtäuschen, daß der vi ein sehr mächtiger Editor ist, jedenfalls besser als die meisten X-clients (außer natürlich emacs). Das Problem ist nur, daß man die Kommandokürzel ersteinmal lernen muß.

Genaueres in den manpage auf SGI und manpage auf HP bzw. in der Literatur (siehe auch unten).

Startup und Konfiguration

Man kann das Verhalten des Editors konfigurieren über Kommandozeilenparameter (werden erklärt im Manual von ex oder Settings. Für letztere gibt es das Kommando :set und mit :set all erhält man eine Liste aller möglichen Optionen und deren aktuellen Wert.

Fast jede Option ist ein toggle, d.h. man kann damit ein bestimmtes Verhalten Ein- oder Abschalten. Man schaltet es aus durch Vorsetzen der Buchstaben no und ein durch weglassen derselben. Die anderen Optionen enthalten einen Wert, der wie im Besispiel gezeigt gesetzt wird. Beispiel: Abschalten der Zeilennumerierung und setzen des Tabulator-Abstands auf 2 Zeichen:

:set nonu ts=2

Um den vi dauerhaft bei jedem Startup zu konfigurieren gibt es mehrere Möglichkeiten:

EXINIT-Shell-Variable
Ist diese Variable gesetzt, wird der enthaltene String bei jedem Start des vi als Kommandozeile interpretiert (wie wenn man : tippen würde und den Inhalt von EXINIT dann eingibt). Beispiel:
setenv EXINIT "set aw nonu ai sm ts=8 sw=8"
.exrc
Falls keine EXINIT Variable definiert ist führt vi alle in ~/.exrc enthaltenen Kommandos aus. Falls jedoch eine Datei namens .exrc im aktuellen Verzeichnis ist, und sie einem selber gehört, wird diese benutzt.

Aufsetzen nach Absturz

Wenn der Editor einmal unvorhergesehen gestoppt wurde (z.B. durch Systemabsturz oder kill-Signal), kann man den zuvor editierten Text wieder zurückholen. Dazu ruft man den vi mit der Option -r auf. Man wird vom Verlorengehen der Datei außerdem per email automatisch benachrichtigt. Dort wird auch das Vorgehen genau erklärt.

Siehe auch:
ex manpage auf SGI und ex manpage auf HP
vi manpage auf SGI und vi manpage auf HP
Einführung in den vim, deckt auch alle vi-Kommandos ab

vi - Befehlsübersicht mit den wichtigsten Kommandos
Skript zur Vorlesung Einführung in C von Jürgen Kleinöder