PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Der Editor vi und seine Bedienung



netzmeister
11.11.01, 12:34
<a NAME=start></a><b><u>Ueberblick</u></b>
<br><b>&nbsp;|&nbsp;</b>
<br>&nbsp;<b>|</b>- <a href=#vorwort>Vorwort</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>|</b>-<b> </b><a href=#aufruf>vi
Aufrufen</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|</b>- <a href=#modi>die
Modi des vi</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|</b>-<b> </b><a href=#raus>den
vi verlassen</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|</b>- <a href=#bewegen>Bewegen im Text</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|</b>- <a href=#objekte>Objekte</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|</b>- <a href=#suchen>Suchen</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|</b>- <a href=#puffer>Puffer</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|</b>- <a href=#datcommands>Besondere Dateibefehle</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|</b>- <a href=#sonstige>Weitere Befehle</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>|</b>--<b> </b><a href=#anhang>Anhang</a>
<p><a NAME=vorwort></a><b><u>Vorwort</u></b>
<br>Bei der Arbeit mit Linux kommt man frueher oder spaeter nicht um die
Editierung einer Datei auf Konsolenebene herum. Zu diesem Zweck existieren
relativ viele Editoren, deren Handhabung und Funktionsumfang jedoch stark
variiert.
<br>Ein sehr komplexer, aber zugleich leistungsfaehiger Editor ist der
vi, von dem sicher jeder schon einmal etwas gelesen hat.
<br>Die zusaetzliche Tatsache, dass er bildschirmorientiert ist, bestaetigt
meine Entscheidung, seine Handhabung hier zu beschreiben und nicht die,
eines anderen Editors. Ich versuche, diesen Text moeglichst als "Referenz"
zu gestalten, da man schwer alle Vielfalten des vi mit einem Schlag lernen
kann.
<br>Anbei: Bildschirmorientiert heisst, dass der Text so dargestellt ist,
dass man ihn wie gewohnt durchblaettern kann und auch die Benutzung der
Cursortasten erlaubt ist.
<p><a NAME=aufruf></a><b><u>Aufruf</u></b>
<br>Man ruft den vi durch das Kommando
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vi [-option] [dateiliste]</i>
<br>auf, wobei unter anderem folgende Optionen verfuegbar sind:
<br>&nbsp;
<br>&nbsp;<i>&nbsp;&nbsp;&nbsp; <b>-R -></b> Read-Only Modus</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>-i -></b> startet vi im Eingabemodus
(mehr dazu weiter unten)</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>+/[suchmuster] -></b> springt sofort
zum angegebenen Suchmuster</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>+[zeile] -></b> springt sofort zur angegebenen
Zeile</i>
<p>Ist vi nun gestartet, springt einem ein 24-Zeilen grosses Fenster und
eine Statuszeile am unteren Rand entgegen. ;)
<br>Sofern es nicht mit der "<i>-i</i>"-Option aufgerufen wurde, kann man
vorerst keine Eingaben taetigen, da vi verschiedene Modi besitzt.
<p><a NAME=modi></a><b><u>Modi</u></b>
<br>vi unterscheidet zwischen einem <i>Eingabe-</i> und zwei <i>Befehlsmodi.</i>
<p>Weshalb zwei ?
<p>Der Editor basiert auf einem weiteren Editor namens "<i>ex</i>", dessen
Befehle auch in vi benutzt werden koennen bzw. direkte Verwendung finden.
Daher wird der zweite Befehlsmodus als "<i>ex-mode</i>" bezeichnet (ahaaa
:)).
<p>Die Befehle werden als Abkuerzungen in Form von einzelnen Buchstaben
eingegeben. Man muss jedes mal zwischen Eingabe- und Befehlsmodus wechseln,
hier die passenden Kommandos:
<p>&nbsp;&nbsp;&nbsp; <u>->Wechsel vom Befehls- in den Eingabemodus</u>
<br>&nbsp;&nbsp;<i>&nbsp;&nbsp;&nbsp;&nbsp; <b>I -></b> Einfuegen am Zeilenanfang</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>A -></b> Einfuegen am Zeilenende</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>i -></b> Einfuegen vor der
aktuellen Position</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>a -></b> Einfuegen nach
der aktuellen Position</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>o -> </b>Einfuegen einer
Zeile unter der derzeitigen</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>O -></b> Einfuegen einer
Zeile ueber der derzeitigen</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>R -></b> Ueberschreibemodus</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>r -></b> Die Eingabe loescht
das Zeichen am Cursor</i>
<br>&nbsp;&nbsp;&nbsp;&nbsp; (<b>Achtung:</b> sofortige Rueckkehr zum Befehlsmodus
bei r !)
<p>&nbsp;&nbsp;&nbsp; <u>->Wechsel vom Eingabe- in den Befehlsmodus</u>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <i><b>ESC druecken </b>-> Bin
ich schon drin ? - Jep.</i>
<p>&nbsp;&nbsp;&nbsp; <u>->Wechsel vom Befehls- in den ex-Modus</u>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><i>Eingabe eines Doppelpunktes&nbsp;
(:)</i></b>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Nach Ausfuehrung des Befehls
kehrt man automatisch zurueck)
<p>Der derzeitige Modus wird im Status angezeigt, "<i>INSERT</i>" steht
fuer den Eingabemous, "<i>:</i>" fuer den ex-mode und wenn nichts angezeigt
wird, ist das der Befehlsmodus.
<p><a NAME=raus></a><b><u>Verlassen</u></b>
<br>Man kann vi durch die folgenden Befehle auf unterschiedliche Arten
verlassen, ausser dem letzten basieren alle auf dem ex-mode, wie man am
Doppelpunkt unschwer erkennen kann:
<p>&nbsp;&nbsp;&nbsp;<i> <b>:q -> </b>Verlassen, falls vorher gespeichert
wurde</i>
<br><i>&nbsp;&nbsp;&nbsp; <b>:q! -></b> Verlassen ohne zu speichern</i>
<br><i>&nbsp;&nbsp;&nbsp;<b> :wq -></b> Speichern und verlassen</i>
<br><i>&nbsp;&nbsp;&nbsp; <b>ZZ -></b> Speichern und verlassen (wie <b>:wq</b>
also)</i>
<p><a NAME=bewegen></a><b><u>Im Text bewegen</u></b>
<p>Um sich (selbst ohne Cursortasten) schnell im Text bewegen zu koennen,
bietet vi wie nicht anders zu erwarten eine Fuelle von Befehlen, welche
ich im Folgenden auflisten moechte:
<p>&nbsp;<i><b>&nbsp; h -></b> Ein Zeichen nach links</i>
<br><i>&nbsp;<b>&nbsp; l -></b> Ein Zeichen nach rechts</i>
<br><i><b>&nbsp;&nbsp; k -></b> Eine Zeile nach oben</i>
<br><i><b>&nbsp;&nbsp; j -></b> Eine Zeile nach unten</i>
<br><i><b>&nbsp;&nbsp; ^ -></b> Zum Zeilenanfang</i>
<br><i><b>&nbsp;&nbsp; $ -></b> Zum Zeilenende</i>
<br><i>&nbsp;<b>&nbsp; w -></b> Zum naechsten Wort</i>
<br><i>&nbsp;<b>&nbsp; W -></b> Zum naechsten Wort in Leerzeichen</i>
<br><i><b>&nbsp;&nbsp; b -></b> Zum vorangehenden Wort</i>
<br><i><b>&nbsp;&nbsp; B -></b> Zum vorangehenden Wort in Leerzeichen</i>
<br><i><b>&nbsp;&nbsp; G -></b> Zum Textende</i>
<br><i><b>&nbsp;&nbsp; H -></b> Zum Textanfang</i>
<br><i><b>&nbsp;&nbsp; M -></b> Zur Textmitte</i>
<br><i><b>&nbsp;&nbsp; &lt;Zahl>G -></b> Springt zur Zeile &lt;Zahl></i>
<br><i>&nbsp;<b>&nbsp; ( -></b> Vorangehender Satz</i>
<br><i><b>&nbsp;&nbsp; ) -></b> Naechster Satz</i>
<br><i><b>&nbsp;&nbsp; { -> </b>Vorangehender Absatz</i>
<br><i><b>&nbsp;&nbsp; } -></b> Naechster Absatz</i>
<br><i><b>&nbsp;&nbsp; [Strg]+[F] -></b> Seite vorwaerts</i>
<br><i><b>&nbsp;&nbsp; [Strg]+[B] -></b> Seite rueckwaerts</i>
<p><a NAME=objekte></a><b><u>Objekte</u></b>
<p>Mit Argumenten in Verbindung mit einem entsprechenden Befehl kann man
sogenannte <i>Objekte</i> einsetzen, um den Text effizienter und flexibler
zu bearbeiten.
<br>Der Loeschbefehl <i>c </i>zum Beispiel verwendet ein Argument, das
direkt nach dem <i>c</i> (ohne Leerzeichen) eingegeben wird. Dieses Argument
beschreibt ein typisches <i>Textobjekt</i> wie <i>Wort, Zeile oder Zeichen.
</i>Die Benutzung solcher Objekte tritt in einer Vielzahl von Befehlen
auf.
<br>Bezogen auf unseren Loeschbefehl muss man hier also nicht jedes Zeichen
einzeln loeschen, sondern kann dies unter Verwendung von Objekten z.B.
auf die ganze Zeile oder einzelne Woerter anwenden.
<p>Hier eine Liste moeglicher Objekte:
<p>&nbsp;&nbsp;<i>&nbsp;&nbsp; <b>Leerzeichen -></b> Einzelnes Zeichen</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>w -></b> Wort</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;<b> W -></b> Wort mit Sonderzeichen</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>b -></b> Wort rueckwaerts</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>B -></b> Wort rueckwaerts mit Sonderzeichen</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>^ -></b> Der Text bis zum Zeilenanfang</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>$ -></b> Der Text bis zum Zeilenende</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>G -></b> Der Text bis zum Ende</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>( -> </b>Text bis zum Satzanfang</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>) -></b> Text bis zum Satzende</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp; <b>{ -></b> Text bis zum Anfang des Absatzes</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;<b> } -></b> Text bis zum Ende des Absatzes</i>
<br><i>&nbsp;&nbsp;&nbsp;&nbsp;<b> [[ -></b> Text bis zum Abschnittbeginn</i>
<br><i>&nbsp;&nbsp;&nbsp;<b>&nbsp; ]] -></b> Text bis zum Abschnittende</i>
<p>Bsp. -> <i>c$ </i>(im Befehlsmodus) wuerde also die aktuelle Zeile eleminieren.
;)
<br>(Die Zeichen ueberschneiden sich sichtlich mit denen der <i><a href=#bewegen>Textnavigation,</a></i>
was das Lernen erleichtern sollte.)
<p><a NAME=suchen></a><b><u>Suchen</u></b>
<p>Man kann in vi auch nach bestimmten Mustern suchen lassen, wer programmiert,
kennt solche sicher als r<i>egulaere Ausdruecke.</i>
<br>Im <i><a href=#anhang>Anhang </a></i>ist eine URL zu einer Liste
regulaerer Ausdruecke zu finden, damit dieses Dokument nicht zu sehr den
Rahmen sprengt.
<p>Eine kleine Uebersicht der normalen Suchbefehle:
<p>&nbsp;<i>&nbsp;&nbsp;&nbsp; <b>/&lt;suchmuster> -> </b>Vorwaertssuche
von &lt;suchmuster></i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; ?&lt;suchmuster> -> </b>Rueckwaertssuche
von &lt;suchmuster></i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; n -></b> Letzte suche wiederholen</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; N -></b> Rueckwaertssuche der letzen</i>
<br><i>&nbsp;&nbsp;<b>&nbsp;&nbsp; :s/text1/text2/ -></b> ersetzt text1
durch text2 im zuerst auftretenden Fall</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; :s/text1/text2/g -></b> tut oben Genanntes
global, also im gesamten Text</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; % -></b> sucht nach der dazugehoerigen
Klammer</i>
<p><a NAME=puffer></a><b><u>Puffer</u></b>
<p>Zum Kopieren und Loeschen von Text verwendet vi einen Puffer, damit
dieser spaeter an anderer Stelle wieder eingefuegt werden kann.
<br>Beispiel: mit <i>dw</i> kann man das Wort am Cursor loeschen, womit
es im Puffer landet. Aus diesem kann man es mit <i>p </i>wieder zurueckholen
und in den Text einfuegen.
<br>Logischerweise laesst sich nur ein Objekt in einen jeweiligen Puffer
laden, daher kann man mehrere Puffer (afaik 26) durch Angabe eines (Klein-)
Buchstabens vor dem Befehl nutzen. Damit dies nicht zur Ueberschneidung
mit anderen Befehlen kommt, setzt man dem Ganzen Anfuehrungszeichen voran:
<i>"xdw</i> und <i>"xp</i>
<p>Hier noch eine Uebersicht der Loesch- und Kopierbefehle:
<p>&nbsp;<i>&nbsp;&nbsp;<b>&nbsp; X -></b> Loescht das Zeichen vor dem
Cursor</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; x -></b> Loescht das Zeichen "unter"
dem Cursor</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; d&lt;objekt> -></b> Loescht &lt;objekt>,
also dw loescht das aktuelle Wort</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; dd -></b> Loescht die gesamte Zeile</i>
<br><i>&nbsp;<b>&nbsp;&nbsp;&nbsp; y&lt;objekt> -></b> Kopiert &lt;objekt>,
wie oben</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; yy -></b> Kopiert die gesamte Zeile</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; p -></b> Fuegt nach der aktuellen Zeile
ein</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; P -></b> Fuegt vor der aktuellen Zeile
ein</i>
<p><a NAME=datcommands></a><b><u>Besondere Dateibefehle</u></b>
<p>Um mit einzelnen Textteilen gesondert umzugehen, kann man folgende Befehle
verwenden:
<p><b>&nbsp;&nbsp;&nbsp;&nbsp; :&lt;bereich>w &lt;datei> -></b><i> speichert
den &lt;bereich> in &lt;datei></i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; :e &lt;datei> -></b> Laden von &lt;datei>,
die bisherige wird entfernt</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; :r &lt;datei> -> </b>Einfuegen der aktuellen
Datei in den derzeitigen Text</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; :r!&lt;befehl> -> </b>Einfuegen der
Ausgabe des Linux-commands &lt;befehl></i>
<p><a NAME=sonstige></a><b><u>Sonstige Befehle</u></b>
<p>Einige einzelne, ueberaus praktische Befehle moechte ich nun noch als
Abschluss vorstellen:
<p>&nbsp;&nbsp;<i>&nbsp;&nbsp;<b> u -></b> Macht die letzte Aenderung rueckgaengig</i>
<br><i>&nbsp;<b>&nbsp;&nbsp;&nbsp; U -></b> Macht die letzte Aenderung
der aktuellen Zeile rueckgaengig</i>
<br><i>&nbsp;<b>&nbsp;&nbsp;&nbsp; ~ -></b> Aendert die Gross- und Kleinschreibung
des aktuellen Zeichens</i>
<br><i><b>&nbsp;&nbsp;&nbsp;&nbsp; !&lt;befehl> -> </b>Ausfuehren eines
Linux-Befehls</i>
<p><a NAME=anhang></a><b><u>Anhang</u></b>
<p>Zu guter Letzt finden Sie hier noch einige weiterfuehrende Seiten zum
Thema.
<p><u>Kleine Referenz zu regulaeren Ausdruecken:</u>
<br><a href=http://www.tu-bs.de/rz/doku/unix-pages/regausdr.html>http://www.tu-bs.de/rz/doku/unix-pages/regausdr.html</a>
<p><u>vi (iMproved) Homepage:</u>
<br><a href=http://www.vim.org/>http://www.vim.org/</a><u></u>
<p><u>Haufenweise Informationen rund um vi und Verwandtschaft:</u>
<br><a href=http://www.math.fu-berlin.de/~guckes/vi/>http://www.math.fu-berlin.de/~guckes/vi/</a>
<p><u>Deutsches Forum rund um Linux: ;)</u>
<br><a href=../>http://www.linuxforen.de/</a>