So lernst du den vi-Editor in 15 Minuten

Der vi-Editor ist ein Texteditor, der auf allen Unix-Systemen verfügbar ist. Er kommt ohne Maus oder Funktionstasten aus und wird ausschließlich über Tastenkürzel gesteuert. Daher benötigt der Umgang mit dem vi-Editor eine kleine Einführung. Zum Beispiel diese.

Wofür eignet sich der vi-Editor

Der vi-Editor eignet sich besonders dafür, Konfigurationsdateien und Shellskripte auf Unixsystemen (wie z.B. Linux) zu bearbeiten. Der Grund dafür liegt in der hohen Verfügbarkeit: er gehört zum Standardumfang all dieser Systeme. 

Es gibt bequemere Dateieditoren unter Linux. Diese sind aber womöglich auf deinem System nicht installiert. Womöglich fehlen dir auch die Rechte, einen anderen Editor zu installieren.

Der vi funktioniert auch bei schlechter Bandbreite und in allen Terminalprogrammen.

Wenn du also in einer Remotesession ein Shellskript bearbeiten musst, dann wird vi dein Problem lösen. Andere Editoren stehen dir ggf. nicht zur Verfügung. Daher lohnt es sich, den vi so weit zu lernen, dass du damit arbeitsfähig bist.

Wofür eignet sich der vi-Editor nicht?

Der vi-Editor eignet sich nicht für umfangreiche Textverarbeitung. Du wirst darin keine E-Mails schreiben, keine Webseiten bearbeiten und keine Diplomarbeit schreiben. Dafür gibt es auch unter Linux bessere Programme wie z.B. LibreOffice für echte Textverarbeitung oder plain-text-Editoren für das Programmieren.

Wie rufe ich den vi-Editor auf?

Zum Start rufst du vi direkt mit einem Dateinamen auf. 

vi <dateiname> <enter>

Das gilt auch für eine neue Datei, andernfalls fragt der vi dich beim Speichern, wie die Datei heißen soll. Das geht, ist aber etwas mühsamer. Einfacher ist es, wenn du den Dateinamen der neuen Datei gleich mit angibst.

Wenn es <dateiname> noch nicht gibt, wird die Datei mit dem ersten Speichern angelegt. Wenn du den vi verlässt ohne zu speichern, dann wird die Datei auch nicht angelegt.

So kannst du den vi Editor verlassen – mit speichern oder ohne:

Alle Wege zum Verlassen des vi führen über den Doppelpunkt. Zum Verlassen des vi Editors gibt es diese Tastenkürzel:

  • :q <enter> verlässt den vi. Wenn die Datei geändert war, erfolgt eine Fehlermeldung: “No write since last change (add ! to override)”.
  • :q! <enter> verlässt den vi auch dann, wenn die Datei geändert war.
  • :wq <enter> schreibt die Änderungen auf die Platte und verlässt den vi
  • :w <enter> speichert die Änderungen

Wenn du diese diese Befehle (und die Betriebsmodi des vi) nicht kennst, dann passiert folgendes:

  • Du kannst keinen Text eingeben, weil du nicht weißt, wie du in den Eingabemodus kommst (siehe unten). Stattdessen erwischst du beim wilden Herumtippen auf der Tastatur irgendein Kommandokürzel, womöglich eines, das Wörter oder ganze Zeilen löscht. Statt ein paar wenige Zeichen hinzuzufügen, zerlegst du dir deinen Text komplett.
  • Als nächstes schießt du dann die Terminalsession ab, nur um diese Änderungen nicht auch noch zu speichern.
  • Du möchstest den vi in zerknüllen und in die nächste Ecke werfen.
  • Du suchst einen anderen Editor auf dem entfernten Unixsystem und stellst fest, dass keiner installiert ist und beschließt, jetzt doch den vi zu lernen.

Also: herzlich willkommen beim vi!

Die Betriebsmodi des vi

Erinnern wir uns kurz daran, dass der vi ohne Funktionstasten, ohne STRG, ohne ALT, ohne Windows-Taste und ohne Maus auskommt. Sogar die Cursortasten sind entbehrlich.

Stattdessen befindest du dich nach dem Start des vi im sogenannten “Normalmodus” (normal mode), in dem jede gedrückte Taste als Befehl, als Tastenkürzel interpretiert wird.

Navigation im vi

Wenn der vi und deine Terminalsession gut konfiguriert sind (was nicht immer der Fall ist), dann funktionieren im Normalmodus die Cursortasten. Falls die Cursortasten nicht funktionieren, dann gehen immer noch die folgenden Tastenkürzel:

  • h geht ein Zeichen nach links
  • l geht ein Zeichen nach rechts
  • j geht eine Zeile nach unten
  • k geht eine Zeile nach oben

Diese vier Zeichen liegen auf der Tastatur direkt nebeneinander. Wenn du diese Navigation brauchst (weil der Cursor nicht funktioniert), dann hilft ein wenig probieren. Nach kurzer Zeit ist das auch intuitiv, auch wenn es etwas unbequem ist.

Der Einfügemodus des vi

Aus dem Normalmodus kannst du in den Einfügemodus wechseln. In diesem Modus werden dann alle Tastendrucke (so wie man es von einem Texteditor erwartet) als Texteingabe  gewertet und in die Datei übernommen.

Du betrittst den Einfügemodus über das Tastenkürzel i (wie “insert”): dies fügt den neuen Text VOR der aktuellen Cursorposition ein. Da die Cursormarke im vi immer links von dem aktuellen Zeichen steht, ist das auch intuitiv genau das, was du brauchst.

Die Fußzeile des vi zeigt dir jetzt auch an, dass du im Einfügemodus bist.

In der Regel ist “i” das, was du willst, um in den Einfügemodus zu kommen. Wenn du dir hier nur ein Kürzel merken willst, dann nimm “i”. 

Mit etwas Glück funktionieren im Einfügemodus auch die Cursortasten. Das hängt aber von der konkreten Konfiguration des Systems und der Remoteshell ab. Ich habe schon Unixsysteme gesehen, bei denen die Cursortasten im Einfügemodus funktionieren und andere Installationen, bei denen das nicht der Fall war. Im letzteren Fall produzierten die Cursortasten im Einfügemodus Buchstabensalat.

Es gibt noch weitere Tastenkürzel, die ebenfalls den Einfügemodus betreten:

  • a (wie “append)”: dies fügt den neuen Text NACH der aktuellen Cursorposition ein.
  • o (wie in “open”): dies fügt eine Leerzeile nach der aktuellen Zeile ein. Wenn du mitten in der Zeile bist, wird diese aber dafür nicht umgebrochen. “o” gehst sozusagen an das Ende der aktuellen Zeile, bricht dort um und die Eingaben kommen in die neue Zeile.
  • I (großes i): geht an den Anfang der aktuellen Zeile und fügt dort ein.
  • A (großes a): geht an das Ende der aktuellen Zeile und fügt ohne umzubrechen dort ein.
  • O (großes o): fügt OBERHALB der aktuellen Zeile eine neue leere Zeile ein und fügt dort den folgenden Text ein.

Du verlässt den Einfügemodus durch Drücken der ESC-Taste. Danach befindest du dich wieder im Normalmodus und kannst eines der vielen Tastenkürzel eingeben, mit denen du den vi steuerst.

Vergiss nicht die ESC-Taste (ganz oben links auf deiner Tastatur). Ohne diese Taste kommst du aus dem Einfügemodus nicht heraus. Ohne ESC kannst du daher auch deine Änderungen nicht speichern.

Text im vi überschreiben

Mit dem Tastenkürzel R betrittst du den Überschreibenmodus. Der Text ab dem Cursor wird durch weitere Eingaben überschrieben. 

Achtung: das Tastenkürzel r überschreibt nur ein einziges Zeichen des Textes mit dem folgenden Tastendruck. z.B.

rd

überschreibt das folgende Zeichen mit einem d. Danach bist du sofort wieder im Normalmodus und deine folgenden Eingaben werden als Tastenkürzel interpretiert. Das ist in der Regel nicht das, was du willst. Wenn du also überschreiben willst, dann nimm das R. 

Alternativ kannst du natürlich auch ein einfaches i für den Eingabemodus nehmen, erst einmal deinen Text dazwischenpacken und den Rest anschließend löschen.

Text löschen im vi

Zum Löschen von Text gibt es zwei Möglichkeiten:

  • mit etwas Glück ist die Unixshell richtig eingestellt. Dann funktionieren im Einfügemodus (i drücken!) die Löschentaste (“backspace”) zum Löschen nach links und die Entfernentaste (zum Löschen nach rechts). Du beendest diesen Modus mit <ESC> und kehrst in den Normalmodus zurück.
  • Andernfalls nutzt du ein Tastenkürzel zum Löschen.

Die folgenden Tastenkürzel stehen dazu zur Verfügung:

  • ein x löscht das Zeichen rechts vom Cursor. Das entspricht der Entfernen-Taste unter Windows.
  • ein X löscht das Zeichen links vom Cursor und zieht den Rest der Zeile um eins nach links. Dies entspricht unter Windows der Backspace-Taste.
  • D löscht den Rest der Zeile rechts vom Cursor (und bewegt den Cursor anschließend ein Zeichen nach links. Das letzte Zeichen der Zeile steht damit rechts vom Cursor.
  • dd löscht die aktuelle Zeile komplett

Befehle wiederholen

Die meisten Befehle lassen sich durch eine vorangestellte Zahl wiederholen. Hier ein paar Beispiele:

  • 25ix<ESC> erzeugt 25x den Buchstaben x in einer Zeile
  • 5dd löscht die aktuelle Zeile und vier weitere

Weitere Möglichkeiten im vi Editor

Der vi Editor kann noch viel mehr. Die Liste der Befehlskürzel ist rund 100 Befehle lang. Welche das genau sind, hängt auch von der konkreten Version des Editors ab. Eine Aufstellung gibt es hier:

https://cs.stanford.edu/people/miles/vi.html

Aber: die allermeisten der Befehle wirst du nicht brauchen. Das, was ich in diesem Artikel aufgeschrieben habe, sollte reichen, um alle dringenden Probleme zu lösen. Wenn die Aufgabe dafür zu komplex ist, bietet es sich doch an, nach anderen Wegen zu suchen. Eine Alternative könnte sein, die Datei auf deinem heimischen Rechner zu bearbeiten und per FTP oder SFTP hin- und her zu übertragen. Das geht z.B. mit FileZilla oder WinSCP.

heiko

Dipl.-Ing. Heiko Evermann

Vorheriger Artikel