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