VI war der erste Texteditor im Vollbild-Modus überhaupt. Auf ihn trifft zu, woran sich auch bei Unix die Geister scheiden: er ist anfänglich ungewohnt zu bedienen, doch dafür ist er ein sehr mächtiges Werkzeug in den Händen dessen, der damit umzugehen weiß. Ein VI-Benutzer kann mit wenigen Tasten Berge versetzen und diese Eigenschaft besitzen nur wenige andere Texteditoren.
Linux-Mandrake vertreibt den VI in einer verbesserten Version, VIm (VI iMproved), doch wir nennen ihn hier weiterhin VI.
Zuerst der Aufruf, der genau wie beim Emacs abläuft. Kehren Sie also zu Ihren beiden Dateien zurück und tippen Sie:
$ vi Datei1 Datei2 |
Nun sollten Sie sich mit einem Fenster, ähnlich dem in Abbildung 3-4, konfrontiert sehen:
Sie befinden sich jetzt im Kommandomodus der ersten geöffneten Datei. Und hier fangen die Schwierigkeiten an :-) Im Kommandomodus können Sie keinen Text in eine Datei einfügen... Dazu müssen Sie mittels folgender Kommandos in den Eingabemodus wechseln:
a und i fügen Text nach bzw. vor dem Cursor ein (A und I fügen entsprechend Text am Ende bzw. am Anfang der gegenwärtigen Zeile ein);
o und O öffnen jeweils eine neue Zeile unter bzw. über der aktuellen Zeile zum Einfügen von Text.
Im Einfügemodus erscheint das Wort ---INSERT--- am unteren Bildschirmrand. Nur in diesem Modus können Sie Text eingeben. Um in den Kommandomodus zurückzukehren, drücken Sie die Esc-Taste.
Im Einfügemodus können Sie die Rücktaste und die Entf-Taste zum Textlöschen benutzen. Zur Navigation können Sie in beiden Modi die Pfeiltasten verwenden, im Kommandomodus zusätzlich noch andere Kombinationen, die wir später betrachten werden.
Den ex Modus erreicht man mittels der : Taste im Kommandomodus: : erscheint am unteren Bildschirmrand zusammen mit dem Cursor. Alles, was Sie jetzt eingeben und mit Eingabe bestätigen, betrachtet VI als ex Kommando. Löschen Sie die Kommandozeile, kehren Sie automatisch in den Kommandomodus zurück und der Cursor erscheint wieder im Text.
Um Änderungen an einer Datei zu sichern, tippen Sie :w im Kommandomodus. Wollen Sie den Inhalt des aktuellen Puffers unter einem anderen Namen sichern, tippen Sie :w <Dateiname>.
Wie im Emacs können Sie verschiedene Puffer gleichzeitig anzeigen lassen. Dazu verwenden Sie das Kommando :split.
Um innerhalb eines Puffers die Datei zu wechseln, tippen Sie :next für die nächste und :previous für die vorige Datei. Sie können auch :e <Dateiname> verwenden, um eine bereits geöffnete Datei zu reaktivieren oder eine neue Datei zu öffnen. Auch hier steht die Komplettierungs-Funktion mittels TAB zur Verfügung.
Um in den unteren Puffer zu wechseln, tippen Sie Strg-w j, für den oberen gilt Strg-w k. Sie können die j und k Tasten auch durch die entsprechenden Pfeiltasten ersetzen. :close versteckt einen Puffer, :q schließt ihn.
VI wird Ihnen nicht erlauben, einen Puffer zu schließen oder zu verstecken, ohne Veränderungen vorher gespeichert zu haben. Stattdessen erhalten Sie diese Nachricht:
No write since last change (use! to override)
Falls Sie die gemachten Änderungen verwefen wollen folgen Sie der Anweisung und tippen :q! oder :close! :-)
Außer der Rücktaste und der Entf-Taste im Einfügemodus verfügt VI im Kommandomodus über zahlreiche Kommandos um Texte zu löschen, zu kopieren oder zu ersetzen. Schauen Sie sich einige an. Alle Kommandos zerfallen in zwei Teile: die Aktion, die durchgeführt werden soll und ihren Effekt. Die Aktion könnte beispielsweise sein:
c: ersetzen (engl. change). Der Editor löscht den gewünschten Text und geht zurück in den Einfügemodus.
d: löschen (engl. delete)
y: kopieren (engl. yank). Darüber erfahren Sie mehr im nächsten Abschnitt.
.: wiederholt die letzte Aktion.
Der Effekt wiederum definiert, welche Gruppe von Zeichen von dem Kommando betroffen ist. Diese Effektkommandos entsprechen Bewegungen im Kommandomodus:
h, j, k, l: ein Zeichen nach links, nach unten, oben oder rechts.[1]
e, b, w: ans Ende bzw. an den Anfang des aktuellen Wortes. Zum Beginn des nächsten Wortes.
^, 0, $: zum ersten sichtbaren Zeichen (weder Leertaste noch TAB) der aktuellen Zeile, zum Beginn der Zeile, zum Ende der Zeile.
f<x>: zum nächsten Zeichen <x>. So bewegt fe den Cursor zum nächsten e.
/<String>, ?<String>: Vorwärts bzw. rückwärts zur nächsten Zeichenfolge <String>. /blabla etwa bewegt den Cursor zur nächsten Zeichenfolge blabla.
{, }: Zum Beginn bzw. Ende des aktuellen Abschnitts.
G, H: Zum Ende der Datei, zum Beginn des aktuellen Schirms.
Jedem dieser Effektzeichen oder Bewegungskommandos kann eine Zahl hinzugefügt werden, die die Anzahl der Wiederholungen angibt. Für G entspricht diese Zahl der Zeilennummer. So ist eine Vielzahl von Kombinationen möglich:
7b: Bewegt den Cursor sieben Wörter zurück.
c8fk: Löscht den Text bis zum achten k und geht dann in den Einfügemodus.
91G: Geht zur Zeile 91 der aktuellen Datei.
d3$: Löscht bis zum Ende der aktuellen Zeile und die beiden nächsten Zeilen.
Zugegebenermaßen sind diese Kommandos nicht gerade intuitiv, da hilft eben – wie so oft – nur üben. Doch Sie sehen, Sie können wirklich ,,Berge mit wenigen Tasten versetzen`` :-)
Wie bereits gesehen, dient y zum Kopieren von Text. Ausschneiden funktioniert mittels d. Ihnen stehen 27 Speicherplätze zur Verfügung: ein unbenannter und 26, die jeweils einen der 26 Kleinbuchstaben als Bezeichnung tragen.
Um den unbenannten Speicherplatz zu benutzen, geben Sie das ganz normale Kommando ein: y12w zum Beispiel kopiert die zwölf Worte hinter der aktuellen Cursorposition.[2] Zum Ausschneiden nehmen Sie in diesem Fall d12w
Um einen der 26 benannten Speicherplätze zu benutzen, verwenden Sie die Sequenz "<x> vor dem Kommando, wobei <x> den Namen des Speicherplatzes bezeichnet. Um also jene 12 Wörter in den Speicherplatz k zu packen, geben Sie den Befehl "ky12w (zum Ausschneiden entsprechend "kd12w) ein.
Um Inhalte aus dem unbenannten Speicherplatz einzufügen, benutzen Sie die Kommandos p oder P (für engl. Paste). Diese Kommandos fügen den Inhalt vor bzw. nach dem Cursor ein. Um Inhalte aus einem benannten Speicherplatz einzufügen, verwenden Sie "<x>p oder "<x>P in gleicher Weise (so fügt zum Beispiel "dp den Inhalt des Speicherplatzes d nach dem Cursor ein).
Werfen Sie einen Blick auf das Beispiel in Abbildung 3-5.
Um diese Aktion durchzuführen, werden Sie:
die ersten sieben Wörter des Satzes in den Speicherplatz r schreiben (zum Beispiel: "ry7w)[3];
in den Puffer Datei2 gehen, welcher sich unterhalb befindet: Strg-w j;
und den Inhalt des Speicherplatzes r vor dem Cursor einfügen: "rp.
Sie sollten ein Resultat bekommen, wie in Abbildung 3-6 dargestellt.
Nach Text zu suchen ist ziemlich einfach: Gehen Sie in den Kommandomodus, tippen Sie /, gefolgt vom Suchbegriff, ein und bestätigen Sie mit der Eingabe-Taste. /Party beispielsweise sucht nach der Zeichenkette Party von der gegenwärtigen Cursor-Position ausgehend.
n führt die Suche fort. Erreicht die Suche das Ende der Datei, wird sie an deren Anfang fortgesetzt. Um rückwärts zu suchen, verwenden Sie ? anstelle von /.
Um VI zu verlassen, geben Sie das Kommando :q ein (tatsächlich schließt dieses Kommando lediglich den aktuellen Puffer. Ist dies der einzige Puffer an dem Sie arbeiten, beendet sich VI). Auch hier gibt es verschiedene Möglichkeiten:
:wq sichert Änderungen und beendet das Programm (eine andere Möglichkeit ist ZZ),
:q! beendet das Programm, ohne Änderungen an der Datei zu speichern.
Sie werden wohl bereits vermutet haben, dass :wq bei mehreren Puffern den aktuellen Puffer schreibt und schließt.
[1] | Für dl (ein Zeichen nach rechts löschen) gibt es die Abkürzung x, für dh das Kürzel X. Mit dd löscht man die gesamte aktuelle Zeile. |
[2] | ...wenn sich der Cursor am Anfang des ersten Wortes befindet! |
[3] | y7w heißt wörtlich: "Yank 7 words", also auf deutsch: ,,kopiere sieben Wörter``. |