der_unix-standard-editor_vi

der UNIX-Standard-Editor vi

Es ist einer der ältesten Editoren in der PC-Geschichte, der noch heute intensiv genutzt wird und der auf so ziemlich jeden UNIX-Like Betriebssystem vorhanden ist.

Wenn einer unbedingt will, kann auch den "ee" (easy edit), "pico" oder "nano" verwenden. Die sind für ungeduldige Windowsumsteiger vielleicht besser geeignet.

Allerdings sind die heute verwendeten Nachfolger nicht in jedem Fall kompatibel. Die größten Unterschiede gibt es in den Erweiterungen, denn der Ur-vi konnte noch nicht alles, was seine aktuellen Nachfolger können.

Der wichtigste Unterschied liegt in der Undo- und Redo-Funktionalität.

Ich betrachte hier nur die beiden am stärksten verbreiteten vi-Klone:

  1. nvi (BSD)
  2. vim (Linux)

Es gibt da aber noch den "elvis" und andere Klone.

Der Original-vi sowie der "nvi" speichern den Texts im RAM, der "vim" und der "elvis" speichern den Texts in einer temporären Datei. Deshalb können der "vim" und der "elvis" auch solche Monster-Textdateien öffnen, die nicht mehr in den RAM passen.

Undo- / Redo-Unterschiede

Löscht man aus versehen etwas zuviel und möchte die zuviel gelöschten Zeichen wieder zurück holen, dann ist es bei einem einzigen Zeichen noch einfach.

Mit einem Druck auf die Taste "[U]" (Undo bzw. Umschaltung) ist alles wieder im Lot.

Schwierig wird es da, wenn mehrere Zeichen zurückgeholt werden sollen.

Am besten zeige ich das mal an Hand eines Beispieltextes bezogen auf einen bestimmten vi-Klon.

Bitte nicht daran stören, das der Text an den Haaren herbeigezogen wurde und meine persönliche Meinung wiederspiegelt. ;-)

"nvi"-Beispiel (BSD)

Wir tippen zuerst den Text mit Tippfehler:

Der vi ist der beste editor der welt._

Jetzt löschen wird mal etwas durch mehrfaches drücken der Tast "[X]" wieder weg bis nur noch dieser Text da steht:

Der vi ist_

Durch einmaliges Drücken der Taste "[U]" hat man die Laufrichtung der Taste "[.]" (repeat/Wiederholung) von "vorwärts" auf "rückwärts" Umgeschaltet und dabei auch das als letztes gelöschte Zeichen wieder zurück bekommen.

Um noch mehr Zeichen zurück zubekommen, muss man jetzt einfach nur die Taste "[.]" (repeat/Wiederholung) so oft drücken wie man möchte.

Das nennt sich Undo.

Der vi ist der beste_

Jetzt haben wir etwas zuviel zurückgeholt, das kann man durch löschen oder durch Redo wieder entfernen.

Redo bedeutet, man macht das Undo wieder rückgängig, also Re-Undo.

Hierzu wird einfach nocheinmal die Taste "[U]" gedrückt und dann hat man die Laufrichtung der Taste "[.]" (repeat/Wiederholung) von "rückwärts" wider auf "vorwärts" Umgeschaltet und dabei auch das als letztes wieder hergestellte Zeichen entfernt.

Jetzt kann man mit der Taste "[.]" (repeat/Wiederholung) wieder in seiner "Historie" in der gewählten Laufrichtung fort fahren:

Der vi ist der _

Jetzt schreiben wir weiter:

Der vi ist der allerbeste Editor der Welt._

"vi"-Beispiel (Linux)

Wird der "vim" mit dem Kommando "vi" aufgerufen, reagiert er genauso wie man es von einem "vi" erwartet, wird er dagegen mit dem Kommando "vim" oder "view" aufgerufen, dann reagiert er eher wie "Word"!!!

"vim" heißt der wohl größte "vi"-Klon, für dieses Beispiel wird er mit dem Kommando "vi" aufgerufen.

Wir tippen zuerst den Text mit Tippfehler:

Der vi ist der beste editor der welt._

Jetzt löschen wird mal etwas durch mehrfaches drücken der Tast "[X]" wieder weg bis nur noch dieser Text da steht:

Der vi ist_

Durch einmaliges Drücken der Taste "[U]" hat man die Laufrichtung der Tastenkombination "[Strg]+[R]" (repeat/Wiederholung) von "vorwärts" auf "rückwärts" Umgeschaltet und dabei auch das als letztes gelöschte Zeichen wieder zurück bekommen.

Um noch mehr Zeichen zurück zubekommen, muss man jetzt einfach nur die Tastenkombination "[Strg]+[R]" (repeat/Wiederholung) so oft drücken wie man möchte.

Das nennt sich Undo.

Der vi ist der beste_

Jetzt haben wir etwas zuviel zurückgeholt, das kann man durch löschen oder durch Redo wieder entfernen.

Redo bedeutet, man macht das Undo wieder rückgängig, also Re-Undo.

Hierzu wird einfach nocheinmal die Taste "[U]" gedrückt und dann hat man die Laufrichtung der Tastenkombination "[Strg]+[R]" (repeat/Wiederholung) von "rückwärts" wieder auf "vorwärts" Umgeschaltet und dabei auch das als letztes wieder hergestellte Zeichen entfernt.

Jetzt kann man mit der Tastenkombination "[Strg]+[R]" (repeat/Wiederholung) wieder in seiner "Historie" in der gewählten Laufrichtung fort fahren:

Der vi ist der _

Jetzt schreiben wir weiter:

Der vi ist der allerbeste Editor der Welt._

Die Taste "[.]" hat hier nur die einfache Funktion, dass sie das letzte Kommando wiederholt. In diesem Lösch-Beispiel wäre das die Taste "[X]".

"vim"-Beispiel (Linux)

Wird der "vim" mit dem Kommando "vim" oder "view" aufgerufen, reagiert er wie "Word", wird er dagegen mit dem Kommando "vi" aufgerufen, dann reagiert er genauso wie man es von einem "vi" erwartet.

"vim" heißt der wohl größte "vi"-Klon, für dieses Beispiel wird er mit dem Kommando "vim" aufgerufen.

Wir tippen zuerst den Text mit Tippfehler:

Der vi ist der beste editor der welt._

Jetzt löschen wird mal etwas durch mehrfaches drücken der Tast "[X]" wieder weg bis nur noch dieser Text da steht:

Der vi ist_

Durch beliebig oftes Drücken der Taste "[U]" bekommt man die gelöschten Zeichen wieder zurück.

Das nennt sich Undo.

Der vi ist der beste_

Jetzt haben wir etwas zuviel zurückgeholt, das kann man durch löschen oder durch Redo wieder entfernen.

Redo bedeutet, man macht das Undo wieder rückgängig, also Re-Undo.

Durch beliebig oftes Drücken der Tastenkombination "[Strg]+[R]" (Redo) werden die wiederhergestellten Zeichen wieder entfernt:

Der vi ist der _

Jetzt schreiben wir weiter:

Der vi ist der allerbeste Editor der Welt._

Die Taste "[U]" hat hier die Funktion "Rückgängig" und die Tastenkombination "[Strg]+[R]" hat hier die Funktion "Wieder herstellen". Ganz so wie man es von "Word" bzw. "Wordpad" kennt.

Das ist in meinen Augen zwar ein guter Editor, er verdient aber nicht das "vi" im Namen, da er gegen die "vi"-Philosophie verstößt. Er hätte besser den Namen "Wordpad" bekommen sollen.

Liste der wichtigsten Funktionen (nvi, sollten aber auch im vi/vim funktionieren)

.   ....................der "Punkt" hat die Funktion "letzten Befehl wiederholen"
3.  ....................wiederholt den letzten Befehl 3 mal
i.......................fügt vor dem Cursor ein
I.......................fügt am Zeilenanfang ein
a.......................fügt nach dem Cursor ein
A.......................hängt am Zeilenende an
o.......................öffnet unter dem Cursor eine Zeile
O.......................öffnet ueber dem Cursor eine Zeile
s.......................ersetzt ein Zeichen
3s......................ersetzt 3 Zeichen
S.......................ersetzt die ganze Zeile
cc......................ersetzt die ganze Zeile
cG......................ersetzt alles bis ans Dateiende
c3c.....................ersetzt die nächsten 3 Zeilen
c3w.....................ersetzt die nächsten 3 Wörter
M.......................bewegt die aktuelle Zeile in Bildschirmmitte
w.......................Wortweises springen
$.......................Zeilenende
0.......................Zeilenanfang
_.......................Zeilenanfang
x.......................löscht an der aktuellen Cursorposition
X.......................löscht ein Zeichen rückwärts
3X......................löscht 3 Zeichen rückwärts
dd......................löscht die aktuelle Zeile
3dd.....................löscht 3 Zeilen
D.......................löscht Text vor der Cursorposition bis Zeilenende
d^......................löscht rückwärts bis zum Zeilenanfang
dG......................löscht bis Dateiende
d1G.....................löscht bis Dateianfang
~.......................wandelt das aktuelle Zeichen um (Gross- / Kleinschreibung)
3~......................wandelt die nächsten 3 Zeichen um (Gross- / Kleinschreibung)
yy......................legt die aktuelle Zeile in "den" Puffer
"ayy....................legt die aktuelle Zeile im Puffer a ab an der Cursorposition ein
"a3yy...................legt die aktuelle Zeile und die 3 darunter liegenden Zeilen in den Puffer a
"ayw....................legt das Wort rechts vom Cursor in den Puffer a
"ayb....................legt das Wort links vom Cursor in den Puffer a
p.......................setzt "den" Pufferinhalt
"ap.....................setzt den Pufferinhalt von Puffer a
[Shift]+"j".............Zeilenumbruch löschen
"m"+[Buchstabe].........Marke setzen
'+[Buchstabe]...........zur Marke springen
3+"dd"..................lösche die nächsten 3 Zeilen
:set number.............(:set nu) Zeilennummern einschalten
:set nonumber...........(:set nonu) Zeilennummern ausschalten
:set list...............auch unsichtbare Zeichen anzeigen
:set nolist.............unsichtbare Zeichen nicht anzeigen
:set noautoindent.......ab jetzt wird auch wenn man eine Zeile eingerückt hat, bei [Enter] immer wieder an den Zeilenanfang zurück gesprungen
:wq.....................speichert und schliesst die Datei
:w [Dateiname]..........speichen unter [Dateiname]
:w![Dateiname]..........überschreibt die Datei mit [Dateiname]
:r [Datei]..............einlesen einer [Datei] in die geöffnete Datei
:1,30000w [Datei].......speichert die ersten 30000 Zeilen in [Datei]
:q......................schließt die Datei
:q!.....................schließt die Datei und verwirft vorgenommene Änderungen
:/[Zeichenfolge]........sucht [Zeichenfolge], mit n weiter, mit N zurück
\<......................Wortanfang
\>......................Wortende
:%s/[alt]/[neu]/g.......ersetzt in ganzer Datei (%) [alt] gegen [neu], nicht nur das 1. je Zeile (g)
:%s/\<[alt]\>/[neu]/g...wie oben, es wird jedoch nur nach ganzen Worten gesucht
:E......................öffnet einen zweiten Editor mit der selben Datei / wechseln mit ^w
:N [Dateiname]..........öffnet einen zweiten Editor mir der Datei [Dateiname] / wechseln mit ^w

Editiermodus auf der Konsole umschalten

Wenn man sich an die vi-Eingabeform und seine Kommandos gewöhnt hat, ist man mit ihm schneller als mit irgend einem anderen Editor! Um die Vorteile des vi's auch in der Shell zu nutzen, kann man diese auch in den vi-Modus umschalten:

  1. csh : bindkey -vi
  2. bash : set -o vi

Um die Einstellungen wieder auf den STANDARD zurück zu schalten, muss folgendes eingegeben werden:

  1. csh : bindkey -emacs
  2. bash : set -o emacs
/home/http/wiki/data/pages/der_unix-standard-editor_vi.txt · Zuletzt geändert: von manfred