Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung


'Wie werde ich Unix-Guru' als Buch bestellen
A. Willemer
Wie werde ich UNIX-Guru
I  ANWENDUNG
Know-How für Unix/Linux-User: Einführung, Shell, Befehle, Hilfe, Arbeit mit Dateien, Editoren, Reguläre Ausdrücke, nützliche Tools, Hardware.

II  ADMINISTRATION
Tools, Systemstart, Benutzer verwalten, Hardware konfigurieren, Software installieren, Datensicherung, Tuning, Kernel

III  NETZWERK
Client/Server Systeme, TCP/IP, Routing, IPv6, Internet-Dienste, DHCP, Webserver, Firewalls

IV  DAS X-WINDOW SYSTEM
Die grafische Oberfläche von UNIX einrichten und nutzen

V  PROGRAMMIERUNG VON SHELLSKRIPTEN
Automatisieren von Tasks durch Shell-Skripte.

VI  PERL
Interpreter, Syntax, Variablen, Steuerung, Funktionen, UNIX-Aufrufe, GUIs mit Tk

VII  PROGRAMMIERWERKZEUGE
C-Compiler, Analyse-Tools, CVS, yacc, diff

VIII  UNIX-SYSTEMAUFRUFE
UNIX-Befehle in eigenen Programmen nutzen

IX  LITERATUR
Weiterführende Literatur zu UNIX und LINUX

 
Galileo Computing / <openbook> / "Wie werde ich UNIX-Guru ?"
« Editoren Editoren emacs »

Unterabschnitte
  • Verlassen
  • Starten des vi
  • Bewegungen durch den Text im Kommandomodus
  • Suchen im Text
  • Editieren
  • Löschen und Kopieren
    • Zeilenvorschub löschen

  • Geklammerte Bereiche
  • Mehrfachausführung
  • Mach's nochmal, vi!
  • Schief gelaufen
  • Wichtige Befehle des Befehlsmodus
  • Ersetzen
  • Settings

vi

Der 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 sed (siehe S. sed). Sie betreffen in erster Linie den Text als Ganzes, beispielsweise das Sichern und Wechseln von Texten.


[gpAbbildung1029]

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.

Verlassen

Das 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 :q! ignorieren oder mit :wq (write quit) die Änderungen vor dem Verlassen sichern.

[wie man vi verlässt]L|L Befehl & Wirkung
ESC :q & verlassen von vi
ESC :q! & verlassen von vi und verwerfen aller Änderungen
ESC :wq & verlassen von vi und vorheriges Sichern unter dem bisherigen Namen

Starten des vi

Wollen Sie eine Datei erstellen, geben Sie vi, gefolgt von dem Namen der neuen Datei, an. Sie landen in einem Bildschirm, auf dem alle Zeilen mit einer Tilde beginnnen. Am Ende des Bildschirms stehen der Name der Datei und die Position. Das Tildezeichen soll anzeigen, dass das Ende des Textes erreicht ist. Um etwas einzugeben, tippen Sie ein kleines i (insert). Sie sehen an der Statuszeile, dass vi in den Einfügemodus gewechselt ist. Sie können nun einige Zeilen Text eingeben, Tippfehler sollten Sie zunächst ignorieren. Ist der Text eingegeben, erreichen Sie mit ESC wieder den Kommandomodus. Nun sollten Sie den Text sichern, indem Sie mit einem Doppelpunkt in den Befehlsmodus wechseln. Geben Sie w (write) ein, und der Text wird gesichert. Als Dateiname wird derjenige verwandt, den Sie beim Start von vi angaben. Man kann nun vi wieder mit :q verlassen.

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 Kommandomodus

Auf 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
ein Zeichen & h oder Backspace & Leertaste
ein Wort & b & w
Zeilenanfang/-ende & ^ & $
an die n-te Spaltenposition & & n|
Zeile & - & +
Seite & ctrl-F & ctrl-B
zur Zeile n & nG &
Textanfang/-ende & 1G & G

Suchen im Text

vi 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.

Editieren

Um 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
i & einfügen (engl. insert) an der Cursorstelle
I & einfügen vor dem ersten Wort der Zeile
a & hinter der Cursorstelle einfügen (engl. append)
A & an das Ende der Zeile anhängen

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
cw & Wort
c$ & bis Ende der Zeile
cc & aktuelle Zeile
cl oder r & Zeichen
R & geht in den Überschreibmodus bis zum ESC

Löschen und Kopieren

Das 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
dw & Wort
d$ & bis Ende der Zeile
dd & aktuelle Zeile
dl oder x & Zeichen

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
yw & Wort
y$ & bis Ende der Zeile
yy & aktuelle Zeile

Zeilenvorschub löschen

Um 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 Bereiche

Fü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
% & springt von dieser Klammer zur korrespondierenden Klammer
d% & löscht alles zwischen dieser und der korrespondierenden Klammer
c% & ersetzt alles zwischen dieser und der korrespondierenden Klammer
y% & schiebt alles zwischen den Klammern in den Puffer
<% bzw. >% & Ein- bzw. Ausrücken des eingeklammerten Bereichs

Mehrfachausführung

Soll 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
4dw & löscht die nächsten vier Wörter
5cw & ersetzt die nächsten fünf Wörter durch die Eingabe bis zum ESC
77i - ESC & erzeugt 77 Bindestriche
3cl & ersetzt die nächsten drei Zeichen durch die Eingabe
12yy & kopiert die nächsten zwölf Zeilen in den Kopierpuffer

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 gelaufen

Wenn 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 :w sicher den Text unter dem Namen sicher. Anschließend kann man mit dem Kommando diff (siehe S. diff) ermitteln, welche Unterschiede zwischen sicher und dem letzten Stand bestehen.

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 Befehlsmodus

Der 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 :!ls aus!

[Wichtige Befehle]L|L Befehl & Wirkung
:n & Lädt die nächste Datei, falls vi mit mehreren Dateien gestartet wurde
:r Datei & Lädt die Datei an der Cursorposition hinzu
:d & Löscht Zeile
:! Kommando & Startet eine Shell, um das Kommando abzusetzen

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
25 & die Zeile 25
5,25 & der Bereich von Zeile 5 bis 25
.,25 & der Bereich von der aktuellen Zeile bis Zeile 25
25,$ & von Zeile 25 bis Dateiende
.,$ & von der aktuellen Zeile bis zum Dateiende

Ersetzen

Um 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 grep verwendet wird (siehe S. regexp).

Settings

Um Optionen ein- oder abzuschalten, geht man zunächst mit dem Doppelpunkt in den Befehlsmodus und gibt dort set, gefolgt von der Option, an. Man kann vi durch viele Optionen konfigurieren. Die verschiedenen Implementationen bieten da unterschiedliche Möglichkeiten. Um eine Übersicht zu erhalten, gibt man set all an und blättert mit der Leertaste durch die Seiten. Mit ESC kommt man in den Kommandomodus zurück.

[Schalter]L|L|L Einschalten & Ausschalten & Wirkung
set all & & zeigt die aktuellen Settings an
set list & set nolist & zeigt Sonderzeichen an
set sw n & & (shiftwidth) setzt Einrücklevel auf n Stellen
set ai & set noai & (autoinsert) Automatisches Einrücken
set nu & set nonu & (number) Zeilennummern anzeigen
set smd & set nosmd & (showmode) zeigt den Textmodus an
set sm & set nosm & (showmatch) Anzeige der Gegenklammer bei Eingabe

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 nowrap schaltet man es ab, mit wrap wieder ein. Bei der Texteingabe wird erst bei Return eine neue Zeile erzeugt. Dieses kann man durch wm (wrapmargin) ändern. Gibt man eine Zahl ungleich 0 an, wird so viele Zeichen vor dem Erreichen des rechten Rands umbrochen. Dabei umbricht vi immer wortweise. Er nimmt also das angefangene Wort mit in die neue Zeile und fügt davor ein Zeilenumbruchzeichen (new line) ein.



« Editoren | Editoren | emacs »
 
 Zum Katalog
Zum Katalog
Wie werde ich UNIX-Guru?
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 UNIX/Linux

PHP 4-Workshop

Einstieg in Python

Perl fürs Web

MySQL 4

GNOME 2.0
 Empfehlung

Einstieg in XML
 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info

 MyGalileo
Der Service für registrierte Leser:
Zu MyGalileo
Info



Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de