VI-Referenz

Allgemeines zum vi

Der vi-Editor ist eine Weiterentwicklung des Zeilenorientierten ex-Editors. Trots seines Alters von mehr als 20 Jahren ist er heute immer noch einer der leitungsfähigsten Texteditoren die es gibt (Was hat sich beim Editieren von Text in den letzten 20 Jahren geändert ?). Zu seinen Eigenschaften gehören unter anderem:

Allgemeiner Aufbau eines VI-Kommandos

<Wiederholungszahl><Kommando><Reichweite/Positionierung>

Der vi(1) kann auch unter vedit(1) aufgerufen werden. Der Unterschied zum vi(1) ist, dass der Editor den Textveränderungsmodus in dem er sich befindet rechts unten anzeigt (z.B. INSERT MODE) und damit insbesondere Anfängern eine Hilfestellung gibt. Dieses Verhalten findet man im allgemeinen auf UNIX. Beim vim auf Linux gibt es das Kommando vedit nicht und das Anzeigen des Modus ist Standard.

Der Editor kennt drei Zustände in denen er sich befinden kann:

Zustandsdiagramm

VI-Kommandos

Die Folgenden Kommandos verändern die Cursorposition. Es findet in keinem Fall eine Veränderung des Textes statt

VI-Kommandos (Positionierend)
h,j,k,l Positioniert den Cursor nach links, unten, oben, rechts.
b,BWortweise nach links gehen. Bei b sind die Zeichen, die Worte trennen, Leerzeichen und Sonderzeichen. Bei B sind es nur Leerzeichen.
w, W Wortweise nach rechts gehen. Bei w sind die Zeichen, die Worte trennen, Leerzeichen und Sonderzeichen. Bei W sind es nur Leerzeichen.
e, E An das Ende des Wortes gehen. Bei e sind die Zeichen, die Worte trennen, Leerzeichen und Sonderzeichen. Bei E sind es nur Leerzeichen.
0 Positionieren auf das erste Zeichen der Zeile.
$ Positioniert auf das letzte Zeichen der Zeile.
% Positioniert auf die korrespondierende öffnende bzw. schließende Klammer.
f<Zeichen>, F<Zeichen> Positioniert auf das angegebene Zeichen innerhalb der Zeile. f sucht vorwärts und F sucht rückwärts
/<Regulärer Ausdruck>, ?<Regulärer Ausdruck>Suchen des regulären Ausdrucks im Text, "/" sucht in Richtung Dateiende, "?" sucht in Richtung Dateianfang.
n, NWeitersuchen. "n" wiederholt das letzte Suchkommando (also "/" oder "?"). N sucht in der anderen Richtung wie n.

Die folgende Kommandos verändern den Text. Es wird dabei in den Textmodus gewechselt. Das Verlassen des Textmodus erfolgt durch Drücken der <ESC>-Taste.

VI-Kommandos (Textverändernd und in den Textmodus wechselnd)
i,I insert - Einfügen vor dem Cursor. Bei I wird vor dem ersten Zeichen in der Zeile eingefügt.
a,A append - Anhängen. Einfügen nach dem Cursor. Bei A wird am Ende der Zeile eingefügt.
o, O open - Öffnen einer neuen Zeile. Der cursor steht am Zeilenanfang nach der aktuellen Zeile. Bei O steht der Cursor am Zeilenanfang vor der aktuellen Zeile.
c,C change - Text ändern. Bei diesem Kommando muss angegeben werden, wie weit geändert werden soll. Es kann dabei jedes Kommando verwendet werden, das den Cursor positioniert. Durch ein $-Zeichen wird angezeigt, wie weit der Text geändert wird. C ändert ab der aktuellen Position bis zum Ende der Zeile

Die folgenden Kommandos verändern den Text. Es wird dabei aber der Kommandomodus nicht verlassen.

VI-Kommandos (Textverändernd)
d,Ddelete - Text löschen. Bei diesem Kommando muss angegeben werden, wie weit gelöscht werden soll. Es kann dabei jedes Kommando verwendet werden, das den Cursor positioniert. D löscht ab der aktuellen Position bis zum Ende der Zeile. Der gelöschte Text wird in einen internen Puffer kopiert.
y,Y yank - kopieren. Bei diesem Kommando muss angegeben werden, wie weit kopiert werden soll. Es kann dabei jedes Kommando verwendet werden, das den Cursor positioniert. Der Text wird in einen internen Puffer kopiert und kann von dort mit p oder P wieder abgerufen werden.
uundo - Rückgängig machen. Bei diesem Kommando unterscheiden sich die Implementierungen des vi(1) etwas. Bei den kommerziellen UNIX-Systemen gilt, dass das letzte textverändernde Kommando rückgängig gemacht wird. Es ist dabei egal wie gross diese letzte Veränderung war (x löscht eine Zeichen = eine Veränderung, 500dj löscht 500 Zeilen = eine Veränderung). Drückt man einmal u wird die Änderung rückgängig gemacht. Drückt man nochmal u so wird das Rückgängigmachen wieder rückgängig gemacht, d.h. man hat wieder den Text bevor man das erstemal u eingegeben hat.
Die Linux-Implementierung vim(1) (= vi improved) merkt sich alle Textveränderungen und macht mit jedem weiteren u eine weitere Veränderung rückgängig.
p,PEinfügen des Textes aus dem internen Puffer vor (p) oder nach (P) dem Cursor. Der Text ist in diesen Puffer mit einem Kommando d, D, x, y, Y geschrieben worden
x Löschen des Zeichens, auf dem der Cursor steht.
! Text an ein UNIX-Kommando übergeben. Bei diesem Kommando muss angegeben werden, welcher Zeilenbereich an das Kommando übergeben werden soll. Es machen dabei nur Positionierungskommandos Sinn, die eine oder mehrere Zeilen beschreiben (z.B. j, k, /, %...).
VI-Kommando (Puffer)
"x[dpy] Der Textbereich der mit [dpy] bearbeitet werden soll wird in den Puffer x kopiert (bei y wird aus dem Puffer kopiert). x ist ein Buchstabe im Bereich a bis z.

Beispiele:

In den folgenden Beispielen soll gezeigt werden, wie man die oben angegebenen Kommandos kombinieren kann. Es wird immer die Funktion d (löschen) verwendet. Diese kann natürlich durch c (change) oder y (yank) ersetzt werden.

5j Fünf Zeilen nach unten
4w Vier Worte nach rechts
dw Löschen eines Wortes
d5w Löschen von fünf Wörtern
dfA Löschen bis zum Zeichen A (einschließlich)
d5fA Löschen bis zum fünften Zeichen A (einschließlich)
d$ Löschen bis zum Zeilenende (entspricht D)
d% Löschen bis zur korrespondierenden Klammer
20i=<ESC> Eingabe von 20 "=" Zeichen
/5jsort Ab Cursorposition werden die nächten 5 Zeilen an das Kommando sort übergeben und anschließend wieder in den Text eingefügt.

VI-Kommandos (zeilenorientiert)

Aus seiner Entstehungsgeschichte heraus hat der VI auch noch eine Zeilenorientierte Schnittstelle. Diese Kommandos werden mit einem : eingeleitet. Die allgemeine Schreibweise dieser Kommandos ist:

:<Arbeitsbereich des Kommandos><Kommando><Parameter für Kommando>

Wird kein Arbeitsbereich angegeben, so wird die Zeile angenommen in der der Cursor steht. Ansonsten kann der Arbeitsbereich wie folgt angegeben werden:

<Anfang>,<Ende>

Anfang muss kleiner/gleich Ende sein. Anfang und Ende sind die erste und die letzte Zeile (einschliesslich), die von dem Kommando bearbeitet werden sollen. Anfang und Ende werden als Zeilennummer angegeben. Es können auch folgende Symbole angegeben werden:

1 1. Zeile der Datei
$ Letzte Zeile der Datei
. Zeile in der der Cursor steht
% Die gesammte Datei (entspricht "1,$")

Folgende Kommandos werden am häufigsten gebraucht:

Besondere Tasten

. (Punkt) Es wird das letzte textverändernde Kommando wiederholt (Eingabe, löschen, ändern).
; (Strichpunkt, Semikolon) Es wird das letzte f-Kommando wiederholt
, (Komma) Es wird das letzte F-Kommando wiederholt
<CNTrl>-V oder <STRG>-VControl-V wird benutzt, um Zeichen einzugeben, die normalweise nicht eingebbar sind (Zeilenschaltung, Return, Escape...). Nachdem man Control-V eingeben hat, wird das nächste eingegebene Zeichen in den Text übernommen. Es spielt dabei keine Rolle welche Funktion das Zeichen sonst hat.

© Ihno Krumreich
Letzte Änderung 06.11.2009