vi


Man spricht es wie ``v'' und dann ``i'' im Englischen aus. Vi steht für ``visual-interface'' und hat seine Wurzeln in frühen Versionen von Berkeley UNIX (auch BSD). Später wurde der editor von allen unices adaptiert/portiert da er sehr praktisch und schlank ist. 'vi' hat weiters sehr viele Verwandte/Abgewandelte Editoren wie nvi, vim (vi-iMproved), elvis, ... ... wir wollen hier aber nur plain-vi durchgehen weil das ohnehin für alle Versionen gilt.

'vi' ist/sollte auf jedem ausgelieferten Linux/UNIX vorhanden sein - dies ist einer der grössten Vorteile dieses Editors. Auch in Situationen wo andere Editoren nicht verfügbar sind ist 'vi' normalerweise zu gebrauchen. ('vi' braucht ein funktionierendes Terminal wie VT100 oder was anderes, wohingegen 'ex' auch mit dumb-Terminals verwendbar ist -> zeilen-orientiert). ex/vi sind an und für sich dasselbe Programm das nur verschieden aufgerufen wird.

Die Syntax zum starten von vi sieht meist so aus:

$ vi filename

oder

$ vi filename1 filename2 filename3 [...]

Hier kann natürlich auch File-Globbing verwendet werden. z.B. sehr nützlich sind Aufrufe wie:

$ vi *.c

was z.B. alle files mit der endung .c aufmacht (der reihe nach). Umschalten kann man dann im editor z.B. mit ':n (next file)'.

vi hat auch einen sog. recovery-mode der in den meisten vi-Implementationen mit -r zu erreichen ist. Recovery hilft z.B. wenn während einer Editor-Session der Server abstürzt, rebootet wird, usw. damit lässt sich die abgebrochene Editor-Session wieder retten.

z.B.

$ vi -r vi: no files to recover.


Einfaches Editieren: ~~~~~~~~~~~~~~~~~~~~

Nachdem nun vi mit einem Textfile (oder einfach nur vi ohne was -> leeres Text-Dokument) gestartet wurde steht man vor einem Bildschirm der aussieht wie:

[]                            <-- Cursor
~
~
~
~
~
/tmp/vi.Ul1449: new file: line 1

Das sieht alles ein wenig kryptisch aus zu Beginn; ganz unten haben wir eine Statuszeile die nach dem Aufruf das aktuelle File und die Position im File zeigt. (Das kann man beim Editieren mit ^G auch anzeigen lassen). In dieser Statuszeile werden auch Befehle vom Benutzer eingegeben.

Ganz wichtig bei 'vi' ist, dass es 2 Modi gibt. Einen command-mode und einen insert-mode. umschalten kann man mit <ESC> (escape-taste, auf den meisten keyboards links oben). Ist man sich unsicher in welchem modus man ist am besten einmal <ESC> drücken. Dann ist man mit Sicherheit im command-mode.

Befehle bestehen im ``vi'' meistens aus einem einzelnen Buchstaben. Hier möchte ich die Wichtigsten kurz erklären. Befehle funktionieren generell nur im command mode da man im insert-mode eben nur Zeichen einfügt.

Cursorbewegung:

h bewege Cursor ein zeichen nach links

j bewege Cursor eine zeile nach unten

k bewege Cursor eine zeile nach oben

l bewege Cursor ein zeichen nach rechts

Bei manchen Linux/UNIX-Arten funktionieren auch die sog. Cursor-tasten (Pfeile). Man sollte aber generell versuchen mit den oben erklärten Bewegungsbefehlen zu arbeiten weil das immer und überall funktioniert. Man kann unter 'vi' auch die Anzahl der folgenden Befehle angeben.

z.B. würde funktionieren:
5j <- bewegt den Cursor 5 Zeilen nach unten.

Weitere wichtige Befehle sind:

/text sucht nach dem string ``text'' und bewegt den Cursor an die erste Stelle des gefundenen Wortes. Tut nichts wenn nichts gefunden wird.

a 'append' - heisst soviel wie "füge Text NACH dem Cursor ein".

i 'Insert' - fügt Text vor dem aktuellen Cursor ein.

o macht eine neue Zeile unter der Zeile in der der Cursor steht und schaltet auf insert-modus um.

hierbei sei erwähnt dass nachdem man einen der insert befehle a, i oder o verwendet hat und fertig mit Texttippen ist man mit <ESC> in den command-mode umschalten sollte.

Wichtige Befehle zum Textkopieren:

yy kopiert die zeile in der sich der Cursor befindet in den Zwischenbuffer. Achtung: auch hier geht natürlich z.B. 5yy um 5 zeilen in den Zwischenbuffer zu kopieren!

p kopiert die Zeile die im Zwischenbuffer gespeichert ist nach der Zeile wo grad der Cursor steht.

Wichtige Befehle zum löschen von Text:

dd löscht eine Zeile. Auch hier gilt z.B. 10dd um 10 zeilen zu Löschen.

x löscht das aktuelle Zeichen in der Cursor-position.

befehle zum abspeichern/quitten:

Speichern:

:w schreibt das file mit dem aktuellen Namen (den, den man beim Aufruf von ``vi'' angegeben hat.

:w file_name schreibt das aktuelle Text-Dokument in ein neues File namens 'file_name'. Kann auch zum Überschreiben von Dateien genommen werden.

Ausstieg:

:q versucht vi zu beenden - klappt aber nur wenn es keine nichtgeschriebenen Veränderungen in der Datei gibt; wurde was verändert, muss :w zum Speichern verwendet werden oder:

:q! steigt aus egal ob gespeichert wurde. Beendet vi in jedem Fall. Vielleicht wichtig vor allem für Anfänger ist die Sequenz: <ESC>:q! um ggf. von insert->command-mode zu schalten und vi zu beenden.

(Note: Diese Befehle funktionieren alle auch bei ex, nur sieht man eben immer nur die aktuelle Zeile des Dokumentes.)

Weitere Befehle zum Navigieren in grösseren Dateien:

: geht zu Zeilennummer .

G geht zum Dateiende.

1G geht zum Dateianfang. Kann auch mittels :0 erlangt werden.

^ geht zum Zeilenanfang

$ geht zum aktuellen Zeilenende

^F (forward) geht eine Seite nach vor ^B (backward) geht eine Seite zurück ^U (up) geht eine halbe Seite zurück ^D (down) geht eine halbe Seite nach vor

wurde /text verwendet um nach einem Textbruchstück in einer Datei zu suchen ist es oft praktisch, wiederkehrende 'matches' zu finden. D.h. ich will einfach weitersuchen bis zum nächsten 'text'. Dies kann man bei ``vi'' mit den Befehlen

n (sucht vorwärts nach dem letzten Suchbegriff)und

N (sucht rückwärts nach dem letzten Suchbegriff) erreichen.

'vi' ist ein sehr mächtiger und umfassender Editor mit dem man eigentlich fast alles mit Textdateien machen kann. Die Befehle die wir hier gehört haben sollten an und für sich langen zum einfachen Editieren. Wer mehr will einfach einen kurzen Blick in die Manpage werfen oder die Referenzen am ende dieses CD's ansurfen.


REFERENCES:

[0] man vi
[1] http://www.uwsg.iu.edu/edcert/session3/editors/vi.html
[2] http://www.thomer.com/thomer/vi/vi.html
[3] http://www.oreilly.com/catalog/vi6/