Solaris Handbuch für Fortgeschrittene Benutzer

Kapitel 6 Textbearbeitung mit dem Editor vi

vi (visual display editor) ist der unter SunOS standardmäßig verwendete Texteditor. Da er zeichenorientiert und nicht fensterorientiert arbeitet, kann er auf allen Terminaltypen eingesetzt werden und unterstützt eine Vielzahl von Dateiformaten.

Sie können mit vi zwar Text eingeben und bearbeiten, aber nicht auf dem Bildschirm formatieren. vi ist deshalb kein Ersatz für ein echtes Textverarbeitungsprogramm. Um in vi eingegebenen Text für den Ausdruck zu formatieren, benötigen Sie ein Programm wie nroff, troff oder ditroff, das die in den Text eingefügten Formatierbefehle liest und in entsprechende Formate umsetzt.

Von dieser Einschränkung einmal abgesehen, ist vi jedoch ein außerordentlich mächtiger Editor, und neue Benutzer fühlen sich angesichts der Fülle teilweise überlappender Befehle und Funktionen zunächst oft überfordert. Dieses Kapitel soll daher nur einen Überblick über die wichtigsten vi-Befehle geben, mit denen Sie sich dann im Laufe der Zeit vertraut machen können.

Von vi gibt es auch eine Art Demoversion namens view. Wenn Sie eine Datei mit view öffnen, stehen zwar alle vi-Befehle zur Verfügung, die Datei kann jedoch nicht gespeichert werden. Auf diese Weise lassen sich versehentliche Änderungen am Dateiinhalt ausschließen.

6.1 vi starten

In den folgenden Abschnitten erfahren Sie, wie Sie vi aufrufen, Text in eine Datei eingeben, die Datei speichern und vi beenden. Dabei erstellen Sie eine Übungsdatei, mit der Sie im weiteren Verlauf des Kapitels arbeiten.

6.1.1 Dateien erstellen

Mit dem folgenden Befehl starten Sie vi und weisen das Programm gleichzeitig an, die Datei test zu öffnen:

$ vi test

Existiert die Datei bereits, wird sie geladen. Ist eine Datei dieses Namens noch nicht vorhanden, erstellt der Editor sie. In den nachfolgenden Beispielen wird vorausgesetzt, daß test eine neue Datei ist.

Nach dem Aufruf von vi erscheint folgender Bildschirm:

Abbildung 6-1 Der Editor-Bildschirm

Graphic

Der Cursor wird in der oberen linken Ecke des Bildschirms angezeigt. Jede Tilde (~) steht für eine Leerzeile.

Sie können vi auch ohne Angabe eines Dateinamens starten und der Datei erst beim Verlassen des Editors einen Namen zuweisen.

6.1.2 Statuszeile

In der Statuszeile am unteren Bildschirmrand werden der Dateiname und die Anzahl der Zeilen und Zeichen in der Datei angezeigt. Wenn Sie eine neue Datei erstellen, erscheint in der Statuszeile die Meldung Neue Datei.

6.2 Betriebsmodus

vi unterstützt zwei Betriebsmodi: den Eingabemodus und den Befehlsmodus. Im Eingabemodus geben Sie Text in eine Datei ein, während der Befehlsmodus für die Eingabe von Befehlen vorgesehen ist, mit denen spezielle Editorfunktionen aufgerufen werden. Der Befehlsmodus ist der Standardmodus in vi.

Da vi den aktuellen Modus nicht anzeigt, wissen neue Benutzer häufig nicht, in welchem Modus sie sich gerade befinden, was dann leicht zu Verwirrung führt. vi-Probleme lassen sich jedoch weitgehend vermeiden, wenn Sie einige grundlegende Hinweise von Anfang an beachten.

Wenn Sie eine Datei das erste Mal öffnen, befindet sich vi im Befehlsmodus. Bevor Sie Text in die Datei eingeben können, müssen Sie also in den Eingabemodus wechseln. Dafür gibt es mehrere Befehle, z. B. i (insert), mit dem Sie Text an der Cursorposition einfügen, oder a (append), mit dem Sie Text nach der Cursorposition einfügen. (Diese und weitere Eingabebefehle werden später noch ausführlich behandelt.)

Mit der Taste Esc" kehren Sie in den Befehlsmodus zurück. Wenn Sie nicht sicher sind, in welchem Modus Sie sich befinden, können Sie mit Esc" also zunächst in den Befehlsmodus wechseln und dann gegebenenfalls wieder zum Eingabemodus umschalten. Befindet sich vi bereits im Befehlsmodus, wenn Sie Esc" drücken, blinkt der Bildschirm, und es wird ein akustisches Signal ausgegeben, das Sie aber ignorieren können.

6.2.1 Eingabemodus

Um mit der Texteingabe zu beginnen, geben Sie den Befehl i ein. Damit wechseln Sie in den Eingabemodus.

Geben Sie nun einige kurze Textzeilen ein, und beenden Sie jede Zeile mit Return". Die eingegebenen Zeichen erscheinen links vom Cursor, bereits vorhandene Zeichen werden dabei nach rechts verschoben. Tippfehler korrigieren Sie zunächst durch Löschen mit der Rücktaste (Back Space) und Neueingabe der Zeichen vor Beendigung einer Zeile mit Return".

Wenn Sie mit der Eingabe fertig sind, wechseln Sie mit Esc" zurück in den Befehlsmodus. Der Cursor springt dabei auf das zuletzt eingegebene Zeichen zurück.

Reagiert vi nicht wie erwartet, haben Sie möglicherweise versehentlich auf Großbuchstaben-Eingabe (Caps) umgeschaltet. Auf manchen Systemen wird dieser Modus mit der Taste F1" aktiviert, die sich normalerweise direkt neben der Taste Esc" befindet und daher oft anstelle von Esc" gedrückt wird.


Hinweis -

Wenn auf dem Bildschirm verirrte" Systemmeldungen oder andere unerwünschte Zeichen auftauchen, wechseln Sie in den Befehlsmodus und drücken Ctrl-L". Damit weisen Sie vi an, den Bildschirminhalt neu zu zeichnen. Dieser Befehl ähnelt dem OpenWindows-Dienstprogramm Aktualisieren".


6.2.2 Befehlsmodus

Nach dem Öffnen einer Datei befindet sich vi im Befehlsmodus. In diesem Modus können Sie Befehle eingeben, mit denen bestimmte Funktionen ausgelöst werden. Die meisten Editorbefehle bestehen aus einem oder zwei Buchstaben und mitunter auch einer Zahl. Groß- und Kleinbuchstaben haben bei vi-Befehlen meist unterschiedliche Bedeutung. Mit dem Befehl a fügen Sie beispielsweise Zeichen rechts vom Cursor ein, während Sie mit dem Befehl A Zeichen am Ende der Zeile einfügen.

Die meistben Befehle werden automatisch ausgeführt. Return" müssen Sie nur bei Befehlen drücken, die mit einem Doppelpunkt beginnen. Da diese Befehle bei der Eingabe in der Statuszeile angezeigt werden, spricht man mitunter auch vom Statuszeilenmodus als drittem Betriebsmodus. In diesem Handbuch wird jedoch nur zwischen Eingabe- und Befehlsmodus unterschieden.

Mit einem Doppelpunkt beginnende Befehle sind eigentlich ex-Befehle. vi und ex sind jedoch keine separaten Programme, sondern lediglich zwei verschiedene Schnittstellen zu dem gleichen Textbearbeitungsprogramm. vi ist eine bildschirmorientierte Schnittstelle, während ex zeilenorientiert arbeitet. Wenn Sie im Befehlsmodus einen Doppelpunkt eingaben, schalten Sie automatisch auf die Schnittstelle ex um und können so auf den gesamten Funktionsumfang von ex zugreifen, ohne vi verlassen zu müssen. Weitere Hinweise zu diesem Thema finden Sie im Abschnitt "6.6 ex-Befehle".

6.3 Arbeitssitzungen beenden

Bei der Bearbeitung einer Datei mit vi werden die Änderungen nicht direkt in die Datei geschrieben, sondern in eine von vi erzeugte Kopie, die sich in einem temporären Speicherbereich, dem Dateipuffer, befindet. Wenn Sie den Inhalt des Puffers speichern, wird er in die auf der Platte gespeicherte Datei übernommen.

Dieses Verfahren hat Vor- und Nachteile. Einerseits können Sie die Bearbeitung einer Datei jederzeit abbrechen, ohne die Kopie auf der Festplatte zu ändern, andererseits geht der ungesicherte Inhalt des Puffers bei einem Systemabsturz verloren. (Von solchen unvorhergesehenen Unterbrechungen sind vor allem Benutzer entfernter Terminals betroffen, die über Telefonleitungen mit dem Server verbunden sind.)

Am besten schützen Sie sich vor Datenverlusten, wenn Sie Ihre Arbeit regelmäßig, zumindest aber jedesmal nach einer größeren Änderung sichern.


Achtung - Achtung -

GraphicSie können eine Datei im Prinzip in mehreren, gleichzeitig ablaufenden vi-Sitzungen bearbeiten. Weil Sie dabei aber häufig nicht mehr eindeutig nachvollziehen können, welche Änderungen bereits in die Datei geschrieben bzw. von anderen Sitzungen überschrieben wurden, ist dieses Verfahren nicht zu empfehlen.


6.3.1 Änderungen speichern und vi beenden

vi verfügt über eine Vielzahl von Befehlen zum Speichern des Pufferinhalts und zum Verlassen des Editors, die nur geringfügig voneinander abweichen. Grundsätzlich unterscheidet man zwischen Speichern, Speichern und Beenden und Beenden ohne Speichern.

6.3.1.1 Speichern

Um den Inhalt des Puffers in die Datei auf der Platte zu schreiben, geben Sie folgenden Befehl ein:

:w

Da der Befehl mit einem Doppelpunkt beginnt, müssen Sie zum Abschluß Return" drücken.

6.3.1.2 Speichern und Beenden

Mit folgendem Befehl speichern Sie den Inhalt des Puffers und beenden vi:

:wq

Sie können statt dessen auch ZZ eingeben. In diesem Fall schließen Sie die Eingabe nicht mit Return" ab.

6.3.1.3 Beenden ohne Speichern

Wenn Sie die Datei nicht geändert haben und den Editor verlassen wollen, geben Sie folgenden Befehl ein:

:q

Auch hier müssen Sie die Eingabe mit Return" abschließen. Wenn Sie Änderungen vorgenommen haben, erscheint die Meldung Kein Schreibvorgang seit letzter Änderung (:quit! setzt außer Kraft), und vi wird nicht beendet.

Sollen vorhandene Änderungen nicht übernommen werden, geben Sie folgenden Befehl ein

:q!

und drücken anschließend Return".

6.4 Dateien drucken

Um eine gespeicherte Datei zu drucken, verlassen Sie vi und geben folgenden Befehl ein:

$ lp dateiname

dateiname steht für den Namen der Datei, die gedruckt werden soll. Die Datei wird auf dem Standarddrucker ausgegeben, und zwar unformatiert, also genau so, wie sie auf dem Bildschirm erscheint. Weitere Informationen zu Druckbefehlen finden Sie in Kapitel 8.

6.5 vi-Befehle

In den folgenden Abschnitten werden vi-Befehle für verschiedene Aufgabenstellungen behandelt:

6.5.1 Navigationsbefehle

Navigationsbefehle sind Befehle, mit denen Sie den Cursor durch den Text bewegen oder unterschiedliche Ausschnitte einer Datei auf dem Bildschirm anzeigen. Da diese Befehle für die Textbearbeitung besonders wichtig sind, sollten Sie sie beim Lesen der folgenden Abschnitte in Ihrer Beispieldatei ausprobieren.

6.5.1.1 Cursor bewegen

Nach dem Start von vi befindet sich der Cursor in der oberen linken Ecke des Bildschirms. Im Befehlsmodus bewegen Sie den Cursor mit den Pfeiltasten, der Leertaste und einigen anderen Tasten sowie durch Eingabe von Befehlen.


Hinweis -

vi unterscheidet bei der Befehlseingabe zwischen Groß- und Kleinschreibung. Wenn Sie den gleichen" Befehl in Großbuchstaben und Kleinbuchstaben eingeben, kann es also zu sehr unterschiedlichen Ergebnissen kommen.


Um ein Zeichen (Pfeiltasten)

Wenn auf Ihrer Tastatur Pfeiltasten vorhanden sind, können Sie den Cursor damit beliebig nach oben, unten, rechts und links durch den vorhandenen Text (und die angezeigten Leerzeilen) bewegen.

Wenn Sie auf einem entfernten Terminal mit vi arbeiten, funktioniert diese Methode mitunter nicht, da manche Terminalemulatoren die Pfeiltasten nicht unterstützen. In diesem Fall können Sie ersatzweise folgende Tasten verwenden:

Um ein Wort

Mit w bewegen Sie den Cursor zum nächsten Wort oder Satzzeichen.

Mit b bewegen Sie den Cursor zum vorhergehenden Wort oder Satzzeichen.

Mit W oder B setzen Sie den Cursor auf das Leerzeichen vor dem nächsten bzw. vorherigen Wort. Satzzeichen werden dabei übersprungen.

Mit e bewegen Sie den Cursor auf das letzte Zeichen des aktuellen Worts.

An den Zeilenanfang oder das Zeilenende

Mit ^ bewegen Sie den Cursor auf das erste Zeichen der aktuellen Zeile.

Mit $ bewegen Sie den Cursor auf das letzte Zeichen der aktuellen Zeile.

Um eine Zeile nach unten

Mit Return" bewegen Sie den Cursor auf den Anfang der nächsten Zeile.

Nach links

Mit der Rücktaste bewegen Sie den Cursor um ein Zeichen nach links.

Nach rechts

Mit der Leertaste bewegen Sie den Cursor um ein Zeichen nach rechts.

Nach oben

Mit H (High") bewegen Sie den Cursor an den Anfang des Bildschirms.

In die Mitte

Mit M bewegen Sie den Cursor in die Mitte des Bildschirms.

Nach unten

Mit L bewegen Sie den Cursor an das Ende des Bildschirms.

6.5.1.2 Bildschirminhalt verschieben

vi zeigt immer eine Bildschirmseite aus der Textdatei an. Wenn Sie sich am oberen oder unteren Bildschirmrand befinden und den Cursor weiter nach oben oder unten bewegen, wird der Text in die entsprechende Richtung bewegt, so daß vorher nicht sichtbare Zeilen erscheinen. Dieses Verfahren ist bei langen Dateien jedoch sehr umständlich.

Sie können den Bildschirminhalt auch gleich um eine ganze oder halbe Bildschirmseite nach oben oder unten verschieben. (Wenn Sie das in Ihrer Beispieldatei ausprobieren möchten, müssen Sie weiteren Text eingeben.)

Auf einem schnellen System bestehen zwischen dem zeilenweisen und bildschirmweisen Verschieben oft keine großen Geschwindigkeitsunterschiede. Auf einem entfernten Terminal oder einer durch andere Prozesse bereits stark belasteten Workstation nimmt die Geschwindigkeit beim zeilenweisen Verschieben dagegen stark ab.

Eine Bildschirmseite vorwärts

Mit Ctrl-F" zeigen Sie die nächste Bildschirmseite an. Der Cursor springt dabei auf das erste Zeichen der neuen Seite.

Eine halbe Bildschirmseite nach unten

Mit Ctrl-D" verschieben Sie den Bildschirminhalt um eine halbe Seite nach unten.

Eine Bildschirmseite zurück

Mit Ctrl-B" zeigen Sie die vorhergehende Bildschirmseite an.

Eine halbe Bildschirmseite nach oben

Mit Ctrl-U" verschieben Sie den Bildschirminhalt um eine halbe Seite nach oben.

6.5.2 Text eingeben

vi verfügt über eine ganze Reihe von Befehlen für die Texteingabe, von denen hier nur die wichtigsten vorgestellt werden. Mit jedem dieser Befehle wechseln Sie gleichzeitig in den Eingabemodus. Wenn Sie sich bereits im Eingabemodus befinden, müssen Sie zuerst mit Esc" in den Befehlsmodus zurückkehren.

6.5.2.1 Text anhängen

Mit dem Befehl a legen Sie fest, daß der danach eingegebene Text rechts vom Cursor erscheinen soll. Bewegen Sie den Cursor jetzt auf eine Leerzeile, geben Sie a und danach den gewünschten Text ein, und drücken Sie nach der Eingabe Esc".

Soll der eingegebene Text am Ende der aktuellen Zeile erscheinen, geben Sie statt dessen A ein. Bewegen Sie den Cursor auf eine Textzeile, geben Sie A und den gewünschten Text ein und drücken Sie zum Schluß Esc".

6.5.2.2 Text einfügen

Mit dem Befehl i legen Sie fest, daß der neue Text links vom Cursor eingesetzt werden soll.

Wenn Sie stattdessen I eingeben, wird der Text am Anfang der aktuellen Zeile eingefügt. Probieren Sie beide Befehle aus, und wechseln Sie danach mit Esc" in den Befehlsmodus zurück.

6.5.2.3 Leerzeilen einfügen

Mit den folgenden Befehlen fügen Sie über oder unter der aktuellen Cursorposition neue Zeilen ein.

Mit o öffnen Sie eine Zeile unter der aktuellen Zeile. Geben Sie jetzt o und ein oder mehrere Textzeilen ein, und drücken Sie zum Schluß wieder Esc".

Mit O öffnen Sie eine Zeile über der aktuellen Zeile.

6.5.3 Text ändern

Wenn Sie Text ändern, ersetzen Sie einen Textblock durch einen anderen. vi bietet dafür mehrere Möglichkeiten.

6.5.3.1 Wörter ersetzen

Um ein Wort durch ein anderes zu ersetzen, setzen Sie den Cursor im Befehlsmodus an den Anfang des Worts und geben cw und danach das neue Wort ein. Danach wechseln Sie mit Esc" zurück in den Befehlsmodus.

Um ein Wort teilweise zu ersetzen, bewegen Sie den Cursor auf das erste Zeichen des zu löschenden Teils, geben cw und die neue Zeichenfolge ein und drücken zum Schluß Esc".

6.5.3.2 Zeilen ersetzen

Um eine Zeile zu ersetzen, bewegen Sie den Cursor auf ein beliebiges Zeichen in der Zeile und geben cc ein. Die Zeile wird geleert, d. h. es bleibt eine Leerzeile zurück, in die Sie neuen Text eingeben können. Drücken Sie zum Abschluß Esc".

6.5.3.3 Zeilen teilweise ersetzen

Um einen Teil einer Zeile zu ersetzen, bewegen Sie den Cursor auf das erste Zeichen des zu löschenden Teils, geben C und den neuen Text ein und drücken zum Schluß Esc". Damit werden alle Zeichen von der Cursorposition bis zum Ende der Zeile gelöscht und durch den neu eingegebenen Text ersetzt.

6.5.3.4 Zeichen ersetzen

Um ein Zeichen durch eines oder mehrere andere Zeichen zu ersetzen, bewegen Sie den Cursor auf das Zeichen, geben s und die neuen Zeichen ein und drücken Esc", um in den Befehlsmodus zurückzukehren.

6.5.3.5 Einzelne Zeichen ersetzen

Wenn Sie ein Zeichen durch ein einzelnes anderes Zeichen ersetzen wollen, bewegen Sie den Cursor auf das zu löschende Zeichen und geben r und das neue Zeichen ein. Bei diesem Befehl brauchen Sie Esc" nicht zu drücken, da vi automatisch in den Befehlsmodus zurückkehrt.

6.5.3.6 Zeichen vertauschen

Verdreher" lassen sich mit vi recht einfach korrigieren. Nehmen wir an, Sie haben "udn" statt "und" eingegeben. Um den Fehler zu korrigieren, bewegen Sie den Cursor auf das erste Zeichen, das vertauscht werden soll (also das d) und geben xp ein. Das d und das h werden vertauscht, und vi wechselt automatisch zurück in den Befehlsmodus.

6.5.3.7 Zeilen teilen oder zusammenführen

Um eine Zeile zu teilen, ohne den Text zu verändern, setzen Sie den Cursor auf ein Leerzeichen in der Zeile, geben r ein und drücken Return". Steht der Cursor dabei auf einem Zeichen, wird es durch das Zeichen Return" (also eine Zeilenschaltung) ersetzt.

Um zwei Zeilen zusammenzuführen, setzen Sie den Cursor auf die obere Zeile und geben J ein. vi bleibt dabei im Befehlsmodus, so daß Sie Esc" nicht zu drücken brauchen.

6.5.4 Änderungen aufheben

Wenn Sie Text versehentlich ändern oder eine Änderung nicht das gewünschte Ergebnis hat, können Sie mit einem der folgenden Befehle den ursprünglichen Zustand wiederherstellen.

6.5.4.1 Letzten Befehl rückgängig machen

Mit dem Befehl u machen Sie den zuletzt eingegebenen Befehl rückgängig. (vi bleibt dabei im Befehlsmodus.) Wenn Sie u ein zweites Mal drücken, wird u selbst rückgängig gemacht, d. h. die Änderung wird wiederhergestellt.

6.5.4.2 Zeilenänderungen rückgängig machen

Mit dem Befehl U nehmen Sie alle Änderungen zurück, die Sie in der aktuellen Zeile gemacht haben, seitdem sich der Cursor darin befindet. Auch bei diesem Befehl brauchen Sie nach der Eingabe nicht Esc" zu drücken.

6.5.5 Text löschen

Mit den folgenden Befehlen löschen Sie Zeichen, Wörter oder ganze Zeilen. vi bleibt dabei im Befehlsmodus, so daß Sie vor Eingabe neuer Zeichen zuerst in den Eingabemodus wechseln müssen.

6.5.5.1 Einzelne Zeichen löschen

Mit dem Befehl x löschen Sie das Zeichen an der Cursorposition.

Wenn Sie ein Zeichen innerhalb einer Zeile löschen, werden die rechts davon stehenden Zeichen um eine Stelle nach links verschoben, so daß keine Lücke zurückbleibt. Sie können mit x auch Leerzeichen löschen.

Um das Zeichen links vom Cursor zu löschen, geben Sie X ein.

6.5.5.2 Wörter ganz oder teilweise löschen

Um ein Wort zu löschen, setzen Sie den Cursor auf das erste Zeichen des Worts und geben dw ein. Soll nur ein Teil des Worts gelöscht werden, setzen Sie den Cursor auf das erste zu löschende Zeichen.

6.5.5.3 Zeilen löschen

Um eine Zeile zu löschen, setzen Sie den Cursor auf ein beliebiges Zeichen in der Zeile und geben dd ein. Damit löschen Sie nicht nur den Text in der Zeile, sondern auch die Zeile selbst.

6.5.5.4 Zeilen teilweise löschen

Sie können auch nur einen Teil einer Zeile löschen.

Wenn Sie nur einen Teil einer Zeile löschen wollen, setzen Sie den Cursor auf das erste zu löschende Zeichen und geben D ein. Damit löschen Sie alle Zeichen von der Cursorposition bis zum Zeilenende.

Um alle Zeichen von der Cursorposition bis zum Zeilenanfang zu löschen, geben Sie statt dessen d0 (d-Null) ein.

6.5.5.5 Bis zum Dateiende löschen

Um den gesamten Text von der aktuellen Zeile bis zum Dateiende zu löschen, geben Sie dG ein. Die aktuelle Zeile wird dabei ebenfalls gelöscht.

6.5.5.6 Bis zum Dateianfang löschen

Um den gesamten Text von der aktuellen Zeile bis zum Dateianfang zu löschen, geben Sie d1G ein. Die aktuelle Zeile wird dabei ebenfalls gelöscht.

6.5.6 Text kopieren und übertragen

In vielen Textverarbeitungsprogrammen können Sie Text kopieren oder ausschneiden und an einer anderen Stelle wieder einsetzen. vi bietet die gleichen Funktionen, die im Englischen yank and put (Kopieren und Einsetzen) und delete and put (Ausschneiden und Einsetzen) heißen.

6.5.6.1 Zeilen kopieren

Beim Kopieren von Zeilen verwenden Sie zwei Befehle: yy oder Y (diese beiden Befehle haben die gleiche Funktion) und p (unten einsetzen) oder P (oben einsetzen).

Um die Zeile zu kopieren, setzen Sie den Cursor auf ein beliebiges Zeichen in der Zeile und geben yy ein. Danach bewegen Sie den Cursor auf die Zeile, unter der die kopierte Zeile eingefügt werden soll, und geben p ein.

Soll die kopierte Zeile über der aktuellen Zeile eingesetzt werden, geben Sie P ein.

Der Befehl yy kann auch auf mehrere Zeilen angewendet werden: Mit 11yy kopieren Sie beispielsweise die aktuelle Zeile und die folgenden zehn Zeilen. Dabei erscheint in der Statuszeile die Meldung 11 Zeilen kopiert.

Die Befehle P und p können auch zusammen mit den zuvor beschriebenen Löschbefehlen verwendet werden, um gelöschten Text über oder unter der Cursorposition wieder einzusetzen.


Achtung - Achtung -

GraphicDa gelöschte oder kopierte Textblöcke in einen Puffer übertragen werden, dürfen Sie vor dem Einsetzen eines Blocks nur Befehle verwenden, mit denen der Cursor bewegt wird. Wenn Sie einen anderen Textblock löschen oder kopieren, wird der Inhalt des Puffers überschrieben.


6.5.6.2 Zeilen bewegen

Beim Bewegen von Zeilen verwenden Sie ebenfalls zwei Befehle: dd und p oder P.

Um eine Zeile zu bewegen, setzen Sie den Cursor auf die Zeile und geben dd ein. Damit löschen Sie die Zeile und übertragen sie in den Puffer. (Sie können auch mehrere Zeilen löschen. Mit 5dd löschen Sie beispielsweise die aktuelle Zeile und die darunterstehenden vier Zeilen.)

Danach bewegen Sie den Cursor auf die Zeile, unter der die gelöschte Zeile eingefügt werden soll, und geben p ein.

Soll die gelöschte Zeile über der aktuellen Zeile eingesetzt werden, geben Sie P ein.

6.5.6.3 Benannte Puffer

Der Inhalt des Standardpuffers wird, wie bereits erwähnt, jedesmal überschrieben, wenn Sie einen neuen Textblock löschen oder kopieren. Wenn Sie eine oder mehrere Zeilen an verschiedenen Stellen einer Datei einsetzen wollen, können Sie sie in einen benannten Puffer löschen bzw. kopieren. Der Inhalt eines benannten Puffers wird erst überschrieben, wenn Sie eine andere Zeilengruppe explizit darin ablegen.

Um eine oder mehrere Zeilen in einem benannten Puffer zu speichern, stellen Sie vor den Lösch- oder Kopierbefehl ein doppeltes Anführungszeichen (") und den Namen des Puffers. Mit dem Befehl "a4yy kopieren Sie beispielsweise die aktuelle Zeile und die folgenden drei Zeilen in einen Puffer namens a". Mit dem Befehl "b12dd löschen Sie 12 Zeilen in einen Puffer namens b". Sie können auch mehrere Puffer verwenden.

Um Text aus einem Puffer in die Datei einzusetzen, stellen Sie vor den Befehl p oder P ein doppeltes Anführungszeichen und den Namen des Puffers (z. B. "bP).

Wenn Sie die aktuelle Arbeitssitzung beenden, wird der Inhalt aller benannten Puffer gelöscht.

6.5.7 Befehle wiederholen

Viele vi-Befehle können zusammen mit einem Zähler eingegeben werden, d. h. mit einer Zahl, die vor dem Befehl steht und angibt, wie oft der Befehl wiederholt werden soll.

Die meisten der bisher behandelten Befehle unterstützen Zähler. Mit 3dd weisen Sie vi beispielsweise an, den Befehl dd dreimal auszuführen und so die aktuelle Zeile und die beiden darauffolgenden Zeilen zu löschen. Mit 2dw löschen Sie zwei Wörter, mit 4x vier Zeichen usw. Zähler können auch bei der Cursorsteuerung verwendet werden. Mit 2Ctrl-F" wechseln Sie zum Beispiel zur übernächsten Bildschirmseite. In den Beschreibungen der weiteren vi-Befehle werden Sie andere Möglichkeiten für die Verwendung von Zählern kennenlernen. Im Abschnitt "6.12 Befehlsübersicht"am Ende dieses Kapitels ist zu Befehlen, die Zähler unterstützen, ein entsprechendes Beispiel angegeben.

Durch Eingabe eines Punkts (.) wiederholen Sie den letzten Textbearbeitungsbefehl. Wenn Sie beispielsweise gerade eine Zeile mit dd gelöscht haben und eine weitere Zeile löschen wollen, setzen Sie den Cursor in diese Zeile und geben einen Punkt ein.

6.6 ex-Befehle

Wenn Sie mit größeren Textblöcken arbeiten, sind ex-Befehle praktischer als die zuvor beschriebenen vi-Befehle. Anstatt die zu löschenden oder zu kopierenden Zeilen zu zählen und dann einen Einfügepunkt zu setzen, geben Sie einfach einen Zeilenbereich an und legen fest, nach welcher Zeilennummer diese Zeilen eingesetzt werden sollen.

6.6.1 Zeilennummern anzeigen

Um die Bildschirmzeilen zu numerieren, geben Sie type :set nu ein und drücken Return".

Die Zeilennummern werden am linken Bildschirmrand angezeigt. Wenn Sie die Datei drucken, werden die Nummern nicht ausgegeben.

1 Wir träumen von Reisen durch das Weltall -

2 Ist denn das Weltall nicht in uns?

3 Die Tiefen unseres Geistes kennen wir nicht -

4 Nach innen der geheimnisvolle Weg.

5 In uns, oder nirgends ist die Ewigkeit mit ihren Welten -

6 die Vergangenheit und Zukunft.

7

8 Novalis

~

~

~

~

~

~

:set nu

Um die Ausgabe der Zeilennummern zu deaktivieren, geben Sie :set nonu ein und drücken Return".

6.6.2 Zeilen kopieren

Der Kopierbefehl von ex wird in folgendem Format eingegeben:

:zeile#,zeile# co zeile#

Die beiden ersten, durch ein Komma getrennten Zeilennummern geben den zu kopierenden Bereich an. Die dritte Nummer bezeichnet die Zeile, unter der die kopierten Zeilen eingefügt werden sollen.

Um die Zeilen 1 bis 5 in der Datei test zu kopieren und unter der Zeile 12 einzusetzen, würden Sie also folgendes eingeben:

:1,5 co 12

Schließen Sie die Eingabe mit Return" ab.

Bei der Angabe des Zeilenbereichs können Sie zwei Abkürzungen verwenden:

Mit dem folgenden Befehl kopieren Sie den Bereich von der aktuellen Zeile bis Zeile 5 und setzen die kopierten Zeilen nach Zeile 12 ein:

:.,5 co 12

Mit dem folgenden Befehl kopieren Sie alle Zeilen von Zeile 6 bis zum Dateiende und setzen die kopierten Zeilen nach Zeile 2 ein:

:6,$ co 2

6.6.3 Zeilen bewegen

Der Befehl zum Bewegen von Zeilen ist dem oben beschriebenen Kopierbefehl sehr ähnlich:

:zeile#,zeile# m zeile#

Zeilenbereich und Einfügepunkt werden ebenso angegeben wie beim Kopieren von Zeilen. Die Abkürzungen . und $ sind ebenfalls zulässig. Der Bereich wird hier jedoch nicht kopiert, sondern ausgeschnitten und an einer anderen Stelle wieder eingesetzt.

Um die Zeilen 1 bis 5 zu löschen und nach Zeile 12 wieder einzusetzen, geben Sie folgenden Befehl ein und drücken Return":

:1,5 m 12

6.6.4 Zeilen löschen

Mit folgendem Befehl löschen Sie eine Gruppe von Zeilen:

:zeile#,zeile# d

Um die Zeilen 1 bis 5 zu löschen, geben Sie also folgendes ein:

:1,5 d

6.7 Text suchen und ersetzen

vi bietet mehrere Befehle, mit denen Sie innerhalb einer Datei nach Zeichenfolgen suchen und diese durch andere Zeichenfolgen ersetzen können.

6.7.1 Zeichenfolgen suchen

Eine Zeichenfolge ist eine beliebige Kombination aus Buchstaben, Zahlen, Satzzeichen und Sonderzeichen wie Tabs, Zeilenschaltungen und Leerzeichen. Zeichenfolgen können aus einem Teil eines Worts, einem vollständigen Wort oder mehreren Wörtern bestehen.

Um ab der aktuellen Cursorposition in Richtung Dateiende nach einer Zeichenfolge zu suchen, geben Sie einen Schrägstrich (/) und den Suchtext ein und schließen die Eingabe mit Return" ab. Der Cursor springt daraufhin auf die nächste Stelle, an der die Zeichenfolge vorkommt.

Wenn in Richtung Dateianfang gesucht werden soll, geben Sie statt / das Zeichen ? ein. Damit wird die Suchrichtung von n und N umgekehrt.

Danach können Sie den Suchvorgang mit n und N beliebig oft wiederholen, wobei n immer in Standardrichtung und N in umgekehrter Richtung sucht.

Normalerweise wird Groß- und Kleinschreibung beachtet, d. h. wenn Sie nach modus" suchen, wird Modus" nicht gefunden. Soll die Schreibweise ignoriert werden, geben Sie :set ic ein. Diese Einstellung gilt dann solange, bis Sie sie mit :set noic deaktivieren.

Ist die gesuchte Zeichenfolge nicht vorhanden, wird in der Statuszeile die Meldung Muster nicht gefunden angezeigt.

Einige Sonderzeichen ( / & ! . ^ * $ \ ?) haben bei Suchläufen spezielle Bedeutung und müssen daher durch einen vorangestellten Gegenschrägstrich entwertet werden, wenn sie als normale Textzeichen interpretiert werden sollen. Um beispielsweise nach der Zeichenfolge wieso?" zu suchen, geben Sie /wieso\? ein und drücken Return". Um einen Gegenschrägstrich zu entwerten, geben Sie \\ ein.

Die Verwendung dieser Sonderzeichen als Befehle bei einem Suchlauf wird im folgendem Abschnitt beschrieben.

6.7.2 Suchoptionen

Um genauer zu suchen, können Sie in der Zeichenfolge bestimmte Suchkriterien durch Sonderzeichen angeben:

Der Zirkumflex (^) steht für den Anfang einer Zeile. Mit folgendem Befehl suchen Sie nach der nächsten Zeile, die mit der Zeichenfolge Test" beginnt:

/^Test

Das Dollarzeichen ($) steht für das Ende einer Zeile. Mit folgendem Befehl suchen Sie nach der nächsten Zeile, die mit test." endet (da der Punkt auch als Suchkriterium verwendet werden kann, muß er entwertet werden):

/test\.$

Die Zeichenkombinationen \< und \> stehen für den Anfang bzw. das Ende eines Worts und werden an den Anfang und das Ende des Suchtexts gestellt. Auf diese Weise können Sie den Editor anweisen, nach vollständigen Wörtern zu suchen. Bei Eingabe des folgenden Befehls wird also nur das Wort Test" selbst gefunden, andere Wörter, die mit Test" beginnen, dagegen nicht:

/\<Test\>

Der Punkt (.) steht für ein beliebiges Zeichen. Mit dem folgenden Befehl wird sowohl nach Test" wie nach Text" gesucht:

/Te.t

Da Sie hier nach einer Zeichenfolge und nicht nach einem Wort suchen, werden auch Wörter wie Testlauf" oder Textverarbeitung" gefunden.

Es gibt noch eine weitere, vielseitigere Möglichkeit, nach verschiedenen Schreibweisen einer Zeichenfolge zu suchen. Dabei setzen Sie die alternativ zu verwendenden Zeichen in eckige Klammern. Wenn Sie /[mh]zeichenfolge eingeben, kann die gesuchte Zeichenfolge also mit m" oder h" beginnen. Geben Sie statt dessen /[d-m]zeichenfolge ein, kann die Zeichenfolge mit einem beliebigen Buchstaben von d" bis m" beginnen.

Der Stern (*) steht für eine beliebige Anzahl (auch Null) des vorhergehenden Zeichens. Durch Kombination mit den Klammern läßt sich die Suche weiter präzisieren. Um zum Beispiel nach allen Zeichenfolgen zu suchen, die mit einem beliebigen Buchstaben beginnen und mit ist" enden, und dabei auch die Zeichenfolge ist" selbst einzuschließen, geben Sie folgendes ein:

/[a-z]*ist

6.7.3 Zeichenfolgen ersetzen

Wenn Sie eine Zeichenfolge im gesamten Text durch eine andere ersetzen wollen, geben Sie den Suchbefehl in folgendem Format ein:

:g/suchtext/s//ersatztext/g

Die Eingabe wird mit Return" abgeschlossen. Alle im vorherigen Abschnitt beschriebenen Sonderzeichen können auch beim Ersetzen von Zeichenfolgen verwendet werden.

Um die Zeichenfolge Computer" durch Workstation" zu ersetzen, würden Sie also folgendes eingeben:

:g/Computer/s//Workstation/g

Wenn Sie nicht sicher sind, ob Sie eine Zeichenfolge überall ersetzen wollen, beenden Sie den Befehl mit gc statt mit g. In diesem Fall werden Sie bei jeder gefundenen Textstelle gefragt, ob die Zeichenfolge tatsächlich ersetzt werden soll. Sie können dann mit y (ja) oder n (nein) antworten.

:g/Computer/s//Workstation/gc


Hinweis -

Wenn der Suchlauf mit Bestätigung durchgeführt wird, können Sie ihn mit Ctrl-C" abbrechen.


6.7.4 Zeilenwechsel

Mit dem Befehl G springen Sie zur letzten Zeile einer Datei. Um in eine beliebige andere Zeile zu wechseln, geben Sie vor dem Befehl die Nummer der gewünschten Zeile ein. Mit 1G setzen Sie den Cursor also in die erste Zeile der Datei.

Wenn Sie die Datei test beispielsweise bis Zeile 51 bearbeitet und die Arbeitssitzung danach beendet haben, geben Sie nach dem nächsten Öffnen einfach 51G ein und können dann an der Stelle weiterarbeiten, an der Sie zuvor aufgehört hatten.

6.8 Dateien verknüpfen

Mit folgendem Befehl können Sie den Inhalt einer Datei an einer beliebigen Stelle in die aktuell bearbeitete Datei einsetzen:

:zeile# r dateiname

Wenn Sie keine Zeilennummer angeben, wird die Datei an der aktuellen Cursorposition eingefügt.

Um die Datei orwell nach Zeile 84 der Datei test einzusetzen, würden Sie also folgendes eingeben:

:84 r orwell

Sie könnten statt dessen auch den Cursor in Zeile 84 setzen und folgenden Befehl eingeben:

:r orwell

6.9 Mehrere Dateien bearbeiten

Sie können mit vi auch mehrere Dateien in einer Editorsitzung bearbeiten. Um beispielsweise zwischen der Datei test und einer Datei namens orwell: zu wechseln, gehen Sie folgendermaßen vor:

  1. Geben Sie :w ein, und drücken Sie Return", um die aktuellen Änderungen an der Datei test zu speichern.

  2. Geben Sie :n orwell ein, und drücken Sie Return", um die Datei orwell zu laden.

  3. Bearbeiten Sie die Datei orwell, und speichern Sie die Änderungen.

  4. Danach haben Sie folgende Möglichkeiten:

    • vi beenden durch Eingabe von :q und Return".

    • Rückkehr zu test durch Eingabe von :n # und Return".

    • Wechseln zwischen den Dateien mit :n #.

6.9.1 Dateien nacheinander bearbeiten

Wenn Sie mehrere Dateien nacheinander bearbeiten wollen, geben Sie beim Aufruf von vi die Namen der Dateien an:

$ vi test orwell

Die Dateien werden in der Reihenfolge geladen, in der sie in der Befehlszeile aufgeführt sind. In unserem Beispiel erscheint also zuerst test. Wenn Sie mit der Bearbeitung dieser Datei fertig sind, geben Sie :n ein, um zur Datei orwell zu wechseln. Wenn Sie zur nächsten Datei übergehen wollen, ohne die Änderungen in der aktuellen Datei zu speichern, geben Sie :n! ein.

Haben die zu bearbeitenden Dateien ähnliche Namen (z. B. test1, test2, test3), können Sie bei der Eingabe der Dateinamen Platzhalter verwenden:

$ vi test*

In diesem Fall werden die Dateien in alphabetischer Reihenfolge geladen.

6.9.2 Zeilen zwischen Dateien kopieren

Um Zeilen aus einer Datei in eine andere Datei zu kopieren, gehen Sie wie folgt vor:

  1. Bearbeiten Sie die erste Datei.

  2. Kopieren Sie die gewünschten Zeilen in einen benannten Puffer. Verwenden Sie hierzu den Befehl yank. Um z. B. 10 Zeilen in Puffer a zu speichern, geben sie a10y ein.

  3. Wechseln Sie zur nächsten Datei (hier ist es die Datei orwell), ohne vi zu verlassen:

    :n orwell
    

  4. Setzen Sie den Inhalt des benannten Puffers in die Datei ein. Verwenden Sie hierzu den Befehl put. Um beispielsweise den Inhalt von Puffer a unterhalb der aktuellen Cursorposition einzusetzen, geben Sie ap ein.

    Da der Inhalt benannter Puffer verlorengeht, wenn Sie vi beenden, müssen Sie Prozeduren wie die zuvor beschriebene immer während der aktuellen Arbeitssitzung abschließen.

6.10 vi-Parameter setzen

vi unterstützt eine Reihe von Optionen, mit denen Sie das Verhalten des Editors beeinflussen können. Um diese Optionen während einer Arbeitssitzung anzuzeigen, geben Sie folgenden Befehl ein:

:set all

Schließen Sie die Eingabe mit Return" ab.

6.11 Neustart nach einem Systemabsturz

Wenn Ihr System abstürzt, besteht die Gefahr, daß der Inhalt des Dateipuffers verlorengeht. Der Pufferinhalt läßt sich jedoch durch einen Neustart von vi mit der Option -r häufig ganz oder teilweise wiederherstellen:

vi -r dateiname

dateiname ist der Name der Datei, die zum Zeitpunkt des Systemabsturzes bearbeitet wurde. In der Regel werden Sie nach dem Wiederhochfahren des Systems per elektronische Post informiert, daß eine Recover-Datei vorhanden ist.

6.12 Befehlsübersicht

In der folgenden Tabelle sind die wichtigsten vi-Befehle zusammengefaßt.

Tabelle 6-1 vi-Befehle

Befehl 

Beschreibung 

vi starten

vi dateiname

Öffnet eine Datei oder erstellt eine neue Datei 

vi

Öffnet eine neue Datei ohne Namen 

vi -r dateiname

Stellt eine Datei nach einem Systemabsturz wieder her 

view dateiname

Öffnet eine Nur-Lese-Datei 

Cursorbefehle

h

Ein Zeichen nach links 

Eine Zeile nach unten 

Eine Zeile nach oben 

Ein Zeichen nach rechts 

Zum nächsten Wort oder Satzzeichen 

Zum nächsten Wort 

Zum vorhergehenden Wort oder Satzzeichen 

Zum vorhergehenden Wort 

An das Ende des aktuellen Worts 

Return 

Eine Zeile nach unten 

Rücktaste 

Ein Zeichen nach links 

Leertaste 

Ein Zeichen nach rechts 

H

Zur ersten Bildschirmzeile 

M

Zur Mitte des Bildschirms 

L

Zur letzten Bildschirmzeile 

Ctrl-F" 

Zur nächsten Bildschirmseite 

Ctrl-D" 

Eine halbe Bildschirmseite nach unten 

Ctrl-B" 

Zur vorhergehenden Bildschirmseite 

Ctrl-U" 

Eine halbe Bildschirmseite nach oben 

Texteingabe

a

Zeichen rechts vom Cursor einfügen 

A

Zeichen am Zeilenende einfügen 

i

Zeichen links vom Cursor einfügen 

I

Zeichen am Zeilenanfang einfügen 

o

Zeile unter dem Cursor einfügen 

O

Zeile über dem Cursor einfügen 

Textänderung

cw

Wort rechts vom Cursor ändern 

cc

Zeile ändern 

C

Zeile ab Cursorposition ändern 

s

Zeile bis Cursorposition ändern 

r

Aktuelles Zeichen ersetzen 

r Return

Zeile teilen 

J

Aktuelle und darunterstehende Zeile zusammenführen 

xp

Aktuelles und rechts davon stehendes Zeichen vertauschen 

~

Groß-/Kleinschreibung umkehren)

u

Letzten Befehl rückgängig machen 

U

Alle Änderungen an der aktuellen Zeile aufheben 

:u

Letzten ex-Befehl rückgängig machen

Löschen

x

Aktuelles Zeichen löschen 

X

Zeichen links vom Cursor löschen 

dw

Wort rechts vom Cursor ganz oder teilweise löschen 

dd

Aktuelle Zeile löschen 

D

Zeile ab Cursorposition löschen 

dG

Dateiinhalt ab Cursorposition löschen 

d1G

Dateiinhalt bis Cursorposition löschen 

:5,10 d

Zeilen 5-10 löschen 

Kopieren und Bewegen

yy

Zeile kopieren 

Y

Zeile kopieren 

p

Pufferinhalt unter der aktuellen Zeile einsetzen 

P

Pufferinhalt über der aktuellen Zeile einsetzen 

:1,2 co 3

Zeilen 1-2 kopieren und nach Zeile 3 einsetzen 

:4,5 m 6

Zeilen 4-5 ausschneiden und nach Zeile 6 einsetzen 

Zeilennummern

:set nu

Zeilennummern anzeigen 

:set nonu

Zeilennummern ausblenden 

 

Groß-/Kleinschreibung

:set ic

Groß-/Kleinschreibung bei Suchläufen ignorieren 

:set noic

Groß-/Kleinschreibung bei Suchläufen beachten 

Zeilenwechsel

G

Zur letzten Zeile springen 

1G

Zur ersten Zeile springen 

21G

Zu Zeile 21 springen 

Suchen und Ersetzen

/zeichenfolge

Vorwärts nach zeichenfolge suchen

?zeichenfolge

Rückwärts nach zeichenfolge suchen

n

Nächste zeichenfolge in Suchrichtung finden

N

Vorhergehende zeichenfolge in Suchrichtung finden

:g/suche/s//ersetze/g

suche im gesamten Text durch ersetze ersetzen

Bildschirm

Ctrl-L" 

Bildschirminhalt neu zeichnen 

 

Dateien verknüpfen

:r dateiname

dateiname an Cursorposition einsetzen

:34 r dateiname

dateiname nach Zeile 34 einsetzen

Speichern und Beenden

:w

Änderungen speichern 

:w dateiname

Änderungen in dateiname speichern

:wq

Änderungen speichern und Arbeitssitzung beenden 

ZZ

Änderungen speichern und Arbeitssitzung beenden 

:q!

Arbeitssitzung ohne Speichern beenden