Dieser Beitrag stammt von http://www.linuxfocus.org


von Ben Y. Yoshino

Über den Autor:

Ben Yoshinori Yoshino arbeitet an der Universität von Hawaii. Seine Homepage ist unter www.eng.hawaii.edu/~ben zu finden.


Inhalt:

Den VI-Editor beherrschen

[VIM the edtitor]

Zusammenfassung:

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.



 

Vereinbarungen

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.  

Bevor Du beginnst

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:

Nun, da Dein Terminal-Typ (hoffentlich) richtig eingestellt ist, kannst Du mit dem VI starten.

 

Den 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 characters

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

 

Den VI beenden

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.

 

Die zwei Modi des VI

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.

 

Wie Befehle im Befehls-Modus eingegeben werden

Die Befehle des Befehls-Modus haben normalerweise folgendes Format: (wahlweise Argumente sind in eckigen Klammern angegeben)

Die meisten Befehle sind ein Zeichen lang, einschließlich derer, die Steuerungszeichen enthalten. Die in diesem Abschnitt beschriebenen Befehle sind die am häufigsten genutzten des VI-Editors.

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.

 

Einige einfache VI Befehle

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.

a
(append) aktiviert den Einfüge-Modus, die eingegebenen Zeilen werden hinter die aktuelle Schreibposition eingefügt. Wenn Du eine Anzahl angibst, wird der eingegebene Text entsprechend der Anzahl wiederholt eingefügt.
h
bewegt die Schreibmarke um ein Zeichen nach links
i
(insert) aktiviert den Einfüge-Modus, die eingegebenen Zeihen werden vor die aktuelle Schreibposition eingefügt. Wenn Du eine Anzahl angibst, wird der eingegebene Text entsprechend der Anzahl wiederholt eingefügt.
j
bewegt die Schreibmarke um eine Zeile nach unten
k
bewegt die Schreibmarke um eine Zeile nach oben
l
bewegt die Schreibmarke um ein Zeichen nach rechts
r
(replace) ersetzt das eine Zeichen unter der Schreibmarke. Mittels der Angabe von Anzahl können mehrere Zeichen ersetzt werden.
u
(undo) macht die letzte Änderung an der Datei rückgängig. Wenn u nochmal gedrückt wird, wird die rückgängig gemachte Änderung wiederhergestellt.
x
löscht das Zeichen unter der Schreibmarke. Anzahl gibt an, wieviele Zeichen gelöscht werden sollen. Die Zeichen hinter der Schreibmarke werden gelöscht.

 

Textpuffer im VI

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.

 

Ausschneiden und Einfügen

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:

d^
löscht von der aktuellen Schreibposition bis zum Anfang der Zeile.
d$
löscht von der aktuellen Schreibposition bis zum Ende der Zeile.
dw
löscht von der aktuellen Schreibposition bis zum Ende des aktuellen Wortes .
3dd
löscht drei Zeilen von der aktuellen Schreibposition an abwärts.

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.  

Einfügen

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.

 

Einrücken und Überprüfen von Quellcode

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:

<<
rückt die aktuelle Zeile um eine Einrückungsbreite nach links.
>>
rückt die aktuelle Zeile um eine Einrückungsbreite nach rechts.

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.

 

Wort und Zeichensuche

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:

^
Anfang der Zeile (am Anfang des Suchausdrucks).
.
findet ein einzelnes Zeichen.
*
findet kein oder mehrere des vorangegangenen Zeichens.
$
Ende der Zeile (am Ende des Suchausdrucks).
[
Legt eine Menge von passenden oder nicht passenden Suchmustern fest... zum Beipiel: /t[iao]p findet jede der folgenden Zeichenketten: tip tap top. Das folgende Suchmuster findet alles, was mit einem a beginnt, dem aber keiner der Buchstaben b, c oder d folgt: /a[^bcd]
<
in einen Suchausdruck mit einem backslash (\) geschützt eingefügt, findet den Anfang eines Wortes. Zum Beispiel findet: /\<der\> nur das Wort der, nicht Worte, wie etwa: Rinder oder dergleichen.
>
Siehe die Erklärung zu '<'

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.

 

Einstellungen des VI (und EX)

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.

autoindent (ai)
Diese Option bewirkt, dass eine Zeile, die einer eingerückten Zeile folgt, ebenfalls eingerückt wird. Falls die neue Zeile nicht eingerückt werden soll, kannst Du auf der ersten Zeichenposition ^D eingeben. Die Tastenkombination ^D funktioniert im Einfüge- und nicht im Befehls-Modus. Die Tiefe der Einrückung kann mittels shiftwidth eingestellt werden, was weiter unten beschrieben wird.
exrc
Die .exrc Datei im aktuellen Verzeichnis wird während des Startens gelesen. Diese Option muss entweder in der Umgebungsvariable EXINIT oder in der .exrc Datei im Home-Verzeichnis gesetzt werden.
mesg
Wenn diese Option durch Eingabe von :set nomesg aufgehoben wird, kann niemand mittels talk oder write Nachrichten auf das Terminal senden.
number (nu)
Zeigt Zeilennummern auf der linken Bildschirmseite an.
shiftwidth (sw)
Diese Option nimmt einen Wert an, der die Breite eines Software-Tabulators bestimmt. (Der Software-Tabulatore wird für die Befehle << und >> benutzt.) Eine Breite von 4 Zeichen würde zum Beispiel mittels :set sw=4 eingestellt werden.
showmode (smd)
Zeigt den gerade aktuellen Modus des Editors an. Wenn Du Dich im Einfüge-Modus befindest, wird auf der untersten Zeile des Bildschirms INPUT MODE angezeigt.
warn
diese Option warnt Dich, wenn die Datei geändert wurde, sie jedoch noch nicht gesichert ist.
window (wi)
setzt die Anzahl der Zeilen des Fensters auf dem Bildschirm, das vom VI benutzt wird. Wenn Du zum Beispiel nur 12 Zeilen Deines Bildschirm nutzen möchtest (weil Deine Modem-Verbindung langsam ist), benutzt Du: :set wi=12.
wrapscan (ws)
stellt das Verhalten der Wortsuche ein. Falls das gesuchte Wort bis zum Ende der Datei nicht gefunden wurde, wird die Suche am Anfang der Datei fortgesetzt, wenn diese Option gesetzt ist.

 

Abkürzungen und Tastenbelegungen umlegen

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

 

Die EXINIT Umgebungsvariable und die .exrc-Datei

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.

 

Die Arbeit wiederherstellen, falls etwas mit dem Terminal schieflief

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.

 

Warnung hinsichtlich der Nutzung des VI auf Workstations

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.

 

Zusammenfassung der VI-Befehle

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.

Ausschneiden und Einfügen/Löschen von Text

"
Gibt die Zwischenablage an, die für ein Kommando, das Zwischenablagen anspricht, benutzt werden soll. Gib nach dem " einen Buchstaben oder eine Ziffer ein, die die Zwischenablage bezeichnet.
D
Lösche von der aktuellen Position bis zum Ende der Zeile.
P
Füge den Inhalt der angegebenen Zwischenablage vor die aktuelle Schreibposition oder Zeile ein. Wenn keine Zwischenablage angegeben wurde (mit dem " Befehl), dann wird die allgemeine Zwischenablage benutzt.
X
Lösche das Zeichen vor der Schreibmarke.
Y
Kopiere die aktuelle Zeile in die angegebene Zwischenablage. Wenn keine Zwischenablage angegeben ist, wird die allgemeine Zwischenablage benutzt.
d
Lösche bis Ort. "dd" löscht die aktuelle Zeile. Eine Zahl löscht entsprechend viele Zeilen. Das, was gelöscht wurde, wird in die Zwischenablage kopiert, die mit dem "-Befehl angegeben wurde. Falls keine Zwischenablage angegeben wurde, wird die allgemeine Zwischenablage benutzt.
p
Fügt die angegebene Zwischenablage hinter die aktuelle Schreibposition oder Zeile ein. Falls keine Zwischenablage angegeben wurde, wird die allgemeine Zwischenablage benutzt.
x
Löscht das Zeichen unter der Schreibmarke. Eine Zahl bestimmt, wieviele Zeichen gelöscht werden sollen. Die Zeichen werden hinter der Schreibmarke gelöscht.
y
Kopiere in die Zwischenablage bis Ort, "yy" kopiert die ganze Zeile, eine Zahl kopiert entsprechend viele Zeilen. Die Zwischenablage kann mit dem "-Befehl angegeben werden. Falls keine Zwischenablage angegeben wurde, wird die allgemeine Zwischenablage benutzt.

Neuen Text einfügen

A
Ans Ende der aktuellen Zeile einfügen.
I
Am Beginn der aktuellen Zeile einfügen.
O
(Buchstabe oh) Einfügemodus beginnen, wobei eine neue leere Zeile über der aktuellen erzeugt wird.
a
Einfügemodus hinter der Schreibmarke beginnen. Falls vorher eine Anzahl angegeben wurde, wird der Text entsprechend oft eingefügt.
i
Einfügemodus beginnen. Der eingefügze Text wird vor die Schreibmarke eingefügt. Eine vorher eingegebene Anzahl bewirkt eine entsprechende Wiederholung des eingegebenen Textes.
o
Einfügemodus beginnen, indem eine neue leere Zeile unter der aktuellen erzeugt wird.

Die Schreibmarke in der Datei bewegen

^B
Eine Seite zurückblättern. Eine eingegebene Anzahl blättert entsprechend viele Seiten zurück.
^D
Eine halbe Fensterhöhe vorblättern. Eine eingegebene Anzahl blättert entsprechend viele Zeilen vorwärts.
^F
Eine Seite vorblättern. Eine eingegebene Anzahl blättert entsprechend viele Seiten vor.
^H
Bewegt die Schreibmarke um ein Zeichen nach links. Eine angegebene Anzahl bewegt die Schreibmarke um entsprechend viele Zeichen.
^J
Bewegt die Schreibmarke in der gleichen Spalte eine Zeile nach unten. Eine angegebene Anzahl bewegt die Schreibmarke um entsprechend viele Zeilen.
^M
Zum ersten Zeichen der nächsten Zeile springen.
^N
Bewegt die Schreibmarke in der gleichen Spalte eine Zeile nach unten. Eine angegebene Anzahl bewegt die Schreibmarke um entsprechend viele Zeilen.
^P
Bewegt die Schreibmarke in der gleichen Spalte eine Zeile nach oben. Eine angegebene Anzahl bewegt die Schreibmarke um entsprechend viele Zeilen.
^U
Eine halbe Fensterhöhe zurückblättern. Eine eingegebene Anzahl blättert entsprechend viele Zeilen zurück.
$
Bewegt die Schreibmarke zum Ende der Zeile. Eine angegebene Anzahl bewegt die Schreibmarke ans Ende der entsprechenden Zeile.
%
Bewegt die Schreibmarke zur passenden öffnenden oder schließenden Klammer.
^
Bewegt die Schreibmarke auf das erste Zeichen der Zeile, das kein Leerzeichen ist.
(
Bewegt die Schreibmarke an den Anfang eines Satzes.
)
Bewegt die Schreibmarke an den Anfang des nächsten Satzes.
{
Bewegt die Schreibmarke zum vorherigen Absatz.
}
Bewegt die Schreibmarke zum nächsten Absatz.
|
Bewegt die Schreibmarke zur durch eine Anzahl spezifizierte Spalte.
+
Bewegt die Schreibmarke zum ersten Nicht-Leerzeichen in der folgenden Zeile.
-
Bewegt die Schreibmarke zum ersten Nicht-Leerzeichen in der vorherigen Zeile.
_
Bewegt die Schreibmarke auf das erste Zeichen der Zeile, das kein Leerzeichen ist.
0
(Null) Bewegt die Schreibmarke in die erste Spalte der aktuellen Zeile.
B
Bewegt die Schreibmarke ein Wort zurück. Überspringt Satzzeichen.
E
Bewegt die Schreibmarke ein Wort vor. Überspringt Satzzeichen.
G
Springt zu einer durch eine Anzahl angegebene Zeile. Falls keine Zeilenzahl angegeben ist, springt der VI zum Ende der Datei.
H
Springt zum ersten Nicht-Leerzeichen auf dem Bildschirm.
L
Springt zum letzten Nicht-Leerzeichen auf dem Bildschirm.
M
Springt zum Nicht-Leerzeichen in der Mitte desBildschirms.
W
Bewegt die Schreibmarke zum Beginn des nächsten Wortes, überspringt Satzzeichen.
b
Bewegt die Schreibmarke ein Wort zurück. Falls die Schreibmarke in der Mitte eines Wortes steht, wird auf den letzten Buchstaben des Wortes gesprungen.
e
Bewegt die Schreibmarke ein Wort vor. Falls die Schreibmarke in der Mitte eines Wortes steht, wird auf den letzten Buchstaben des Wortes gesprungen.
h
Bewegt die Schreibmarke um ein Zeichen nach links.
j
Bewegt die Schreibmarke um eine Zeile nach unten.
k
Bewegt die Schreibmarke um eine Zeile nach oben.
l
Bewegt die Schreibmarke um ein Zeichen nach rechts.
w
Bewegt die Schreibmarke um ein Wort vorwärts. Falls die Schreibmarke in der Mitte eines Wortes steht, wird zum ersten Buchstaben des nächsten Wortes gesprungen.

Die Schreibmarke auf dem Bildschirm bewegen

^E
Eine Zeile vorwärts rollen. Eine angegebene Anzahl rollt entsprechend viele Zeilen.
^Y
Eine Zeile rückwärts rollen. Eine angegebene Anzahl rollt entsprechend viele Zeilen.
z
Zeichnet den Bildschirm auf folgende Arten neu:
"z<return>" setzt die aktuelle Zeile an den Beginn des Bildschirms. "z." setzt die aktuelle Zeile in die Mitte des Bildschirms; und "z-" setzt die aktuelle Zeile an das Ende des Bildschirms. Wenn Du eine Anzahl angibst, wird die entsprechende Zeile positioniert. Wenn Du zum Beispiel "16z." angibst, wird die Zeile 16 in die Mitte des Bildschirms positioniert.

Text ersetzen

C
Ändert bist zum Ende der Zeile, ausgehend von der aktuellen Schreibposition.
R
Ersetzt die Zeichen auf dem Bildschirm mit denen, die eingetippt werden. Ende mit der Esc-Taste.
S
Die ganze Zeile ändern.
c
Ändert bis Ort. "cc" ändert die aktuelle Zeile. Eine Anzahl ändert entsprechend viele Zeilen.
r
Ersetzt ein Zeichen unter der Schreibmarke. Eine angegebene Anzahl ändert entsprechend viele Zeichen.
s
Ersetzt das Zeichen unter der Schreibmarke und wechselt in den Einfügemodus. Gib eine Anzahl an, um entsprechend viele Zeichen zu ersetzen. Ein Dollar-Zeichen ($) wird auf das letzte Zeichen, das ersetzt wird, gesetzt.

Nach Text oder Buchstaben suchen

,
Wiederhole den letzten f, F, t oder T Befehl in umgekehrter Richtung.
/
Suche in der Datei abwärts nach der Zeichenkette, die hinter dem / eingegeben wurde.
;
Wiederhole den letzten f, F, t oder T Befehl.
?
Suche in der Datei nach oben nach der Zeichenkette, die hinter dem ? eingegeben wurde.
F
Suche in der Datei abwärts nach der Zeichenkette, die hinter dem F eingegeben wurde. Wenn sie gefunden wurde, bewege die Schreibmarke zur Fundstelle.
N
Wiederhole die letzte Suche von '/' oder '?', allerdings in umgekehrter Suchrichtung.
T
Suche in der aktuellen Zeile rückwärts nach dem Zeichen, das nach dem 'T'-Befehl eingegeben wurde und bewege die Schreibmarke hinter die Fundstelle, wenn es gefunden wurde.
f
Suche in der aktuellen Zeile vorwärts nach dem Zeichen, das nach dem 'f'-Befehl eingegeben wurde und bewege die Schreibmarke auf die Fundstelle, wenn es gefunden wurde.
n
Wiederholde die letzte Suche von '/' oder '?'.
t
Suche in der aktuellen Zeile vorwärts nach dem Zeichen, das nach dem 't'-Befehl eingegeben wurde und bewege die Schreibmarke vor die Fundstelle, wenn es gefunden wurde.

Zeichen verändern/Zeilen formatieren

~
Schalte die Groß- oder Kleinschreibung des Buchstabens unter der Schreibmarke um.
<
Rückt die Zeilen bis Ort mit einer Einrückungstiefe nach links ein. "<<"rückt die aktuelle Zeile nach links ein und kann mit einer Anzahl angegeben werden.
>
Rückt die Zeilen bis Ort mit einer Einrückungstiefe nach rechts ein. ">>"rückt die aktuelle Zeile nach rechts ein und kann mit einer Anzahl angegeben werden.
J
Vereinigt die aktuelle Zeile mit der folgenden. Eine angegebene Anzahl vereinigt entsprechend viele Zeilen.

Speichern und Beenden

^\
Beendet den "VI"-Modus und wechselt in den "EX"-Modus. Der EX-Editor ist der Zeileneditor, auf den der VI aufbaut. Der EX-Befehl, um wieder zum VI zurückzukehren, lautet ":vi".
Q
Beendet den "VI"-Modus und wechselt in den "EX"-Modus. Der EX-Editor ist ein Zeileneditor. Der EX-Befehl, um wieder zum VI zurückzukehren, lautet ":vi".
ZZ
Den Editor beenden, dabei werden alle Änderungen gespeichert.

Verschiedenes

^G
Zeigt den aktuellen Dateinamen und des Status.
^L
Löscht und zeichnet den Bildschirm neu.
^R
Zeichnet den Bildschirm neu und entfernt kaputte Zeilen.
^[
Escape. Bricht einen teilweise eingegebenen Befehl ab.
^^
Schaltet zur zuletzt bearbeiteten Datei zurück.
!
Führt eine Shell aus. Wenn ein Ort angegeben ist, übernimmt das mittels ! ausgeführte Programm die angegebenen Zeilen als Standardeingabe und ersetzt diese Zeilen mit seiner Standardausgabe. "!!" führt das Programm mit der aktuellen Zeile aus. "!4jsort" übernimmt zum Beispiel die 5 Zeilen einschließlich der aktuellen Zeile und sortiert sie.
&
Wiederholt das vorhergehende ":s" Kommando.
.
Wiederholt den letzten Befehl, der die Datei verändert hat
:
Startet die Eingabe eines EX-Editor Befehls. Der Befehl wird ausgeführt, wenn der Anwender [Enter] drückt. (siehe den Abschnitt unten)
@
Gibt den Befehl des angegebenen Puffers aus.
U
Stellt die aktuelle Zeile in den Zustand wieder her, den sie hatte, als die Schreibmarke die Zeile betrat.
m
Markiert die aktuelle Position mit dem Zeichen, das nach dem 'm' eingegeben wird.
u
Macht die letzten Änderungen der Datei rückgängig. Erneutes Drücken von 'u' stellt die Änderung wieder her.

EX Befehle

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

:ab abkz ganzerText
Abkürzung. Wenn ein Wort im VI eingetippt wird, dass abkz lautet, ersetzt es der Editor automatisch mit ganzerText. Wenn zum Beispiel folgende Abkürzung definiert wird: ":ab usa United States of America", dann wird "United States of America" immer dann hingeschrieben, wenn das Wort "usa" eingegeben wurde.
:map keys new_seq
Tastaturbelegung. Hiermit kann man eine Taste oder eine Tastenfolge mit einer anderen belegen.
:q
VI beenden. Falls Änderungen noch nicht gespeichert sind, wird der VI eine Warnung ausgeben.
:q!
Den VI beenden, ohne Änderungen zu speichern.
:s/muster/zu_muster/optionen
Ersetzung. Hier wird das angegebene "muster" mit "zu_muster" ersetzt. Ohne weitere Optionen wird nur das erste Auftauchen von "muster" ersetzt. Wenn die Option 'g' angegeben wird, werden alle Vorkommen ersetzt. Beispiel: ":1,$s/Dwayne/Dwight/g" ersetzt alle Vorkommen von "Dwayne" zu "Dwight".
:set [all]
Setzt einige Einstellungsoptionen des VI und des EX. Der ":set all" Befehl zeigt alle möglichen Optionen. (siehe den Abschnitt "Einstellungen des VI")
:una string
Entfernt die Abkürzung, die vorher mittels ":ab" definiert wurde.
:unm keys
Entfernt die Tastenbelegung die durch ":map" definiert wurde.
:vi filename
Startet die Bearbeitung einer neuen Datei. Falls Änderungen noch nicht gespeichert wurden, gibt der Editor eine Warnung aus.
:w
Schreibt die aktuelle Datei auf den Datenträger.
:w filename
Schreibt den Puffer in die angegebene Datei.
:w >> filename
Hängt den Inhalt des Puffers an die angegebene Datei an.
:wq
Sichert den Puffer und beendet den Editor.

 

Verweise

 

Talkback für diesen Artikel

Jeder Artikel hat seine eigene Seite für Kommentare und Rückmeldungen. Auf dieser Seite kann jeder eigene Kommentare abgeben und die Kommentare anderer Leser sehen:

 Talkback Seite 

Die Redaktion
© Ben Y. Yoshino, FDL
LinuxFocus.org

Einen Fehler melden oder einen Kommentar an LinuxFocus schicken
Autoren und Übersetzer:
en -> -- Ben Y. Yoshino
en -> de Karsten Schulz

2001-01-22, generated by lfparser version 2.8