original in en Ben Y. Yoshino
en to deKarsten Schulz
Ben Yoshinori Yoshino arbeitet an der Universität von Hawaii. Seine Homepage ist unter www.eng.hawaii.edu/~ben zu finden.
Dieser Artikel ist ein Tutorium von Ben Y. Yoshino. Das Original ist unter www.eng.hawaii.edu/Tutor/vi.html verfügbar. Es gibt noch weitere Tutorien des Autors unter: www.eng.hawaii.edu/Tutor/. Wir fanden diesen Artikel auf www.rootprompt.org und veröffentlichen diesen mit der Erlaubnis des Autors
Der VI ist ein bildschirmorientierter Editor, der von vielen Unix-Anwendern benutzt wird. Der VI besitzt hervorragende Eigenschaften, um Programmierer bei ihrer Arbeit zu unterstützen. Anfänger meiden oft den VI, da sie von der Funktionsvielfalt des VI überwältigt sind. Dieses Tutorium wurde geschrieben, um den Anfänger an den VI zu gewöhnen. Es enthält aber auch Abschnitte, die für den regelmäßigen Anwender relevant sind. Es werden Beispiele aufgezeigt und am Besten ist es, diese Beispiele auszuprobieren. Und natürlich, sich selbst Übungen auszudenken... Es gibt keinen besseren Weg, als eigene Erfahrungen zu sammeln.
Wir wollen in diesem Tutorium folgende Vereinbarungen treffen:
^X bezeichnet ein Steuerungszeichen. Wenn Du beispielsweise ein ^d im Tutorium siehst, bedeutet das, dass die Steuerungstaste (strg) gehalten werden muß und der dazugehörige Buchstabe. In diesem Beispiel also: strg drücken und gedrückt halten und dazu den Buchstaben d drücken. Dann beide Tasten loslassen.
Dieser Abschnitt ist nicht relevant für Linux-Anwender mit modernen Terminal-Emulatoren wie xterm, gnome-terminal, kvt oder aterm. Mit diesen Terminals ist die Shell-Variable $TERM immer auf den richtigen Wert gesetzt, und Du brauchst Dir keine weiteren Gedanken darüber machen.
Der VI ist ein Bildschirmeditor, deshalb muß er wissen, auf welcher Art Terminal er läuft. Wenn Du Dich an dem Rechner wiliki anmeldest (wiliki ist der Name des Hauptrechners der Universität von Hawaii), wird dieser Dich nach Deinem Terminal fragen. Die Eingabeaufforderung sieht so aus:
TERM = (vt100)
Wenn Du ein vt100 Terminal hast (oder einen Emulator, der vt100 emulieren kann), kannst Du einfach [enter] drücken. Wenn Du ein HP-Terminal hast, dann gib "hp" als Terminalname ein und bestätige mit [enter]. Falls Du nicht sicher bist, welchen Terminal-Typ Du nutzt, frage die Aufsicht oder lasse Dir helfen.
Falls Du einen Fehler bei der Anmeldung gemacht hast, und Du den falschen Terminal-Typ eingegeben hast, bleibe ruhig und melde Dich wieder ab. Du kannst folgende Befehle nutzen, um die Einstellungen zu korrigieren:
Als erstes sage Deiner Shell, welchen Terminal-Typ Du hast. (Falls Du nicht sicher bist,
welche Shell Du benutzt, tippe diesen Befehl ein:
echo $SHELL.)
Für die folgenden Beispiele ist der Typ des Terminals "vt100". Ersetze das durch den
Typ Deines Terminals.
Für die C shell (/bin/csh) lautet der Befehl:
set term=vt100Für die Bourne Shell (/bin/sh) oder die Korn Shell (/bin/ksh), lauten die Befehle:
export TERM TERM=vt100Als nächstes mußt Du dein Terminal zurücksetzen:
tset
Nun, da Dein Terminal-Typ (hoffentlich) richtig eingestellt ist, kannst Du mit dem VI starten.
Mit dem VI kann der Benutzer eine neue Datei erstellen oder vorhandene Dateien bearbeiten. Der Befehl, um den VI zu starten, lautet vi, gefolgt von dem Dateinamen. Um zum Beispiel eine Datei mit dem Namen dateiname zu bearbeiten, musst Du vi dateiname eingeben und [ENTER] drücken. Du kannst den VI auch ohne Angabe eines Dateinamens starten, wenn der Text dann gesichert werden soll, muß allerdings ein Dateiname angegeben werden.
Wenn Du den VI das erste Mal startest, ist der Bildschirm auf der
linken Seite mit Tilden (~) gefüllt.
Jede leere Zeile hinter dem Ende der Datei wird auf diese Art dargestellt.
Am unteren Ende des Bildschirms wird der Dateiname anzeigt, falls eine
existierende Datei angegeben wurde. Die Größe der Datei wird ebenfalls
angezeigt und das Ganze sieht etwa so aus:
"Dateiname" 21 lines, 385 charactersFalls die angegebene Datei nicht existiert, wird auf folgende Art angezeigt, dass es sich um eine neue Datei handelt:
"newfile" [New file]Falls Du den VI ohne Dateinamen gestartet hast, ist die unterste Bildschirmseite einfach leer. Falls diese Informationen nicht angezeigt werden, könnte es sein, dass der Terminaltyp falsch gesetzt ist. Tippe einfach :q und [ENTER] ein, um den VI zu verlassen und stelle den Terminaltyp richtig ein. Falls Du nicht weißt wie, frage einfach die Aufsicht.
Da Du nun weißt, wie man in den VI hineinkommt, ist es eine gute Idee zu lernen, wie man den VI wieder verlässt. Der VI-Editor hat zwei Modi und um den VI verlassen zu können, musst Du dich im Befehls-Modus befinden. Drücke die Taste mit der Aufschrift "Escape" oder "Esc" (falls Dein Terminal eine solche Taste nicht hat, versuche ^[, oder strg-[.), um in den Befehls-Modus zu gelangen. Mache Dir keine Gedanken darüber, ob Du schon im Befehls-Modus warst, als Du "Escape" gedrückt hast. Möglicherweise piepst es, aber Du wirst weiter im Befehls-Modus bleiben.
Der Befehl, um den VI zu verlassen, lautet :q. Wenn Du im Befehls-Modus bist, tippe einen Doppelpunkt (:) und den Buchstaben 'q', gefolgt von [ENTER]. Falls deine Datei in irgendeiner Form geändert wurde, wird der Editor dich warnen und sich nicht beenden. Der Befehl, um diese Nachricht zu ignorieren, lautet :q!. Damit wird der VI ohne abzuspeichern verlassen.
Natürlich willst Du Deine Änderungen normalerweise speichern. Der Befehl, um die Inhalte des Editors zu speichern lautet :w. Du kannst die Befehle zum Abspeichern und Verlassen kombinieren, indem Du :wq eingibst. Du kannst hinter dem :w auch einen anderen Dateinamen zum Speichern angeben. Wenn Du zum Beispiel die Datei, die Du bearbeitet hast als Datei mit dem Namen dateiname2 abspeichern möchtest, kannst Du einfach w dateiname2 eingeben und mit [ENTER] bestätigen.
Ein anderer Weg, um Änderungen zu speichern und den VI zu verlassen ist der Befehl ZZ. Wenn Du im Befehls-Modus bist, tippe die Großbuchstaben ZZ und es wird das gleiche geschehen, als ob :wq eingegeben worden wäre. Alle Änderungen an der Datei werden gesichert. Dies ist die einfachste Methode, den VI zu verlassen, nur zwei Tastendrücke.
Das erste, was die meisten Anwender über den VI lernen, ist, dass er zwei Modi hat: den Befehls- und Einfüge-Modus. Der Befehls-Modus erlaubt die Eingabe von Befehlen, um Text zu manipulieren. Diese Befehle sind normalerweise ein oder zwei Zeichen lang und können mit ein paar Tastendrücken eingegeben werden. Der Einfüge-Modus fügt alles, was eingetippt wird in den aktuellen Text ein.
Der VI startet zu Beginn im Befehls-Modus. Es gibt verschiedene Befehle, um den VI in den Einfüge-Modus umzuschalten. Die am häufigsten gebrauchten Befehle, um in den Einfüge-Modus zu gelangen sind a und i. Diese beiden Befehle werden unten beschrieben. Wenn Du Dich im Einfüge-Modus befindest, kannst Du ihn durch das Drücken der escape-Taste verlassen. Falls Dein Terminal keine escape-Taste hat, sollte auch ^[ (strg-[) funktionieren. Du kannst escape zweimal hintereinander drücken, damit der VI sich definitiv im Befehls-Modus befindet. Durch das Drücken von escape während der VI im Befehls-Modus ist, wird dieser nicht wieder verlassen. Der VI piepst vielleicht, um anzuzeigen, dass er sich bereits im Befehls-Modus befindet.
Die Befehle des Befehls-Modus haben normalerweise folgendes Format:
(wahlweise Argumente sind in eckigen Klammern angegeben)
Die Anzahl wird als Zahl, die mit einer Ziffer zwischen 1 und 9 beginnt, eingegeben. So löscht zum Beispiel der Befehl x das Zeichen unter der Schreibmarke. Wenn Du 23x eintippst, während Du im Befehls-Modus bist, werden 23 Zeichen gelöscht.
Einige Befehle nutzen einen optionalen Ort-Parameter, der angibt, wieviele Zeilen oder wieviel Text des Dokuments vom Befehl bearbeitet werden soll. Der Ort-Parameter kann auch jeder Befehl sein, um die Schreibmarke zu bewegen.
Hier folgt eine einfache Sammlung von Befehlen, um dem VI-Anfänger den Start zu erleichtern. Es gibt noch viele andere nützliche Befehle, die in einem späteren Abschnitt besprochen werden.
Der VI-Editor hat 36 benannte und einen allgemeinen Puffer, um Textteile zu speichern. Immer dann, wenn ein Textblock gelöscht oder kopiert wird, wird dieser Block im allgemeinen Puffer zwischengespeichert. Die meisten Anwender des VI nutzen die anderen Puffer nur selten und kommen ohne diese zurecht. Der besagte Textblock wird in einem anderen Puffer gespeichert, wenn einer angegeben wird. Der zu benutzende Puffer wird durch den Befehl " angegeben. Nachdem " getippt wurde, muß ein Buchstabe oder eine Ziffer als Puffername angegeben werden. Ein Beispiel: "mdd benutzt den Puffer m und die letzten beiden Zeichen dd löschen die aktuelle Zeile. Genauso kann man Text einfügen, indem der Befehl p oder P benutzt wird. "mp fügt den Inhalt des Puffers m hinter die aktuelle Schreibposition ein. Für jeden Befehl aus den nächsten zwei Abschnitten können diese Puffer zum zeitweisen Zwischenspeichern von Wörtern oder Absätzen angegeben werden.
Der am häufigsten benutzte Befehl zum Ausschneiden von Text ist d. Dieser Befehl löscht Text aus der Datei. Der Befehl kann durch eine optionale Anzahl eingeleitet und durch eine Ort-Angabe abgeschlossen werden. Wenn Du den Befehl doppelt eingibst, indem Du dd tippst, dann wird die aktuelle Zeile gelöscht. Hier sind einige Kombinationen dieses Befehls:
Es gibt auch noch einen y-Befehl (kopieren), der ähnlich wie der d-Befehl arbeitet, aber der Text nicht gelöscht sondern nur im Puffer abgelegt wird.
Die Befehle zum Einfügen sind p und P. Sie unterscheiden sich nur in der Position, wo der Text eingefügt wird. p fügt den angegebenen oder den allgemeinen Puffer hinter die aktuelle Schreibposition ein, während P den angegebenen oder allgemeinen Puffer vor die aktuelle Schreibposition einfügt. Wird eine Anzahl angegeben, fügen die Befehle den Text entsprechend oft ein.
Der VI unterstützt Programmierer, ihren Quellcode ansehnlich zu formatieren. Es gibt eine Variable, die die Einrückung für jede verschachtelte Einrückungsebene angibt. Um sie einzurichten, siehe den Abschnitt Anpassungen dieses Tutoriums. Der Befehl, um die Einrückung beispielsweise auf 4 Zeichen zu setzen lautet: :set sw=4.
Die folgenden Befehle rücken Deine Zeilen ein oder entfernen Einrückungen, sie können mit einer Anzahl angegeben werden:
Der VI hat außerdem eine nützliche Funktion, um den Quellcode nach ungleichmäßig gesetzten Klammerpaaren zu prüfen. Das %-Kommando schaut nach der entsprechenden linken Klammer einer rechten Klammer oder umgekehrt. Setze einfach die Schreibmarke auf eine Klammer und drücke %, um die Schreibmarke zur dazugehörigen Klammer zu bewegen. Diese Funktion ist sehr nützlich, um nicht geschlossene Klammern zu finden. Der VI piepst, um anzuzeigen, dass keine passende Klammer gefunden wurde.
Der VI stellt zwei Methoden für die Suche zur Verfügung: Suche nach Zeichenketten und Suche nach Zeichen. Für die Zeichenkettensuche werden die Befehle / und ? benutzt. Beim Benutzen dieser Befehle wird das getippte Zeichen einfach in der Statuszeile angezeigt, wo die zu suchende Zeichenkette eingegeben wird. Die beiden Befehle unterscheiden sich nur in der Richtung der Suche im Text. Der /-Befehl sucht vorwärts in der Datei, während der ?-Befehl rückwärts im Text sucht. Die Befehle n- und N-Befehle wiederholen den Suchbefehl in der gleichen bzw. in entgegengesetzter Richtung. Einige Zeichen haben eine besondere Bedeutung für den VI, deshalb müssen sie durch einen backslash (\) eingeleitet werden, wenn sie in einem Suchausdruck benötigt werden.
Spezielle Zeichen:
Die Zeichensuche sucht innerhalb einer Zeile nach dem Zeichen, das nach dem Befehl eingegeben wurde. Die Befehle f und F suchen nach einem Zeichen in der aktuellen Zeile. f sucht vorwärts und F sucht Rückwärts, wobei die Schreibmarke an die Position des gefundenen Zeichens gesetzt wird.
Die Befehle t und T suchen ein Zeichen in der aktuellen Zeile. Bei t wird die Schreibmarke an die Position vor dem gefundenen Zeichen gesetzt, und T sucht in der Zeile rückwärts wobei die Schreibmarke hinter das gefundene Zeichen gesetzt wird.
Diese beiden Befehlssätze können mit ; oder , wiederholt werden, wobei ; den letzten Zeichensuche-Befehl in der selben Richtung, und , den Befehl in entgegengesetzter Richtung wiederholt.
Mit der gesetzten Option "ic" (oder ignorecase, tippe :set ic) kannst Du ohne Berücksichtigung der Groß- und Kleinbuchstaben suchen.
Das Verhalten des VI kann schon beim Starten eingestellt werden. Es gibt verschiedene Bearbeitungsoptionen, die durch den :set-Befehl verfügbar sind. Nachfolgend die VI- und EX-Editor Optionen, die auf Wiliki verfügbar sind: (diese Liste bekommst Du, wenn Du :set all und ENTER im Kommandomodus eingibst)
noautoindent magic noshowmatch autoprint mesg noshowmode noautowrite nomodelines noslowopen nobeautify nonumber tabstop=8 directory=/tmp nonovice taglength=0 nodoubleescape nooptimize tags=tags /usr/lib/tags noedcompatible paragraphs=IPLPPPQPP LIpplpipnpbp term=xterm noerrorbells prompt noterse noexrc noreadonly timeout flash redraw timeoutlen=500 hardtabs=8 remap ttytype=xterm noignorecase report=5 warn keyboardedit scroll=11 window=23 keyboardedit! sections=NHSHH HUuhsh+c wrapscan nolisp shell=/bin/csh wrapmargin=0 nolist shiftwidth=8 nowriteany
Einige dieser Optionen besitzen Werte, die durch das Gleichheitszeichen '=' gesetzt sind, während andere entweder gesetzt sind oder nicht gesetzt sind. (Diese an- oder aus-Optionen werden Boolean genannt und beginnen dann mit "no", wenn sie nicht gesetzt sind). Die hier gezeigten Optionen sind diejenigen, die ohne Benutzeranpassungen gesetzt sind. Nachfolgend werden einige von ihnen und deren Abkürzungen beschrieben. So kannst Du zum Beispiel für den Befehl "set autoindent" :set autoindent oder :set ai tippen. Um diese Option zu deaktivieren, tippe :set noautoindent oder :set noai.
Ein EX-Editor-Befehl, der im VI nützlich ist, ist der abbreviate-Befehl.
Dadurch kannst Du Abkürzungen für bestimmte Zeichenketten erzeugen. Der Befehl
sieht wie folgt aus: :ab Abkz Abzukürzender Text.
Wenn Du zum Beispiel den Namen "Humuhumunukunukuapua`a" eingeben mußt,
Du aber nicht jedes mal den ganzen Namen tippen willst, kannst Du eine Abkürzung
dafür benutzen. Für dieses Beispiel lautet der Befehl:
:ab 9u Humuhumunukunukuapua`a
Wenn Du nun 9u als ein alleinstehendes Wort eintippst, wird der VI
den langen Namen dafür ausgeben. Wenn Du 9universität eingibst,
wird die Abkürzung nicht ersetzt.
Um eine vorher definierte Abkürzung zu entfernen, gibt es den Befehl unabbreviate. Um die Abkürzung des vorherigen Beispiels zu entfernen, wird der Befehl :una 9u benutzt. Um eine Liste der Abkürzungen zu erhalten, gibt einfach :ab ein.
Ein anderer EX-Editor-Befehl das zum Einrichten der Arbeitsumgebung nützlich ist, ist das Mapping. Es gibt zwei Arten von Map-Befehlen. Einer ist für den Befehls-Modus zuständig, der andere für den Einfüge-Modus. Diese beiden Befehle lauten :map und :map!. Das Mapping funktioniert ähnlich den Abkürzungen. Du gibst eine Tastenfolge an, sowie eine weitere, die die erste ersetzt. (die ersetzten Tastenfolgen sind in der Regel VI-Befehle.)
Es gibt zwei Wege, den VI anzupassen. Wenn Du eine Datei namens
.exrc in Deinem Home-Verzeichnis erstellst, werden alle Befehle in dieser
Datei beim Starten des VI ausgeführt.
Die andere Methode ist, eine Umgebungsvariable namens EXINIT zu setzen.
Die Umgebungsvariable wird in der Shell-Startdatei gesetzt.
Wenn Du /bin/csh (C-Shell) benutzt, lautet der Befehl in der Startdatei
.cshrc folgendermaßen:
setenv EXINIT '...'Falls Du /bin/sh or /bin/ksh benutzt, lautet der Befehl in der Datei .profile so:
export EXINIT EXINIT='...'Gib aber nicht die drei Punkte ein (...), sondern an deren Stelle die VI-Befehle, die beim Starten gesetzt werden sollen. Wenn Du zum Beispiel auto indent, line numbering, und wrap margin auf 3 Zeichen setzen willst, dann sieht der setenv-Befehl für die C-Shell so aus:
setenv EXINIT 'set ai nu wm=3'
Falls Du mehr als einen Befehl in dieser setenv EXINIT-Sache setzen möchtest, benutzt zum Trennen der Befehle den senkrechten Strich (|). Um zum Beispiel den Befehl 'g' auf den 'G'-Buchstaben zu legen, lautet der Befehl :map g G. Oben eingefügt sieht das dann so aus:
setenv EXINIT 'set ai nu wm=3|map g G'
Wenn Du die Datei namens .exrc erzeugen willst, kannst Du die Befehle genauso eingeben, wie sie oben zwischen den Anführungszeichen stehen.
Der VI-Editor bearbeitet eine temporäre Kopie Deiner Datei. Nachdem die Bearbeitung fertig ist, oder wenn Du die Datei speicherst, wird der Inhalt der temporären Kopie in die Originaldatei geschrieben. Wenn irgend etwas während der Bearbeitung schief geht, versucht der VI den aktuellen Stand für eine spätere Wiederherstellung zu sichern. (Anmerkung: Wenn der VI während der Arbeit an einer Datei abbricht, sendet er Dir eine Mail-Nachricht, wie die Datei wieder herzustellen ist). Die Option -r steht für Wiederherstellung (recovery. Wenn Du die Datei vitalinfo bearbeitet hast, als Du versehentlich abgemeldet wurdest, dann kann die Option -r helfen. Der Befehl dazu sieht dann so aus: vi -r vitalinfo Nach der Nutzung der Option -r, must Du das, was wiederhergestellt wurde in die aktuelle Datei speichern... Die Option -r funktioniert nur einmal pro gescheiterter VI-Sitzung.
Da sind zwei Dinge, die bei der Arbeit von Workstations aus zu beachten sind: Eine Datei mehrfach zu bearbeiten und die Größe des Bildschirms ändern.
Der VI bearbeitet eine Kopie der Originaldatei und deren Inhalt wird später in die Originaldatei gespeichert. Wenn Du nun mehr als einmal angemeldet bist und Du die gleiche Datei mehr als einmal mit dem VI bearbeitest, und Du dann zunächst die Datei der einen Sitzung speicherst und dann die der anderen, werden die Änderungen der ersten Datei überschrieben. Deshalb stelle sicher, dass Du nur eine Kopie des VI mit derselben Datei startest.
Falls Du ein Terminalprogramm von einer Workstation benutzt, kannst die die
Größe des Bildschirms durch Ziehen der Fensterränder verändern. Falls die
neue Größe nicht erkannt wird, mußt Du folgenden Befehl verwenden:
eval `resize`Falls das nicht funktioniert, lautet der Befehl:
eval `/usr/bin/X11R6/resize`Aber das sollte nur ein sehr selten auftretendes Problem sein, besonders mit modernen Versionen des VI wie zum Beispiel Vim.
Diese Liste ist eine Zusammenfassung der VI-Befehle, nach ihrer Funktion geordnet. Es können noch weitere Befehle zur Verfügung stehen, deshalb siehe auch das Online-Handbuch des VI. Zum einfacheren Nachschlagen kannst Du diese Datei als Textdatei speichern und alle Befehle herauslöschen, von denen Du meinst, dass Du sie nicht brauchen wirst, und die so verkürzte Datei ausdrucken.
Der VI-Editor baut auf einem anderen Editor namens EX auf. Der EX-Editor ist ein Zeileneditor. Vom VI aus benutzt der Anwender den ":" Befehl, um einen EX-Befehl einzugeben. Die folgende Liste ist keine komplette Aufstellung, aber die aufgeführten Befehle sind die am häufigsten gebrauchten. Wenn mehr als eine zu ändernde Zeile bei bestimmten Befehlen (wie ":s" und ":w") angegeben werden muß, gibt man den entsprechenden Bereich vor dem Befehl an. Um zum Beispiel in den Zeilen 3 bis 15 etwas zu ersetzen, lautet der Befehl: ":3,15s/from/this/g".