|
|
viDer Editor vi ist sehr verbreitet. Man findet ihn nicht nur auf jeder UNIX Maschine, sondern auch auf diversen anderen Plattformen. Neben oder statt des originalen vi werkelt oft ein Klon, der nicht selten einige Erweiterungen erfahren hat. Die bekanntesten Vertreter sind elvis und vim. Der vi hat ein originelles Konzept, dessen Vorteile nicht auf Anhieb erkennbar sind. Es gibt drei Modi, in denen sich das Programm befinden kann: den Kommandomodus, den Eingabemodus und den Befehlsmodus. Nach dem Starten des vi befindet man sich im Kommandomodus. Hier kann man im Text positionieren, suchen und Kommandos zur Textveränderung geben. Durch solche Kommandos gelangt man in den Eingabemodus. Der Eingabemodus ist recht simpel. Man kann Text eingeben und mit der Korrekturtaste (Backspace) die letzten Vertipper innerhalb der aktuellen Zeile korrigieren. Alle anderen Korrekturen und Maßnahmen werden vom Kommandomodus aus erledigt, in den man durch die Taste ESCMan kann darüber streiten, ob diese Taste als Abschluss der Eingabe eine glückliche Wahl war. Inzwischen verwenden fast alle Programme die ESC-Taste, wenn sie Eingaben verwerfen wollen. Unter vi jedenfalls wird die Eingabe bestätigt und der Modus verlassen. wieder zurückkehrt.
Vom Kommandomodus aus erreicht man durch Eingabe des Doppelpunktes den
Befehlsmodus. Der Cursor geht in die unterste Zeile und erwartet einen durch
Return abgeschlossenen Befehl. Diese Befehle entsprechen übrigens zum Teil
denen des
Abbildung zeigt die Modi des vi im Überblick. Nachdem man den vi gestartet hat, befindet man sich im Kommandomodus, in dem auch durch den Text navigiert wird. Cursorpositionierung, Blättern und Suchen findet hier statt. Mit Kommandos wie i (insert), a (append), cxDas x steht hier für ein Zeichen, das den Bereich bestimmt, auf den die Änderung wirken soll. (change) und R (replace) gelangt man an der aktuellen Position in den Eingabemodus. Dort gibt man Text ein. Ist die Eingabe abgeschlossen, kehrt man mit ESC wieder in den Kommandomodus zurück, um zur nächsten Stelle zu navigieren. Vom Kommandomodus gelangt man mit dem Doppelpunkt in den Befehlsmodus. Hier gibt man unter anderem die Befehle zum Verlassen, zum Sichern und Hinzuladen.
VerlassenDas Wichtigste zuerst: Man kommt aus vi heraus, indem man zunächst ggf. den Editiermodus verlässt. Das geschieht durch ESC. Falls ein ESC zu viel gedrückt wurde, piept vi. Aber das stört eigentlich nur akustisch.
Dann wechselt man mit dem Doppelpunkt in den Befehlsmodus. Der Cursor geht in
die letzte Zeile. Als Befehl gibt man ein einfaches, kleines q (quit) ein und
bestätigt mit der Returntaste. Sollte vi nörgeln, dass Änderungen noch nicht
gesichert sind, kann man dies mit
[wie man vi verlässt]L|L
Befehl & Wirkung
Starten des vi
Wollen Sie eine Datei erstellen, geben Sie Sie können die Datei wieder bearbeiten, indem Sie den vi wieder mit dem Dateinamen starten. Nun sehen Sie den Text im Überblick und befinden sich wieder im Kommandomodus. Zunächst bewegen Sie sich an die Stelle, wo Sie etwas ändern wollen. Mit + und - können Sie zeilenweise auf und ab gehen. Mit der Leertaste und Backspace können Sie nach links und rechts in der Zeile über den Text fahren. Auf vielen Systemen arbeiten auch die Cursortasten. Haben Sie die Zielstelle erreicht, können Sie wieder mit i neuen Text hinzufügen oder mit dem kleinen x (wie extract oder wie eine kleine Schere) einzelne Zeichen unter dem Cursor löschen. Zwei Zeilen kann man mit einem großen J (join) zusammenfügen. Mit diesen Kommandos kommt man bereits sicher durch den vi, auch wenn das noch nicht sehr komfortabel ist.
Bewegungen durch den Text im KommandomodusAuf den meisten Systemen funktionieren die Standardtasten für die Cursorbewegungen. Das wird den meisten Anwendern am einfachsten erscheinen. Leider funktioniert das im Allgemeinen nur auf dem lokalen Rechner. Sobald man mit Hilfe des Netzes auf fernen Rechnern arbeitet (siehe telnet, S. telnet), hat man es mit Terminalemulationen zu tun, bei denen oft die Funktionstasten nicht mehr funktionieren. In solchen Fällen arbeiten aber immer noch die normalen Tasten und die ctrl-Kombinationen. Insofern ist es hilfreich, dass vi auch mit diesen Tasten bedienbar ist.
[Cursorbewegungen im vi]L|L|L
Weite & zurück & vor
Suchen im Textvi sucht mit dem Schrägstrich. Daraufhin geht der Cursor in die unterste Zeile. Hier gibt man den Suchbegriff ein und bestätigt mit Return. Um das nächste Erscheinen des gleichen Begriffs zu suchen, gibt man ein kleines n ein. Mit einem großen N kommt man zum vorangegangenen Erscheinen des Begriffs. Will man von vornherein rückwärts suchen, verwendet man das Fragezeichen statt des Schrägstrichs als Befehl. Auch hier arbeiten n und N, allerdings jetzt in der anderen Richtung.
EditierenUm den Text zu bearbeiten, wird man zunächst Text einfügen. Dazu gibt es folgende Kommandos:
[Kommandos zum Wechsel in den Editiermodus]C|L
Taste & Wirkung
Die Eingaben werden durch ESC bestätigt. Man kann, anstatt einzufügen, auch existierenden Text ersetzen. Dabei dient das c als Zeichen für Change. Es folgt ein Zeichen, das angibt, was man ersetzen will. Hier heißt w Wort, $ bis Zeilenende, l ein Zeichen, und die Verdoppelung des c steht für die ganze Zeile. Auf dem Bildschirm wird der Ausschnitt, den man ersetzt, durch ein Dollarzeichen begrenzt.
[Ändern]L|L
Tasten & Wirkungsbereich
Löschen und KopierenDas Kommando zum Löschen von Textteilen beginnt mit d (für engl. delete). Wie beim Ändern wird die Weite des Löschens durch den zweiten Buchstaben bestimmt, dabei gilt w für ein Wort, $ bis zum Ende der Zeile, und die Verdoppelung des Kommandobuchstabens betrifft die komplette Zeile. Für den Buchstaben wird das l verwendet, aber es gibt auch hier einen extra Buchstaben.
[Löschkommandos unter vi]L|L
Tasten & Wirkungsbereich
Man kann durch Verwendung der Suchfunktion das Ziel angeben, bis zu dem gelöscht werden soll. Man startet an der aktuellen Cursorposition. Beispiel: d/abc plus Returntaste löscht alles zwischen hier und dem nächsten Auftreten der Zeichenkette abc. Die gelöschten Textbereiche werden in einem Puffer zwischengelagert. Dieser Text kann jederzeit an jeder Stelle mit p oder P wieder aus dem Puffer geholt werden. Dabei fügt p hinter und P an der aktuellen Cursorposition ein. Man kann den Puffer allerdings auch füllen, ohne das Original zu löschen. Man verwendet lediglich das Kommando y (yank) statt d.
[Zwischenspeichern]L|L
Tasten & Wirkungsbereich
Zeilenvorschub löschenUm zwei Zeilen aneinander zu hängen, also den Zeilenvorschub der oberen Zeile zu löschen, geht man in die obere Zeile und gibt ein großes J (join) ein. Die beiden Zeilen werden vereinigt, und dazwischen steht ein Leerzeichen.
Geklammerte BereicheFür Programmierer besonders interessant ist der Umgang mit Klammern. Man positioniert den Cursor auf einer Klammer, und vi springt durch das %-Zeichen auf die korrespondierende Klammer. Dabei werden runde, eckige und geschweifte Klammern akzeptiert. Das Prozentzeichen kann man auch als Bereichsangabe anderer Befehle verwenden. Die Tastenkombination d% löscht den Bereich von der aktuellen Klammer unter dem Cursor bis zur korrespondierenden Klammer. Besonders interessant ist das Einrücken in Verbindung mit Klammerungen für C-Programmierer. Man kann sich auf eine geschweifte Klammer stellen und durch das Kommando >% den kompletten Block um so viele Leerzeichen einrücken, wie in der Variablen shiftwidth definiert ist.
[Klammern]L|L
Tasten & Wirkung
MehrfachausführungSoll ein Kommando mehrfach ausgeführt werden, stellt man einem beliebigen Kommando die Häufigkeit voran. Beispiele:
[Beispiele für Mehrfachausführung]L|L
Kommando & Wirkung
Mach's nochmal, vi!Ein besonderes Feature von vi ist der Punkt. In der Kommandoebene eingegeben, wiederholt er das letzte Kommando an der aktuellen Cursorposition. Auch vor dem Punkt kann man die Häufigkeit angeben. Hat man nach 10dd noch 10. getippt, werden 100 Zeilen gelöscht.
Schief gelaufenWenn mal etwas schief ging: Versehentliches Löschen und andere ungewollte Vorgänge kann man mit u (undo) ungeschehen machen. Befindet man sich in einem unbekannten Modus, erreicht man mit ESC die Kommandoebene, von der aus das u eingegeben werden muss. Stellt man fest, dass nicht der letzte, sondern der vorletzte Befehl den Schaden verursacht hat, der 100 Seiten Manuskript mit der Schredderfunktion bearbeitete, kann man zwei Dinge tun. Das erste ist, dass man u ein weiteres Mal drückt und hofft, eine der neueren Implementationen von vi zu benutzen, die ein Undo in mehreren Stufen erlauben. Es kann aber auch sein, dass statt der mehrstufigen Änderung nur ein Redo erfolgt ist. Dann sollte man aufstehen, tief durchatmen und überlegen, in welchem Zustand sich die Datei auf der Platte befindet und dann den vi mit :q! verlassen, um die letzte Version zu verwenden oder das Thema Zwischenspeichern noch einmal intensiv durchdenken.
Ein versierter vi-Benutzer würde an dieser Stelle allerdings den aktuellen
Text nicht mit :q! verwerfen, sondern ihn unter einem anderen Namen sichern.
Dazu wird :w, gefolgt von einem Leerzeichen und dem neuen Dateinamen, aufgerufen.
Also sichert Sollte stattdessen die verwendete Version ein mehrstufiges Undo beherrschen, stellt sich die Frage, wie man ein Undo zu viel wieder rückgängig machen kann. Hier empfielt sich ein Experiment mit ctrl-R.
Wichtige Befehle des BefehlsmodusDer Befehlsmodus wird mit dem Doppelpunkt aktiviert. Die Kommandos q zum Verlassen und w zum Sichern wurden bereits vorgestellt. Auch dass man dem Kommando w als Parameter noch einen Dateinamen mitgeben kann, um den Text unter diesem Namen zu speichern, wurde bereits erwähnt. Als Gegenstück zum w gibt es ein r (read), um Texte in den aktuellen Text hineinzulesen. Auch hier wird der Dateiname als Parameter angegeben. Der angegebene Text erscheint danach an der aktuellen Cursorposition.
Mit dem Ausrufezeichen wird die restliche Befehlszeile an eine Shell
weitergeleitet. Man kann so aus dem Editor einen Compiler starten oder
andere Systemkommandos geben. Probieren Sie einmal
[Wichtige Befehle]L|L
Befehl & Wirkung
Für viele Kommandos der Befehlszeile kann ein Bereich von Zeilen vorangestellt werden, auf den sie wirken sollen. So bewirkt das Voranstellen einer 8 vor w datei, dass Zeile 8 unter dem Namen datei gespeichert wird. Einen Bereich von Zeilen gibt man durch die erste Zeilennummer, gefolgt von einem Komma und der Zahl der letzten Zeile, an. 12,15 bezeichnet also die Zeilen zwischen 12 und 15. Für bestimmte Zeilen gibt es besondere Symbole. Die aktuelle Zeile, in der sich der Cursor befindet, wird durch einen Punkt bezeichnet. Das Dollarzeichen bezeichnet die letzte Zeile. Innerhalb der Bereichsangabe darf kein Leerzeichen stehen.
[Bereichsangaben]L|L
Angabe & Bereich
ErsetzenUm eine Zeichenfolge durch eine andere zu ersetzen, muss man zunächst mit einem Doppelpunkt in den Befehlsmodus wechseln. Der folgende Befehl bewirkt das Ersetzen der Zeichenkette »suchmuster« durch die Zeichenkette »ersetze« im gesamten Text.Dies ist mein Lieblingsbefehl. Nennen Sie diese Folge von Buchstaben auf die Frage nach dem Ersetzungsbefehl von vi mit der Anmerkung »ist doch eigentlich naheliegend, oder?« und man wird Ihren Namen nur noch mit Ehrfurcht aussprechen.
:1,$ s/suchmuster/ersetze/g Dieser Befehl sollte zunächst am Leerzeichen in zwei Teile zerlegt werden. Der Bereich, in dem der Befehl wirkt, wird gleich zu Anfang der Zeile angegeben. Steht dort nichts, wird nur die aktuelle Zeile herangezogen. In diesem Fall ist 1,$ der Bereich von der ersten bis zur letzten Zeile. Das Dollarzeichen ist im vi immer ein Symbol für das Ende. Dann folgt der Befehl s für suchen (engl. search). Das Suchmuster und die Ersetzung müssen voneinander und von den Kommandos vorher und nachher abgetrennt werden. Dazu wird meist der Schrägstrich verwendet. Es könnte auch jedes andere Zeichen sein, das im Suchmuster nicht vorkommt. Am Ende kommt das g (global), damit die Ersetzung nicht beim ersten Mal stehen bleibt.
Das Suchmuster ist übrigens ein regulärer Ausdruck, so wie er auch von
Settings
Um Optionen ein- oder abzuschalten, geht man zunächst mit dem Doppelpunkt
in den Befehlsmodus und gibt dort
[Schalter]L|L|L
Einschalten & Ausschalten & Wirkung
Ist eine Zeile länger als die Bildschirmbreite, dann zeigt gpverb+vi+ den Rest
in der nächsten Zeile an. Dieses Verhalten kann
in manchen Fällen sehr lästig sein. Durch
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|