Menu Content/Inhalt
Home arrow vi improved arrow Erste Schritte
Erste Schritte PDF Drucken E-Mail

Erste Schritte mit dem vim

Sie haben bereits den vimtutor durchDDDgearbeitet? Nein?? Dann geben Sie doch einmal folgendes Kommanddo ein
user@host:~> vimtutor
...
oder, wenn es auf Englisch erscheint und unerwünscht ist, dann
user@host:~> vimtutor ge
...
um den vimtutor zu starten. Nehmen Sie sich einmal diese 30 Minuten, die Sie wahrscheinlich brauchen werden. 

Nun wollen wir uns ein "Basis-Set" an Befehlen bzw. an Last-Line-Befehlen (ex-Befehlen) des vim ansehen. Sie sollen damit in die Lage versetzt werden, mit dem vim Texte zu schreiben, den Cursor im Text zu bewegen, den Text abzuspeichern und in Dateien abgespeicherte Texte wieder mit dem vim zu öffnen. 

Ach ja - nicht dass es von dringlichster Wichtigkeit wäre - aber Sie werden, wohl oder übel auch die Prüfungsfragen mit dem vim öffnen und beantworten und abspeichern. Wie man richtig zwischensichert, wird daher von besonderem Interesse sein.

user@host:~> vim erstes.sh
~
~
~
~
...
...
~
"erstes.sh" [New File]
Um Platz zu sparen, habe ich jetzt hier nicht die ganze Bildschirmseite wiedergegeben (die zwei mit je dreiPunkten markierten Zeilen symbolisieren, dass noch weitere exakt gleiche Zeilen folgen).

Offensichtlich ist der Eingabeprompt nicht mehr zu sehen (nur für den Fall, dass Sie ihn suchen sollten!). Es hat sich (bildlich gesprochen) auf dem tty ein 25-zeiliges "Fenster" geöffne. Das es noch leer ist, sieht man am linken Rand die zahlreichen ˜-Zeichen, die jeweils eine virtuelle Leerzeile anzeigen; damit soll der maximal mögliche Zeilenbereich vorab angezeigt werden, der am Bildschirm angezeigt werden kann; in unserem Beispiel beläuft sich der Zeilenbeeich auf 24 Zeilen, derzeit noch markiert durch das ˜-Zeichen. Es ist also noch ein "leeres Blatt'l Papier".
In der Status-Zeile (unterste Zeile), sieht man noch den file-Namen und die message, dass es sich um ein neues file handelt ... ist also im angegebenen Verzeichnis noch nicht vorhanden. Die Namensvergabe machte dennoch Sinn, denn damit geben wir unseren Wunsch bekannt, dass beim ersten Zwischensichern das Gesicherte mit dem Dateinamen erstes.sh (unser obiges Beispiel) heissen soll.

:w

Jetzt haben wir den aktuellen Inhalt zwischengesichert und gleichzeitig das file namens erstes.sh erstellt, das dann alle zukünftigen Einträge enthalten soll.
Wiederum ist es die Statuszeile, die uns den Erfolg übers Zwischensichern bestätigt.

"erstes.sh" [New] 0L, 0C written

"NEW" in den eckigen Klammern machte uns darauf aufmerksam, dass "erstes.sh" neu erstellt wurde
"0L" gibt uns Auskunft über die Zeilenanzahl (Lines), und
"0C" sagt uns, wieviele Zeichen (characters) wir im Text finden können.
Wie schon erwähnt - noch ist es ein leeres Blatt.

Wer dann gleich lostippen möchte, wrid dann einmal sein "blaues Wunder" erleben, denn wir befinden uns vorerst noch im sogenannten Befehlsmodus.

Warum gibt es einen Befehlsmodus?

Es gibt im vim keine menues wie vereinzelt in anderen Editoren (e.g. xemacs), und selbst da werden zahlreiche Tastenkombinationen angeboten, mit denen eine Aktion durchgeführt wird.

Der Befehlsmodus bietet Ihnen die Möglichkeit, Aktionen einzuleiten, indem Sie einen "Tastenbefehl" absetzen.
Eine Aktion ist zum Beispiel:
"Wechsle mir vom Befehlsmodus in den Eingabemodus, sodass ich genau an der aktuellen Cursorposition beginnen kann, weiteren Text einzutippen!"

Wenn das Ihr Wunsch ist, so geben Sie den Befehl "insert" (einfügen). Wie tun Sie das?
Sie brauchen nur die Taste i ein Mal drücken, und schon können Sie Text (beginnend an der Cursorposition) eintippen, da der vim gerade im sogenannten "insert-mode" (Einfügemodus) ist.

Wollten Sie nun erneut das Kommando i geben, so würde bloss ein kleines i gedruckt im Text erscheinen, sonst nix, weil der vim nicht in den Befehlsmodus zurückwechselte. Nur im Befehlsmodus können Sie Befehle absetzen! Das ist gewöhnungsbedürftig, aber Sie werden die Umstellung sicher ganz schnell schaffen.

Um wieder in den Befehlsmodus zurückkehren zu können, brauchten Sie bloss die ESC-Taste zu drücken, und schon ist der vim bereit, Ihre nächste Anweisung entgegen zu nehmen.

"Strg-C" ist die zweite Möglichkeit, um in den Befehlsmodus zu gelangen.

Wenn Sie sich gerade nicht sicher sind, in welchem Modus der vim gerade steht, dann drücken Sie doch einfach die ESC-Taste, denn dann können Sie sich in den meisten Fällen sicher sein, dass Sie im Befehlsmodus sind.

Wechsel in den Einfügemodus

Wie bereits eingangs erwähnt, müssen Sie in den Einfügemodus (Eingabemodus) wechseln, wollten Sie Texte eintippen.

Die einfachste Variante, um in den Einfügemodus zu gelangen ist jene mit dem BEFEHL i. i steht für das englische Wort "insert" und bedeutet einfügen. Nach dem Drücken der i-Taste können sie genau an der Stelle anfangen, Texte einzutippen, wo der Cursor vor dem Wechsel von Befehlsmodus in den Einfügemodus stand.
Das bedeutet also, dass Sie vor dem Wechsel von Befehlsmodus in den Einfügemodus den Cursor an die rechte Stelle setzen können, indem Sie diesen mit den Cursor-Tasten (Pfeiltasten) bewegen (rechts, links, rauf, runter).

Das Bewegen des Cursors können Sie übrigens im Befehlsmodus auch mit den Tasten h,j,k,l bewerkstelligen, wobei h den Cursor nach links bewegt, j nach unten, k nach oben und l nach rechts.
Mit der Leertaste können Sie den Cursor ebenfalls im Befehlsmodus in Leserichtung Zeichen für Zeichen weiterbewegen, wohingegen BACKSPACE den Cursor im Befehlsmouds entgegengesetzt zur Leserichtung zeichenweise weiterbewegt.

Um am Zeilenanfang der Cursorzeile (Cursorzeile ist jene Zeile, in der sich der cursor gerade befindet) zusätzlichen Text einzutippen, können Sie nun den Cursor im Befehlsmodus ganz nach links bis zum Zeilenanfang bewegen, dort dann i drücken, um in den Eingabemodus zu wechseln und lostippen zu können.

Das hat einen entscheidenden Nachteil: Es dauert lange, bis der Cursor dort ist. Eine bessere Möglichkeit stellt die "POS1"-Taste dar, die Ihnen den Cursor an die erste Position der Zeile setzt. Übrigens - Cursor-Tasten sowie POS1, ENDE-Taste, oder PGUP/PgDown-Tasten funktionieren auch, wie gewohnt, im Eingabemodus! 

Die eleganteste Methode aber ist jene mit "I" (grosses i). I bewegt den Cursor an die erste Stelle der Zeile und wechselt den Modus von Befehlsmodus in Einfügemodus.

"A" bewegt den Cursor im Befehlsmodus ans Zeilenende und wechselt den Modus von Befehlsmodus in den Einfügemodus. Und jetzt dürfen Sie drei mal raten, was passiert, wenn Sie sich im Einfügemodus befinden, und da die Taste "A" drücken.
Ja, richtig, das tippt einfach den Buchstaben A auf den Bildschirm, nichts weiter. Im Einfügemodus tippen sie Text ein, nicht anders als in einem Textvararbeitungsprogramm von OpenOffice!

Das kleine a stellt insofern einen Sonderfall dar, da dieser Befehl den Cursor um eine Stelle nach rechts (in Leserichtung also) rücht und erst dann in den Einfügemodus wechselt.
Probieren sie es doch einfach einmal aus!!!

Wenn Sie jetzt also schon die ersten Zeilen "geschrieben" haben, dann ist es wieder an der Zeit, den aktuellen Stand zu sichern. Es geht dabei nur darum, etwaigen Textverlusten vorzubeugen, die passieren könnten, wenn unvorhergesehen plötzlich der Strom weg wäre, oder ähnliches passierte.
Wechseln Sie also nach (ich würd sagen) jedem Absatz in den Befehlsmodus, von da aus :w drücken, und die allerunterste Zeile (status Zeile) lesen, wo die Bestätigung über das erfolgreiche "Zwischensichern" abzuholen ist.
Jetzt wieder mit i zurück in den Einfügemodus und weitertippen.

Manchmal möchte man unterhalb der Cursorzeile einen neuen Absatz beginnen, und man müsste quasi ans Zeilenende hüpfen, dort in den Einfügemodus wechseln, und dann mit der RETURN-Taste (Enter-/Eingabetaste) eine neue (Leer-)Zeile einfügen.
Sie haben es wahrscheinlich schon erraten. Auch hierfür gibt es einen eigenen Befehl, nämlich o (kleines o). Der Befehl o tut nun folgendes "mit einem Tastendruck": 

  • unterhalb der Cursorzeile wird eine Leerzeile eingefügt.
  • der Cursor wird in diese Leerzeile hineinbewegt
  • Der Modus wechselt von Befehls- in Einfügemodus

Was hier manchmal ungewöhnlich erscheint ist die Länge einer Zeile ... Eine Zeile endet genau da, wo Sie die Eingabetaste gedrückt hatten. So eine Zeile kann also über mehrere Bildschirmzeilen gehen! Um schnell das Zeilenende aufzusuchen, drücken Sie die ENDE-Taste, oder im Befehlsmodus $.

O (grosses o) bewirkt, dass

  • oberhalb der Cursorzeile eine Leerzeile eingefügt wird
  • der Cursor wird in diese Leerzeile hineinbewegt
  • Der Modus wechselt von Befehls- in Einfügemodus

Jetzt haben wir bereits sechs Befehle kennengelernt, mit deren Hilfe wir in den Einfügemodus wechseln können.
Vergessen Sie nicht das Zwischensichern mit :w. Aber angenommen, dass Sie Ihre Texteingaben abgeschlossen haben und nun das file wieder schließen wollen - tja, dann gibt es :wq oder ZZ. Beide Befehle speichern die Änderungen ab und verlassen (schließen) das file.

Mehr Fortbewegungshilfen

Mit

user@host:~> echo $LINES 25 user@host:~> echo $COLUMNS 80 user@host:~> können Sie feststellen, wieviele Zeilen (von oben nach unten) und wieviele Zeichen pro Zeile (links nach rechts) Ihnen am Bildschirm angezeigt werden können.
Da Ihnen die unterste Bildschirmzeile immer als "Statuszeile" dient, bleiben Ihnen 24 Zeilen zum Tippen.

Mit dem Befehl H bewegen Sie den Cursor in die oberste Zeile des Zeilenbereichs, der Ihnen am Bildschirm angezeigt wird, und in dieser Zeile kommt der cursor auf das erste Zeichen der Zeile zu stehen, das kein Leerzeichen oder Tabulator ist.
M bewegt den Cursor in die Mitte des Bildschirms, und da auf das erste Zeichen der Zeile, das kein Leerzeichen oder Tabulator-Zeichen ist.
L bewegt den Cursor mit einem "Hupf" in die unterste Zeile der Bildschirmausgabe und da wiederum auf das erste Zeichen dieser Zeile, das kein Leerzeichen oder Tabulator ist.
Wir merken uns also "H, M, L" - das ist ja schon was für den Anfang.

Um den Cursor mit einem Tastendruck in die unterste Zeile des gesamten Dokuments zu bewegen, geben wir das Kommando G (Shift+g). Um gezielt eine Zeile durch Angabe einer Zeilennummer anzusteuern, verwende ich wieder G und stelle die gewünschte Zeilennummer voran. 15G bewegt den Cursor in die 15-te Zeile. Strg-g hilft mir, das zu überprüfen.

Strg-g gibt nun Auskunft in der Statuszeile darüber, wie das file heisst, das gerade bearbeitet wird (plus etwaig vorangestellte Pfadangabe, falls es eine Absolute Pfadangabe oder eine (explizit) relative Pfadangabe beim Aufruf des files gab), dann wird in eckigen Klammern darauf hingewiesen, wenn es "Modified" (verändert) wurde, damit wir wissen, dass wir noch ungesicherte Änderungen im Text haben - wenn Sie Strg-g unmittelbar nach einem Zwischensichern drücken, gibt es diesen Eintrag nicht.
Witers wird dann noch angegeben, in welcher Zeile der Cursor gerade steht und wieviele Zeilen das Dokument in Summe hat, dann eine Prozentangabe, wie weit der cursor prozentual im Dokument fortgeschritten ist, und die Angabe der Spaltenzahl, was nichts anderes bedeutet, wieviele Zeichen der cursor in der Zeile rechts vom ersten Zeichen steht.

Neben z.B. 2G gibt es auch die Möglichkeit eines last-line Kommandos, nämlich :2, was dasselbe bewirkt. Wie gesagt, Ziel ist es, den Cursor gezielt in eine gewisse Zeile zu setzen.
Wenn Sie nun nur eine Zahl tippen, sagen wir 5 gefolgt von der RETURN-Taste (Enter, Eingaabetaste), dann hüpft der Cursor genau fünf Zeilen in Leserichtung weiter nach unten!

so, jetzt wird's resch! Na, scherzerl -
Wir lernen den Befehl f kennen. Was tut der? Wenn Sie den Befehl f gefolgt von einem Buchstaben eingeben, dann hüpft der Cursor an die erste mögliche Übereinstimmung in Leserichtung mit dem angegebenen Buchstaben. Drückten Sie z.B. fb, dann hüpft der cursor auf das erste kleine b, das in einem Wort (in Leserichtung) vorkommt. Der Befehl F tut dasselbe in entgegengesetzter Leserichtung.
Soll das übernächste "b" angesprungen werden, dann lautet die Angabe 2fb - so können Sie schnell den Cursor innerhalb einer Zeile auf eine gewünschte Stelle hinsteuern.
Wir merken uns die Befehle "f, F" (zumindest bis zur Prüfung!)

Eine weitere Methode, den Cursor schnell in einer Zeile von Wort zu Wort hüpfen zu lassen besteht durch das Kommando w (klein w) oder W (grosses w). Der Cursor hüpft von einem Wortanfang zum nächsten.
So, wo liegt der Unterschied zwischen w und W (und BITTE NICHT verwechseln mit dem Zwischensichern :w, denn der Doppelpunkt leitet immer ein last-line-Kommando ein!!)? Um das zu erklären, verwenden wir das Beispielwort "Sonder&zeichen".
Annahme: Der Cursor steht auf dem S, also am Wortanfagn, und wenn Sie jetzt das Kommando w (kleines w) geben, so hüpft der Cursor auf das Sonderzeichen, was hier das sogenannte "kaufmännische UND" ist. Hätten Sie stattdessen W als Befehl gewählt, so wäre der cursor ohne Zwischenstopp direkt auf den Anfang des nächsten Wortes gehüpft. Der Beistrich ist das Sonderzeichen, das da wohl am häufigsten angesprungen wird. Interessanterweise gilt der Unterstrich NICHT als sonderzeichen, wohingegen der Bindestrich wiederum als Sonderzeichen gilt.

Die Befehle e und E tun fast dasselbe wie w und W, nur da hüpft der Cursor ans Wortende und nicht an den Wortanfang.

... und was in Leserichtung geht, das geht auch in entgegengesetzter Leserichtung mittels den Befehlen b und B.

Für "w, W, e, E, b, B" gilt übrigens wieder, dass wenn Sie z.B. 3w angeben, dass dann der Cursor ab aktueller Cursorposition drei Wörter in Leserichtung weiterbewegt wird.
Probieren Sie auch einmal aus, was passiert, wenn Sie die w-Taste im Befehlsmodus gedrückt halten - richtig, der Cursor "rast" förmlich von Wort zu wort - auch nett.

Sie können nun Dateien mit dem vim erstellen, mit dem vim öffnen, Texte an gewünschten Stellen hinzufügen, die Änderungen abspeichern, sich im Text von Zeile zu Zeile bzw. von Wort zu Wort bewegen und das Textfile wieder verlassen. Wie sieht es mit Textkorrekturen aus?

Mit Strg-f können Sie Bildschirmseitenweise weiterblättern - der Cursor wird dabei dann immer auf die oberste Zeile des angezeigten Zeilenbereiches gesetzt. Mit dem Befehl Strg-b wird seitenweise zurückgeblättert, und der cursor kommt in der untersten Zeile der Bildschirmausgabe zu liegen.

Textkorrekturen

Im vim funktionieren per default die gewohnten "Entf"-Taste im Befehlsmodus und im Einfügemodus und die "Backspace"-Taste im Einfügemodus zum Löschen des Zeichens links vom cursor und im Befehlsmodus zum Bewegen des Cursors zeichenweise in entgegengesetzter Leserichtung, was Ihnen immer über die Runden hilft, wenn Sie sich am Anfang schwer tun, die folgenden Befehle zu merken. Warum das mit Backspace im Einfügemodus funktioniert, schauen wir uns in einem anderen vim-link an, weil uns das im Moment noch net wirklich kratzt, oder??

Das kleine x schneidet genau einen Buchstaben aus, und zwar den, auf dem gerade der Cursor steht, tut also dasselbe wie die Entfern-Taste. Warum also den Befehl x (kleines x) verwenden??
Wiederum aufgrund der Angabe von Zahlen vor dem Befehl, die angeben, wie oft der Befehl ausgeführt werden soll. 10x löscht also 10 Zeichen in Leserichtung - da müssten Sie schon 10 Mal die Entfern-Taste drücken, um dasselbe Resultat zu erzielen.

Wir haben schon gesehen, was die Befehle w (kleines w), W (grosses w), b, B, e und E bewirken.
. Das englische Wort für Löschen ist "delete", das mit d abgekürzt wird. Kombiniert man dieses d mit w, W, b, B, e. E, so kann man wortweise löschen.
dw bewirkt, das der Cursor durch den Befehl w weiterbewegt wird, und alles, was der Cursor überschreitet, wird ausgeschnitten! So einfach kann es gehen!!
3dW löschte drei Wörter in Leserichtung.
Was bewirkt nun der Befehl:
dfo???
Nun - offensichtlich ist es ein Löschbefehl; jetzt müssen wir nur noch wissen, was fo tut - der Cursor hüpft auf das erste Zeichen "o", das er in Leserichtung findet. Mit zusätzlichem d wird dieser Bereich, der vom Cursor überhüpft wird gleichzeitig ausgeschnitten! Ist das nicht fantastisch??

Was bewirkt nun die Eingabe von 3dfo im Eingabemodus?? Eine sehr beliebte preisfrage! Nun - die Eingabe von 3dfo im Eingabemodus bewirkt, dass Sie 3dfo in Ihren Text an der Cursorposition eintippen. Achten Sie also auch auf die Fragestellung!

Mit dem Befehl dd löschen Sie die gesamte Cursorzeile! Mit dem Befehl 3dd löschen Sie drei Zeilen inklusive Cursorzeile!

Rückgängig machen

Jetzt kann es vorkommen, dass man "Mist baut" - okay - ich sollte nicht von mir auf andere schließen; es kann aber leicht passieren, dass Sie etwas löschen, was nicht gelöscht hätte werden sollen!

Dafür gibt es die undo-Direktive!
u (kleines u) und U (grosses u). Da gibt es jetzt einen grossen Unterschied zwischen dem Original-vi aus der UNIX-Welt und dem vim; im Original-vi kann man die letzte Angabe durch den Befehl u (kleines u) rückgängig machen, und durch erneutes Drücken von u wird das letzte "rückgängig machen" rückgängig gemacht.

Im vim können die letzten Tausend (!) Aktionen rückgängig gemacht weden!

Mit dem Befehl U (grosses u) werden alle Änderungen der Cursorzeile rückgängig gemacht.

Wenn Sie vor lauter hin und her - Fehlern dort und da, gelöscht ja/nein? ...
also mit einem Wort - wenn Sie sich nimmer auskennen, was da alles passiert ist, dann BITTE, KEINE Zwischensicherung durchführen!! Verlassen Sie das Dokument ohne zu speichern!! Wie das geht?

Das geht mittels des last-line Befehls :q!

Mit dem r-Befehl können Sie sich das Zeichen unterm Cursor durch eines Ihrer Wahl ersetzen lassen. Sie bleiben dabei im Befehlsmodus!!

So - genug - für "Erste Schritte" reicht das oberhalb gezeigte aus. Sie können mit diesem Wissen auch die Prüfungsfragen beantworten, indem Sie unterhalb jeder Frage im vorgesehenen Bereich Ihre Antworten hinschreiben - spätestens jetzt wird für Sie die Möglichkeit des Zwischensicherns sicher sehr von Interesse sein und im Gedächtnis haften bleiben.

 

Scroll-news

Mailingliste:
http://mlists.in-berlin.de/mailman/listinfo/lieo-mlists.in-berlin.de 

 

Das Forum ist online gegangen

 


Who's Online

Google AdSense