vi-muman inter-active micro-Handbuch fuer neue vi-Anwender ................................................................................ Um vi HIER und JETZT zu lernen, sind Sie herzlich aufgefordert diese Datei mit vi (Kleinbuchstaben!) zu oeffnen, tippen Sie GENAU dies, nach der Kommandozeilen-Aufforderung: vi -Readonly vi-muman.de Wobei: -Readonly die Nur-Lese-Option bezeichnet und vi-muman.de der Name dieser Datei ist. (alternativ probieren Sie vi -R vi-muman.de) ^^^^^^^^^^^^^^^^^^^^ DAS MUESSEN SIE SICH MERKEN! ^^^^^^^^^^^^^^^^^^^^ UM vi ZU VERLASSEN geben Sie genau dies ein [ESC]:q[ENTER] Wobei: [ESC] meistens eine Taste in der oberen linken Ecke der Tastatur ist und [ENTER] die Eingabe-Taste bezeichnet. Druecken Sie die Tasten eine nach der andern. Bevor Sie die Enter-Taste betaetigen sehen Sie typischer- weise in der unteren linken Ecke dies: :q Das (quit) Kommando schlaegt fehl, wenn die Datei bereits veraendert wurde. In solchen Faellen ist [ESC] :q! [ENTER] noetig, um vi zu verlassen ohne zu sichern, die Datei bleibt also im Orginalzustand. Seien Sie immer sehr vorsichtig, dass Sie nicht unbeabsichtigt irgendwelche Tasten druecken. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Um eine Seite VORWAERTS zu blaettern: [CTRL] f (Tasten gemeinsam druecken) Um eine Seite RUECKWAERTS zu blaettern: [CTRL] b (forward/backward BINGO) (Fortsetzung durch blaettern) Gut gemacht! Uebungen: a - gehen Sie zur vorherigen Seite zurueck und kehren Sie hierher zurueck. b - Beenden Sie diese Gebrauchsanweisung (Sie wissen sicher noch wie das geht.) und oeffnen diese Datei erneut mit vi. Bitte vergessen Sie nicht die Nur-Lese-Option (-R) zu benutzten. Versuchen Sie sich diese Schritte im Kopf zu merken. c - Tja, und nun wiederholen Sie die Uebungen a und b, bis sie genuegend Praxis besitzen. WARNUNG 1: Es hat sehr viele Uebungen in diesem Handbuch, um Beschaedigungen der Datei zu vermeiden, ist es eine gute Idee immer die Nur-Lese-Option des vi zu benutzen. WARNUNG 2: Die Uebungen stattdessen nicht zu machen ist eine sehr schlechte Idee. ________________________________________________________________________________ INHALT ________________________________________________________________________________ 0 EINFUEHRUNG 0.0 WAS ist vi? 0.1 WARUM sollte man vi lernen? 0.2 WIE lernt man vi? 1 ANFANG 1.0 Erste Schritte: KOMMANDO-MODUS und EINSETZ-MODUS 1.1 Grundlegende Kommandi 1.2 Navigieren im Text 1.3 Und nun wird gearbeitet 1.4 Zeichenketten suchen 1.5 Benutzen des set-Kommandos 2 WEITERE INFORMATIONEN 2.0 Andere Kommandi 2.1 Suchen-Ersetzen von Zeichenketten 2.2 Rueckschreiben von Dateien 2.3 Einlesen von andern Dateien 2.4 Mehrere Dateien gleichzeitig offen halten 2.5 Oeffnen einer Datei im Nur-Lese-Modus 2.6 Shell-Kommandi 2.7 Eine Shell temporaer oeffnen. 2.8 Macros ________________________________________________________________________________ *** 0 Einfuehrung -- 0.0 Was ist vi? vi (Kleinbuchstaben!) ist ein Texteditor, der es Ihnen erlaubt ASCII-Dateien zu schreiben/bearbeiten. -- 0.1 Warum sollte man vi lernen? Warum sollte man einen geheimnisvollen und raetselhaften Text-Editor zu benutzen lernen, wenn es so viele benutzerfreundlichere gibt? Da gibt's verschiedene Gruende: a - vi ist der einzige Text-Editor, den Sie auf allen UNIX/Linux-Maschinen finden. (Sonst ist's kein UNIX :-)) b - vi ermoeglicht es sehr grosse Dateien zu bearbeiten. c - vi ist aussergewoehnlich vielseitig. d - vi erlaubt es Ihnen komplexe Taetigkeiten sehr schnell und wirksam durchzufuehren. PS: Sobald sie vi etwas kennen und bedienen koennen, werden Sie die tollen Editoren und Textprozessoren ploetzlich nicht mehr so benutzerfreundlich finden. Echt, das ist kein Witz, das konnte ich schon mehrmals beobachten. -- 0.2 WIE lernt man vi? Schritt fuer Schritt. Sie koennen nicht alles auf einmal lernen: Sie koennen sehr viele Dinge mit vi anstellen, aber man kann bereits mit sehr wenigen Kommandi arbeiten. Meistens kann man sich die raetselhaften Ein-Buchstaben-Kommandi besser merken, wenn man weiss, das sie von einem "sinnvollen" englischem Word abstammen. *** 1 ANFANG -- 1.0 Erste Schritte: KOMMANDO-MODUS und EINSETZ-MODUS Es ist wichtig zu wissen, dass vi in zwei MODI arbeitet: KOMMANDO-MODUS und EINSETZ-MODUS * im KOMMANDO-MODUS werden vi Befehle erteilt. * im EINSETZ-MODUS wird Text eingefuegt/ueberschrieben.!!! PS: Ich waehlte hier EINSETZEN als Uebersetzung fuer "Insert-Modus" und nicht EINFUEGEN, wie es sehr viele andere vi-Hilfen machen, um auch das UEBERSCHREIBEN abzudecken! (Aber das ist meine Meinung.) (PS: fuer ganz pingelige, der Kommando-Modus kann noch in visual- und ed/ex-Kommandi unterteilt werden, aber dies ist hier noch nicht so wichtig.) F- "In der ersten Uebung bewegte ich mich vorwaerts und rueckwaerts, ausserdem beendete ich vi, gab ich bereits Kommandi ein?" A- Ja. F- "Aber wozu sollen diese ganzen Modi gut sein?" A- Weil vi aus einer Computerzeit stammt, als Terminals noch wie Schreib- maschinen aussahen (kein Cursor-/Ziffern-Block) und Maeuse ausschliesslich von Katzen gejagt wurden. Die Entwickler von vi entschieden sich daher fuer diese beiden Modi. Ein anderer Entwicklungsansatz ist der, der beim Editor emacs gewaehlt wurde, dort befindet man sich immer im "Einsetz-Modus" und erteilt Befehle durch voranstellen von [ESC], anderer META-Tasten oder gleichzeitigem druecken der [CTRL]-Taste. Auch sehr nett, aber das ist eine ganz andere Geschichte. F- "Wie kann ich zwischen den Modi hin und her schalten?" A- Vom EINSETZ-MODUS in den KOMMANDO-MODUS gelagt man immer mittels [ESC]. Die Gegenrichtung lernen Sie in Kapitel 1.1. -- 1.1 Grundlegende Kommandi BEMERKUNG 0: Um Kommandi einzugeben muss man im Kommado-Modus sein. Im Zweifelsfalle geben Sie lieber einmal zuviel [ESC] ein. (PS: Das gibt hoechstens ein unangenehmes Geraeusch.) Die folgenden Kommandi schalten vom Kommando-Modus in den Einsetz-Modus, so dass Text eingegeben werden kann. iText (insert) fuegt "Text" vor dem Cursor ein. aText (append) fuegt "Text" nach dem Cursor ein. oText (open) oeffnet unter dem Cursor eine Linie fuer Texteingabe. OText (open) oeffnet ueber dem Cursor eine Linie fuer Texteingabe. rT (replace) ersetzt das Zeichen unter dem Cursor mit 'T' RText...(replace) Ueberschreiben mit Text... bis [ESC] BEMERKUNG 1: vi unterscheidet GROSS- und klein-Schreibung. BEMERKUNG 2: Wenn Sie Ihren Text eingegeben haben, muessen Sie dies vi mitteilen, andererseits verbleiben Sie fuer immer im EINSETZ-MODUS. F- "Und wie beende ich den EINSETZ-MODUS?" A- Setzen Sie zweimal mit wuerfeln aus, und beginnen von vorn. [ESC] F- "Dies schaltet mich aber in den Kommando-MODUS!" A- Exakt. BEMERKUNG3: Die Kommandi, die von einem ":" angefuehrt werden, werden auf der untersten Zeile eingegeben und muessen mit [ENTER] bestaetigt werden. Sie befinden sich nach : automatisch auf der untersten Zeile! Die andern Kommandi werden nicht als Buchstaben angezeigt. Die folgenden Kommandi werden immer wieder gebraucht: (Sie bleiben im Kommando-Modus) J (join) verbindet die aktuelle mit der naechsten Zeile. x (durchstreichen?) loescht das Zeichen unter dem Cursor. u (undo) letzte Aenderung rueckgaengig machen. . ..dasselbe nochmal. (letzte Veraenderung wiederholen, aber natuerlich an der neuen Cursorposition. Wird sehr gern zusammen mit dem Kommando 'n' eingesetz. Das lernen Sie spaeter.) :w (write) sichere die aktuelle Datei. :w eineAnderDatei sicher die aktuelle Datei unter dem Namen. "eineAnderDatei". :e eineAnderDatei editiere die Datei "eineAnderDatei". :q (quit) Beenden von vi, sollten Sie vergessen haben Rueckzuschreiben, erinnert Sie vi daran. :q! (quit toutes-suite) Beenden ohne zu sichern. :wq (write quit) Beenden und Rueckschreiben. (es geht auch [ESC]ZZ) :7 setze den Cursor auf Zeile 7. (es geht auch 7G, also 1G springt zum Dateianfang) G Bewege den Cursor zum Dateiende. dd (delete) loesche die aktuelle Zeile. Uebungen: a - Gehen Sie zur Zeile 99, dann zur Zeile 199 b - Gehen Sie zum Dateiende, wie waer's mit G. Die ~Zeilen gehoehren nicht zur Datei! c - (es gibt da noch weitere Uebungen in Kapitel 1.3. Es ist aber besser erst 1.2 durchzuarbeiten.) -- 1.2 Navigieren im Text F- "Wie bring ich vi dazu Text dort einzusetzen, wo ich will und nicht wo vi will?" A- Indem der Cursor an die gewuenschte Stelle positioniert wird. Falls Sie keine Cursortasten haben, die entsprechenden Kommando-Tasten sind: h Bewegt den Cursor nach links... j ...nach unten... k ...nach oben... l ...nach rechts Wer haette das gedacht, experimentieren Sie mit den Tasten. Im Einfuege-Modus sehen Sie natuerlich die Buchstaben! F- "An diese Kommados erinnere ich mich nie!" A- (Da haben Sie aber eine sehr negative Lerneinstellung!) Entspannung, wenn Sie Glueck haben funktionieren ja die "normalen" Cursortasten. Leider aber nicht immer. F- "Gut, dann schreib ich Sie mir unter die Tastatur neben das Password." A- (Besser Sie nehmen Sie gleich als Password.) Beachten Sie die Lage und das Aussehen der Tasten. Sie liegen alle nebeneinander. 'h' ganz links, 'j' haengt eindeutig unter die Linie, 'k' streckt sich zur Decke und 'l' ist ganz rechts. So einfach kann Schnittstellen-Design sein. Um sich schneller zu bewegen, hier sind die Kommandi: w (word) zum Anfang des naechsten Worts. b (backward) zum Anfang des vorherigen Worts. e (end) zum Ende des naechsten Words. Uebung: a - Probieren Sie die folgenden Tasten aus: w, b, e, h, j, k, l. -- 1.3 Und nun wird gearbeitet Und nun beginnt das Spiel! Beachten Sie immer in welchem Modus Sie sich gerade befinden. Im Zweifel betaetigen Sie [ESC], um in den Kommando-Modus zu gelangen. (nettere vi's zeigen unten links z.B. mit "-- INSERT --" den Modus an) Uebungen: a - Sichern Sie den Inhalt dieser Datei in einer neuen names junk.txt. b - Sichern Sie nochmal, diesmal in eine Datei garbage.txt. c - Editieren Sie nun junk.txt. Beenden Sie zuerst diese Sitzung und starten Sie vi neu (Diesmal ohne -R). Sie haben nun die Macht, verwuesten Sie die Datei, hier ein paar Ideen: d - Erzeugen Sie neue Linien. e - Fuegen Sie Text mit 'i' und 'a' ein. f - Studieren Sie [ENTER] im Einsetz-Modus. g - Sichern Sie Ihr Werk. h - Bewegen Sie den Curor mit hjkl. i - Editieren Sie nun garbage.txt OHNE junk zu beenden --> :e garbage.txt und "verwoehnen" Sie Datei mit folgenden Experimenten. j - Verbinden Sie zwei Zeilen. k - Nehmen Sie an, Sie verbanden die falschen Zeilen, benutzen Sie undo. l - Wenden Sie undo mehrfach an, was passiert? m - Loeschen Sie einzelne Buchstaben und mehr. n - Fuegen Sie zwei neue Textzeilen dazu. o - Erinnern Sie sich, was Sie in n) gemacht haben, geben Sie im Kommando- Modus nun mal '.' ein, passen Sie auf, was passiert. p - Benutzen Sie nun das Kommando "dd". (Beschreibung folgt weiter unten!) q - Machen Sie weiter mit ueben, bis es Ihnen locker von der Hand geht. So und wie wird eine neue Datei kreiert? Beenden Sie zuerst vi und geben an der Eingabe-Aufforderung folgendes ein: vi filename Sofern Sie dies in einem andern Fenster unter X machen. Bedenken Sie, dass es keine gute Idee ist dieselbe Datei mehrmal zu oeffnen. Es ist zwar moeglich, bringt aber die typischen Probleme von kritischen Bereichen mit sich. Wir wollen hier mal davon ausgehen, die soeben eroeffnete Datei ist vollkommen neu. F- "Ohhh... Was sind denn das fuer haessliche Schlangenlinien links am Bildschirm?" A- Das sind "Tilden" und zeigen an, dass hier nichts ist. Auch diese Datei hat sowas ganz am Ende. Sieht etwa so aus: ~ ~ ~ ~ Uebungen: a - Probieren Sie doch nochmal ein paar Dinge von oben a-q aus. b - Geben Sie Text an vorbestimmten Stellen ein. c - Untersuchen Sie die Arbeitsweise von hjkl am Dateiende im Bereich der Tilde-Zeichen. -- 1.4 Zeichenketten suchen Um abwaerts die Zeichenkette "per exemplum" zu suchen, geben Sie wie folgt ein: /per exemplum Sie sehen dieses Kommando auf der untersten Zeile, wenn nicht sind Sie wohl im Einsetz-Modus, ich empfehle [ESC] und einen weiteren Versuch. Um das naechste Vorkommen zu finden, geben Sie folgendes ein: n (next) fuer eine Rueckwaerts-Suche: N Um direkt aufwaerts zu suchen: ?per exemplum und der Sinn von n und N sind vertauscht. Uebungen: a - Finden Sie alle Zeichenketten "per exemplum" in diesem Dokument. Benutzen Sie '/', n und N. b - Versuchen Sie Uebung a in der umgekehrten Richtung Benutzen Sie '?' Beachten Sie, dass /PER EXEMPLUM oder /per eXemplum nicht dasselbe ist wie: /per exemplum Diese Eigenschaft von vi kommt von UNIX, das Gross- und Kleinbuchstaben unterscheidet. Das kann sehr verwirrend sein, aber auch nuetzlich. Nun probieren Sie: /per e.emplum Beachten Sie, das sowohl "per exemplum" als auch "per eXemplum" gefunden wird, sogar "per eZemplum" aber nicht "PER EXEMPLUM". Der Punkt steht fuer jedes beliebige Zeichen. F- "Tja, und wenn ich nun genau 'per e.emplum' finden moechte?" A- Dann benutzen Sie wie fast ueberall in UNIX den Backslash, probieren Sie: /per e\.emplum Sie vermuten es sicher schon, vi unterstuetzt ein paar spezielle Zeichen. Um die spezielle Funktion dieser Zeichen aufzuheben, verwenden Sie \ vor diesen Zeichen. Zum Beispiel: der Stern (*) ist ein spezielles Zeichen, um dreifach Sterne '***' zu finden geben Sie wie folgt ein: /\*\*\* Seien Sie bei solchen Kommandi vorsichtig, dass Sie nicht einen [Leerschlag] am Ende des Suchmusters anhaengen! F- "Ist '\' auch ein spezieller Charakter?" A- Ja. Versuchen Sie mal die Zeichenkette 'per e\.emplum' zu finden. Bevor Sie verrueckt werden: /per e\\\.emplum Beachten Sie auch, dass '/' beim Suchen ebenfalls ein spezieller Charakter ist. Um '/' zu finden, benoetigen Sie: /\/ Uebungen: a - Suchen Sie die Zeichenketten '\*\*\*' und 'per e\\\.emplum'. b - Finden Sie den Anfang jeden Abschnitts, der mit '--' markiert ist. Versuchen Sie das Suchmuster so zu gestalten, dass die '--' dieser Uebung nicht gefunden werden! Ist '-' ein spezielles Zeichen? c - Suchen Sie "--" in der vorhergehenend Uebung ohne jedoch die Abschnitt-Anfaenge noch die Zeichenkette in dieser Uebung zu finden. d - Was passiert, wenn Sie folgende Suchmuster eingeben? Versuchen Sie es. /... .X...... /... .X /.....X Beachten Sie den Unterschied zwischen den letzten beiden Varianten. e - Suchen Sie die Zeichenkette '../images' ohne './somedir/images' zu finden. PS: Die speziellen Zeichen, die die meisten vi's unterstuetzen entsprechen den "global regualar expression patterns", so wie sie auch die Kommandi grep, sed, awk, perl usw. unterstuetzen. Diese werden auch Meta-Zeichen genannt und dienen der Formulierung von Suchmustern. Die ueblichsten sind: . irgend ein Zeichen. * beliebige Wiederholung des vorgestellten Zeichen (0 bis unendlich!!!) a* kann gar nichts oder aaaaaaaaaaaaaaaaaa meinen! bb* mindestens ein b aber auch bb, bbb, bbbb oder gar bbbbbbbbbbbbb .* gar nichts und alles ????? tja, so ist das nun mal. ..* mindestens irgend ein Zeichen! [abc] Zeichenklasse, entweder a oder b oder c an dieser Stelle [A-Z] Ein Grossbuchstabe an dieser Stelle [a-z569] Ein Kleinbusctabe oder 5 oder 6 oder 9 an dieser Stelle. [^13579] Die Ausschlussklasse, alles ausser 1, 3 , 5, 7 oder 9 an dieser Stelle. Beachten Sie das ^ als erstes Zeichen! ^ Suchmuster beginnt am Zeilenanfang. ^[Hh]allo findet alle Hallo und hallo am Zeilenanfang $ Suchmuster endet an Zeilenende. [HWBRS]and$ findet diverse Hauptwoerter, die genau am Zeilenende stehen. \ Das Flucht-Symbol oder doch besser der Escape-Charakter? Er hebt wie bereits oben erwaehnt, vom nachfolgenden Zeichen, die Spezialfunktion auf. Mit sowas koennen Sie sich stundenlang beschaeftigen :-) -- 1.5 Benutzen des set-Kommandos Um versteckte Zeichen zu erkennen versuchen Sie mal: :set list Das Dollarzeichen ($) zeigt nun das Ende einer jeden Zeile an. So lassen sich eventuelle Leerschlaege besser erkennen. Sobald Sie die $s stoeren: :set nolist Zeilennummerierung schalten Sie wie folgt ein und aus: :set number :set nonumber Die aktuelle Modus-Anzeige schalten Sie wie folgt ein und aus: :set showmode :set noshowmode vi ist beruehmt dafuer, nicht allzuviel von langen Reden zu halten, deshalb gibt's auch kurze Alternativen: :set li :set noli :set nu :set nonu :set smd :set nosmd PS: Achtung, in "Turbo"-Versionen von vi klappen manchmal nicht alle Abkuerzungen. Unter Solaris koennte 'set li' fuer 'list' oder 'lisp' stehen, was vi mit einer Fehlermeldung beantwortet! Uebung: a - Was passiert, wenn Sie folgende tippen? :set nu li smd :set nu noli smd *** 2 WEITERE INFORMATIONEN -- 2.0 Andere Kommandi Die folgenden Kommandi sind nicht lebenswichtig, Sie werden sie Schritt fuer Schritt lernen und bald nicht mehr missen wollen. IText (insert) "Text" wird am Anfang der Zeile eingesetzt. AText (append) "Text" wird am Ende der Zeile angehaengt. dw (delete word) Loescht das aktuelle Wort, beginnend von der Cursor- position. (Verweilung im Kommando-Modus) cw (change word) Ueberschreibt das aktuelle Wort, beginnend von der Cursorposition. (Einsetz-Modus bis [ESC]) 5dw Loescht 5 Woerter 5cw Ueberschreibt 5 Woerter s (substitute) Ersetzt das Zeichen unter dem Cursor. 5s Ersetzen der naechsten 5 Zeichen. x Loescht das Zeichen unter dem Cursor. 5x Loescht 5 Zeichen, vom Cursor und nach rechts. dd (delete) Loescht die aktuelle Zeilen. 5dd Loescht 5 Zeilen, von der aktuellen an. :18,22d Loescht die Zeilen 18 bis und mit 22. D Loescht vom Cursor bis Ende Zeile. cc (change) Aendert die aktuelle Zeile. 5cc Aendert 5 Zeilen, von der aktuellen an. :18,22c Aendert die Zeilen 18 bis und mit 22. C Aendert vom Cursor bis Ende Zeile. ZZ Speichern und vi beenden. yw (yank) Speichert das aktuelle Wort in einem Puffer... yy ...dito, aber ganze Zeile... 5yy ...oder gar 8 Zeilen. BEMERKUNG: Alles was gespeichert oder geloescht wird, landet in einem temporaeren Puffer (nur die letzte Aktion!). Dies kann recht einfach fuer "kopieren und einsetzen" (copy/paste) verwendet werden. p (paste) Fuellt den Puffer wieder in die Datei ein. Zeilen nach der aktuellen, anderes rechts vom Cursor. PS: Probieren Sie doch mal xp. PS: Anstelle des temporaeren Puffers sind auch Puffer mit einem einstelligen Namen moeglich: "f3dd loescht die naechsten 3 Zeilen und speichert sie im Puffer f "fp setzt den Inhalt von Puffer f am Cursor ein. 0 (Ziffer Null) Zum Zeilenanfang. $ Zum letzten Zeichen der Zeile. :$ Zum Dateiende, genau wie G. ^ Zum ersten "Nicht-Leerzeichen" in der Zeile. Probieren Sie's auf dieser Zeile! 7| Cursor zum siebten Zeichen in der Zeile. H (high) Zur ersten Zeile auf der angezeigten Seite. L (low) Zur letzten Zeile auf der angezeigten Seite. M (middle) Cursor in die Mitte der angezeigten Seite. [CTRL] u (up) eine halbe Seite auf. [CTRL] d (down) eine halbe Seite ab. [CTRL] y Bildausschnitt eine Zeile auf, Cursor bleibt. [CTRL] e Bildausschnitt eine Zaile ab, Cursor bleibt. [CTRL] g Information zur aktuellen Datei (ganz unten). [CTRL] l Neuschreiben der Anzeige. [CTRL] h Cursor rueckwaerts. Funktioniert auch im Einsetz- Modus! fx (find) Findet das naechste x auf der aktuellen Zeile. ; Findet das naechste "x" auf der aktuellen Zeile. , Findet das verherige "x" auf der aktuellen Zeile. Fx (Find) Findet das vorherige x auf der aktuellen Zeile. ; Findet das vorherige "x" auf der aktuellen Zeile. , Findet das naechste "x" auf der aktuellen Zeile. PS: Interessant sind die Marken, die Sie im Text setzen koennen. Marken haben einen einbuchstabigen Namen. ma setzt die Marke a auf der aktuellen Zeile. 'a Der Cursor springt zur Marke a. :'a[ENTER] dito Uebungen: a - Probieren Sie die folgenden Kommandi. 0, $, :$, ^, 3|, H, L, M b - Probieren Sie diese Kommandi. [CTRL] u, [CTRL] d, [CTRL] y, [CTRL] e, [CTRL] g, [CTRL] l, [CTRL] h c - Gehen Sie zur vorherigen Zeile und finden Sie alle "T"s. Wie waer's mit den Kommandi f und F? d - [CTRL] h hat es in sich: d1) Im Einsetz-Modus kann man damit zurueck fahren, um zu korrigieren, d2) Im Kommando-Modus kann man ein falsch eingetipptes Kommando korrigieren. Probieren Sie: d1) mit einem beliebigen Text d2) mit einem set-Kommand. PS: Falsch angefangene Befehle wie 55dd brechen Sie besser mit [ESC] ab! e - Probieren Sie yy oder dd zusammen mit p aus, das werden Sie gut gebrauchen koennen. Probieren Sie das mit und ohne Cursorbewegung dazwischen. Probieren Sie auch mehrmals p. -- 2.1 Suchen-Ersetzen von Zeichenketten Um Zeichenketten zu ersetzen (substituieren) gibt es verschiedene Kommandi: :s/old string/new string/ Bei mehreren Vorkommnissen von "old string" auf der aktuelle Zeile, wird nur das erste ersetzt. Falls Ihr Muster selber / enthaelt, muessen Sie diese 'quote'n, also \/ schreiben, oder Sie verwenden ein anderes Trennzeichen. z.B:s:/:\: vi nimmt das erste Zeichen hinter s als das aktuelle Trennzeichen! :s/old string/new string/g g bewirkt, dass alle Vorkommnisse der aktuellen Zeile ersetzt werden. PS: Anstelle g ist auch c oder gc moeglich, Sie muessen dann jedes Ersetzen bestaetigen. n = nein y = ja a = alle q = quit ^E und ^Y fuer Auf-/Ab-Bewegungen :1,9s/old string/new string/g Wie oben, arbeitet aber in den Zeilen 1 bis 9. :7,$s/old string/new string/g dito von Zeile 7 bis Dateiende. :%s/old string/new string/g dito aber in der ganzen Datei, falls % nicht funktioniert, nehmen Sie stattdessen 1,$. PS: 'a,'bs/[Hh]allo/--&--/ Ersetzt zwischen den markierten Zeilen a und b alle Vorkommnisse von Hallo oder hallo durch --Hallo-- oder --hallo--. &, das kommerzielle UND, fuegt in der Ersetzen-Zeichenkette das gefundene Wort ein. Gut, gell. ~ (swap case) wechselt Buchstaben unter dem Cursor von GROSS- auf klein- Schreibe und umgekehrt. Auch recht praktisch. -- 2.2 Rueckschreiben von Dateien Sie wissen bereits, dass Sie waehrend des Bearbeitens der Datei "Nr1", mit :w auf Platte speichern koennen. Mit :w EineAndereDatei koennen Sie den aktuellen Text auch in eine andere Datei speichern. Sie koenne aber auch mit: :3,9w EineAndereDatei die Zeilen 3 bis 9 in eine andere Datei speichern. Sollte "EineAndereDatei" bereits vorhanden sein: :w! EineAndereDatei Ueberschreibt die Datei "EineAndereDatei" :w>>EineAndereDatei Haengt dies den ganzen Text an "EineAndereDatei" an. :3,9w>>EineAndereDatei Haengt dies die Zeilen 3 bis 9 an "EineAndereDatei" an. :e EineAndereDatei Editieren Sie so die Datei "EineAndereDatei" Nun ueben Sie das mal. Lassen Sie sich doch die Zeilennummern einfach anzeigen. -- 2.3 Einlesen von andern Dateien Sie koennen eine bestehende Datei auch an einer beliebigen Zeile einlesen. :r NochNeDatei Fuegt eine Kopie von "NochNeDatei" hinter der aktuelle Zeile ein. Probieren Sie das auch mal aus. -- 2.4 Mehrere Dateien gleichzeitig offen halten Mit vi koennen Sie mehrere Dateien gleichzeitig bearbeiten. vi ersteDatei zweiteDatei dritteDatei [...] vi erlaubt Ihnen nun eine Datei nach der andern zu bearbeiten. Mit :n wechseln Sie zur naechsten, mit :N zur vorherigen. BEMERKUNG: Beachten Sie die Aehnlichkeit zum Suchen-Kommando! F- "Warum sollt ich um alles in der Welt mehrere Dateien gleichzeitig bearbeiten wollen." A- Vielleicht muessen Sie ja mal dieselben Operationen (Suchen, Mod- izieren, Ersetzen, ...) an mehreren Dateien ausfuehren. Mit dieser Moeglichkeit von vi koennen Sie das sehr elegant machen. -- 2.5 Oeffnen einer Datei im Nur-Lese-Modus Dies kennen Sie bereits, man nimmt die Nur-Lese-Option des vi. vi -Readonly dateiname Oder die Kurzform: vi -R dateiname Manchmal geht's auch mit: view dateiname Selbstverstaendlich ist das auch mit mehreren Dateien moeglich: vi -R datei1 datei2 datei3 [...] -- 2.6 Shell-Kommandi F- "Was ist den eine Shell? A- Das ist der Kommandozeilen-Interpreter, um Befehle wie ls, rm oder cat auszufuehren. Ein Vermittler zum Betriebsystem. (Fuer DOSis ist das commamd.com, um Befehle wie dir, del oder type auszufuehren.) Sie koennen jedes moegliche Betriebsystem-Kommando ausfuehren, Sie muessen nur vorher ":!" tippen. Nach der Kommando-Ausfuehrung sind Sie immer noch im vi. Sie koennen sich unter UNIX das aktuelle Verzeichnis wie folgt ansehen: :!ls (Nicht-UNIXler verwenden natuerlich Ihre eigenen Betriebsystem-Kommandi.) Uebungen: a - Probieren Sie das mit ein paar Kommandi, schauen Sie aber, dass Sie vi dazu nicht verlassen. b - Versuchen Sie auch UNIX-Piplining :!echo hallo | sed -e s/hal/HEL/ :!ps -ef | grep vi c - Natuerlich koennen Sie auch eine Kommando-Sequenz eingeben. :!pwd; ls -l; ps -ef | grep vi d - Sehen Sie sich die Befehls-Wiederholung an: :!ls :!! :!! -l Das freut den csh-Benutzer. F- "Kann ich alles tun, was ich am Kommando-Prompt tun kann?" A- Ja. PS: Sie koennen sogar noch mehr tun, Sie koennen sich die Ausgabe des Kommandos auch in die aktuelle Datei holen: :r!date Und Sie koennen sogar die Betriebsystem-Kommandi aus dem vi fuettern: :.,+10!sort | tr 'A-Z ''a-z' Sendet die aktuelle Zeile und noch zehn weitere dazu ins sort-Kommando, dieses 'pipe't die sortierte Ausgabe ans translate-Kommando, welches alle Gross- in Kleinbuchstaben wandelt. Das Resultat wird nun an Stelle des urspruenglichen Bereichs eingefuegt. (Beachten Sie, dass Sie jedes BS-Kommando verwenden koennen!)Z.B. auch: 'f,'g! cb Sendet die Zeilen zwischen den Marken f und g an den C-Beautifier und setz den schoen gestilten Quellcode wieder ein. -- 2.7 Eine Shell temporaer oeffnen. Eine shell oeffnen Sie einfach durch die Eingabe von: :sh PS: Es ginge selbstverstaendlich auch :!sh Die shell beenden Sie mit exit, logout oder [CTRL]D, dem UNIX-EOF-Zeichen. Nur Mut, probieren Sie es aus. F- "Was kann ich mit einer neuen Shell anstellen?" A- So ziemlich alles. Erstmals sind da die ganzen andern BS-Kommandi und dann koennten Sie auf die Idee kommen nochmals vi zu starten und ne andere Datei zu editieren. In diesem vi koennten Sie natuerlich wieder ne shell oeffnen und ... Treiben Sie's einfach nicht zu bunt. -- 2.8 Macros Haben Sie schon mal probiert, in einem 4000-Zeilen Text auf jeder Zeile das letzte Zeichen zu loeschen? Fuer das brauchen Sie kein Macro, das geht mit :1,$s/.$// Wenn Sie aber die Befehls-Sequenz nicht immer wieder neu eingeben wollen, speichern Sie sich sowas in einem Macro. Sie koennen sich sicher vorstellen, das vi diese Aufgabe meisterhaft erledigt. Pech fuer Sie, das dies den Rahmen fuer diese Einfuehrung sprengt. Sollten Sie aber etwas Gefallen an diesem nuetzlichen Werkzeug gefunden haben, schlagen Sie doch unbedingt in der vi-Onlinehilfe, der Manual-Page, oder wie echte UNIXler sagen, man-page nach: man vi bzw. natuerlich: :!man vi wenn Sie gar nicht mehr aus dem vi raus wollen. PS: So enden viele Beschreibungen, ich moechte hier aber noch ein 'Bombo(CH)', 'Zuckerle(A)' oder 'Lutschpastille(D)' zu Macros abgeben. Uebermaessiger Konsum dieser Schleckereien kann zu suchtaehnlichem Verhalten fuehren. Zu Risiken und blabla, diskutieren Sie mit Ihren Freunden. Also, Macros werden in bezeichneten Puffern gespeichert. Schreiben Sie sich den gewuenschten Befehl auf eine Zeile und legen Sie die Zeile mit "zdd im Puffer z ab. Mit @z fuehren Sie das Macro aus. Solche Macros sind nach dem Verlassen von vi leider verloren. Steuerzeichen muessen uebrigens ein [CTRL]V vorangestellt bekommen! Oder diesen: :ab mfg Mit freundlichen Gruessen[ENTER] Nun geben Sie im Einsetz-Modus mfg[ENTER] ein, wau! Oder diesen: :map machs [CTRL]V:1,$s/.$//[ENTER] Nun geben Sie im Kommando-Modus machs[ENTER] ein, doppel-wau. Tip: Verwenden Sie fuer den Macro-Namen, hier im Bsp. machs, Namen, die mit einem Buchstaben eines wenigbenutzten Kommandos beginnen. Ein Macroname wie xxx ist nicht nur unzuechtig, x ist auch das Einzel- Zeichen-Loesch-Kommando, Wenn Sie nun nur x eingeben, legt vi erst mal eine Gedenksekunde ein, um zu sehen, ob Sie nun x meinen oder noch xxx weiter tippen. Gut geeignete Kanditaten: K V g q , ; - * = Achtung: Aeltere vi's erlauben nur einbuchstabige Macronamen! Noch ein Tip: Typischerweise gibt es zu vi eine Ressourcen-Datei, die meist .exrc/.virc oder so heisst. In dieser koennen Sie natuerlich auch eigene Einstellungen/Macros vermerken. Bsp. fuer .exrc: "dies ist ein Kommentar set tabstop=4 set autoindent set nu " (ABSTAND? MINDESTENS EIN "!!! BLOSS KEINE LEERZEILEN!) map K eas[CTRL]V[ESC] map v :1,$s/.$//[CTRL]V[ENTER] Es lohnt sich, das letzte map-Kommando mal ohne [CTRL]V[ENTER] zu probieren. ________________________________________________________________________________ Copyright (C) 1999 - Massimo Pilolli, Modena - ITALY maxpilolli@yahoo.com Stefania Perrucci, Modena - ITALY Gerhard Thimm, St. Gallen - CH uk --> de 16.06.99 +PS: To download: http://www.navigare.org/vi-muman.html This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; see the GNU General Public License for more details.