Diese Sektion ist ein Beitrag von Jason R. Fink
Es ist nicht so, dass gelegentliche UNIX- User eine Einführung in die Benutzung des vi- Editors brauchen. Dieser Editor, der im Original ein Entwicklung von Bill Joy von Sun Microsystems ist, ist ein endlos erweiterbarer, eigentlich ziemlich leicht zu bedienender ASCII- Editor und lebenswichtig für Newbies. Diese Sektion wird den Newbie in die Bedienung einführen und ein vielleicht paar Einfälle des Gelegenheitsusers verwerfen.
In der ersten Hälfte dieser Sektion geht es um das Schreiben, Speichern, Entfernen/Einfügen und Navigieren durch eine Datei in einer vi- Sitzung. In der zweiten Hälfte findet eine Schritt-für-Schritt- vi- Sitzung statt, um eine Hilfestellung für den Anfang zu bieten.
Die Idee hinter diesem Kapitel ist es, eine Anleitung in der Benutzung des Editors zu bieten; ohne ein Handbuch ersetzen zu wollen. Sie ist gedacht, um dem Anfänger zu unterstützen, damit dieser mit diesem Editor arbeiten kann, also hinreichende Fertigkeiten besitzt, um Dateien zu erstellen und zu bearbeiten.
Nimm das als ein Beispiel: Wenn Du, sagen wir, gedit benutzt und die Maus nimmst, einen Text markierst, dann Ausschneiden und Einfügen anwählst; benutzst Du die ganze Zeit die Maus, Du bearbeitest keinen Text. In vi wird dieselbe Aktion durchgeführt, indem Du einfach die Zeile mit den »dd«- Kommando löschst, zu der gewünschten Zeile gehst, in der Du den Text einfügen willst und das dann mit »p« im Kommandomodus tust. Du könntest meistens sagen, dass das die Analogie »Mausmodus versus Kommandomodus« ist (natürlich sind sie nicht identisch, aber die Konzepte ähneln sich).
Um eine vi- Sitzung zu starten, ist es am einfachsten, dies hier in irgendeine Terminalsoftware einzugeben:
vi Dateiname
Wichtig ist es noch, zu wissen, dass eine editierte Datei in einem
Speicherpuffer abgelegt wird. Der Rest des Textes liegt im Puffer
und die Datei in einem Kontext mit ihm. Eine gespeicherte
Datei wird nur geändert, wenn der User die Änderungen mit
dem Schreibkommando speichert.
Der folgende Text beschreibt die angebotenen Modi nach dem Start:
a Hinter dem Cursor etwas einfügen.
A Am Zeilenende etwas dranhängen.
C Den rest der Zeile ändern.
cw Das aktuelle Wort ändern.
i Vor dem Cursor etwas einfügen.
I Vor der letzten Leerzeile etwas einfügen.
o Eine neue Zeile unter den Cursor öffnen, um etwas einzufügen.
O Eine neue Zeile über dem Cursor öffnen, um etwas einzufügen.
Natürlich reicht es nicht, die Editierkommandos zu kennen, wenn Du nicht in den Kommandomodus zurückkommst, um die Datei zu sichern: Drücke einfach die [ESC]- Taste. Um mehrere Kommandos einzugeben, muss der Doppelpunkt benutzt werden. Schreibkommandos sind so ein Satz von Kommandos. Um das zu tun, gib einfach mal »:« ein.
Der Doppelpunkt bringt den User in den sog. »colon«- Prompt (oder Kommandomodus, wenn man das so will) in der unteren linken Ecke des Bildschirms. Schauen wir uns jetzt einmal die Speicherkommandos an:
:w Schreibt den Puffer in eine Datei.
:wq wie oben, beendet ausserdem den Editor.
nach oben
Für einen Anfänger ist das Umschalten zwichen Lommando- und Editiermodus ein wenig sicherer, denke ich; bis er ein bisschen geübt hat und sich Peaxis und Erfahrung einschleichen. Bei den Navigationstasten für Terminals, die entweder nicht erkannt werden oder keine Cursortasten besitzen oder bei denen sie nicht unterstützt werden, funktioniert das mit diesen Tasten:
k Cursor eine Zeile höher
j Cursor eine Zeile tiefer
l Ein Zeichen weiter nach rechts
h Ein Zeichen weiter nach links
Wenn das Terminal erkannt wird und die Cursortasten unterstützt, können sie im Kommandomodus zur Navigation durch den Puffer benutzt werden.
Für eine einfache »One-Spot-Navigation« unterstützt vi auch den Sprung zu einer Zeile, deren Nummer im Kommandoprompt (:) eingegeben wird. Wenn Du zu Zeil 223 springen willst, musst Du das hier eingeben:
ESC
:223
nach oben
/foo
Das war's. Um eine andere Suche zu illustrieren, suchen wir mal nach »foo bar«:
/foo bar
nach oben
0 Gehe zu Zeilenanfang
$ Gehe zum Zeilenende
b Ein Wort zurück
w Ein Wort weiter
G Zum Ende des Textes
H Zu ersten Zeile auf dem Bildschirm
L Zur letzten Zeile auf dem Bildschirm
M Zur Bildschirmmitte
N Gehe rüchwärts zum nächsten Ergebnis einer Suche.
n Zum nächsten Ergebnis eine Suche, aber vorwärts
# vi foo.txt
Wir schalten in den Editiermodus und geben zwei Zeilen ein, die von einer leeren Zeile getrennt werden. Denke daran: Der Puffer ist leer; wir müssen zuerst »i« drücken, um vor dem Cursor etwas einzufügen und tippseln mal etwas Text:
Dies ist ein Text
und über uns ist eine leere Zeile.
~
~
~
~
Drücke jetzt die [ESC]- Taste, um in den Kommandomudus zurückzuschalten.
Jetzt sind wir im Kommandomodus; lass uns die Datei mal speichern. Zuerst drückst Du die »:«-RTaste. Der Cursor sollte sich nun unten links rechts neben dem Prompt befinden. Dort gibs Du »w« ein und drückst »ENTER« oder »RETURN«. Die Datei wurde eben gerade gespeichert. Jetzt sollte eine Nachricht darüber kommen; einige Varianten sagen uns den Namen, wieviele Zeilen und die Dateigrösse.
Es ist Zeit, geneigter Leser; Zeit zum Navigieren. Der Cursor sollte sitzen, wo er schone gesessen hat, als die Datei gespeicert wirde. Versuche mal, mit den Cursortasten ein wenig in der Datei herumzuspazieren. Wenn das nicht funktioniert, versuche es mit den besagten »hjkl«- Taste, um zu sehen, wie sie arbeiten.
Lass uns mal zum guten Ende zwei weitere Dinge tun. Als Erstes gehen wir in die erste Zeile und dann auf das erste Zeichen. Probiere hier mal ein paar der anderen Navigationstasten aus dem Kommandomodus, indem Du folgende Tasten nacheinander drückst:
$
0
$
0
Der Cursor sollte zum Zeilenende springen, dann zurück zum Anfang und dann wieder zu Ende.
Als nächstes suchen wir nach einem Ausdruck, indem wir die »/«- Taste benutzen:
/Dies
Der Cursor sollte nun zu der ersten Stelle springen, an der diese Zeichenfolge auftaucht.
Speichere sie Datei und beende vi:
:wq
Die interessantesten Erweitrungen sind diese hier:
set showmode ruler
set filec=^[
set cedit=^[
Die erste Zeile schaltet die Anzeige der Cursorposition (in Reihe und Spalte) ein und informiert über den aktuellen Betriebsmodus (Kommando, Einfügen, Anhaängen). Die zweite Zeile (in der »^[« für die [ESC]- Taste steht, schaltet die Dateinamenvervollständigung mit der ESC- Taste ein.. Kommando Nummer drei gestattet das »History-Editing« mit der ESC- Taste. Beispiel: wenn Du einen »:« schreibst und dann ESC drückst, kommt ein Fenster, das eine Liste mit den vorgehenden Komandos öffnet, die dann bearbeitet und ausgeführt werden können (Mit »Enter« kannst Du so ein Kommando ausführen).
Wenn Du vi noch nie benutzt hast, ist das vi- Tutorial ein guter Ausgangspunkt. Es ist gemacht, um mit vi gelesen zu werden und führt den Leser schrittweise in alle vi- Kommandos ein, die während des Lesens ausprobiert werden können. An Introduction to Display Editing with Vi vonWilliam Joy ud Mark Horton ist ebenfalls ein sehr guter Ausgangspunkt.
Wenn Du mehr über vi und seine Erweiterungen lesen willst, solltest Du Dir mal Ex/Vi Reference Manual von Keith Bostic durchlesen, worin alle Editorkommandos und -Optionen dokumentiert sind.
Wenn Du einen ganzen Satz von Quellen in einem Baum aus Verzeichnissen und Unterverzeichnissen überprüfen willst, kannst Du Dir die Arbeit mit dem »tag«- Feature erleichtern. Die Methode sieht so aus:
cd in das Basisverzeichnis, in dem Du arbeiten willst:
$ cd /path
Gib mal diese Kommandos ein:
$ find . -name "*.[ch]" > filelist $ ctags -L filelist
Diese Zeile fügst Du .exrc hinzu
set tags=/path/tags
(Gib aber den richtigen Pfad für »path« ein...)