Solaris Handbuch für Fortgeschrittene Benutzer

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.