Hausarbeit
Vim für Einsteiger
im Fach Open Source Software Entwicklung
Dominik Fischer
Matrikelnr.: 700006
Inhaltsverzeichnis
1 Ein Rückblick 3
2 Die Bedienung von Vim 3
2.1 Starten und Beenden 3
2.2 Grundlegende Funktionen 4
2.2.1 Bewegen des Cursors 4
2.2.2 Text schreiben und löschen 5
2.2.3 Suchen und Ersetzen 5
2.2.4 Speichern und Laden von Dateien 6
2.2.5 Ausschneiden und Einfügen 6
2.2.6 Arbeiten mit mehreren Dateien 7
2.2.7 Dateiwiederherstellung 7
3 Fazit 8
Literaturverzeichnis 9
Linkverzeichnis 9
Der Editor vi gehört seit langem zu den Grundbestandteilen eines UNIX Systems. Er ist einer der ersten Editoren, die nicht auf lediglich eine Zeile fixiert sind (vgl. ed) sondern den ganzen Bildschirm nützen.
In der Zeit der graphischen Benutzeroberflächen erfreut er sich gerade bei jungen PC Anwendern nicht allzu großer Beliebtheit [Wieland S. 340], was sicherlich auf die wenig intuitive Handhabung zurückzuführen ist [vioeilly Umschlag].
Er verdient trotzdem einer intensiven Betrachtung, da er
auf jedem UNIX/Linux System anzutreffen ist
ein mächtiges Werkzeug ist um "schnell und kompakt spezifische oder systematische Änderungen" [Wieland, S. 340] durchzuführen.
Eine weit verbreitete Variante ist Vim, der vi improved. Er ist auf seiner eigenen Web-Site [1] zu finden. Dort kann man ihn für viele Betriebssysteme, u.a. für MS-DOS, MS-Windows, Amiga, OS/2, Macintosh und natürlich verschiedenste Linux/UNIX Varianten erhalten. Vim ist sog. Charityware (Spenden für Waisenkinder in Uganda sind erwünscht) und besitzt eine General Public Licence konforme Lizenz [features].
Er unterscheidet sich vom klassischen vi darin, dass er neben einem Terminaltextmodus auch eine graphische Benutzeroberfläche bietet, die zusätzlich mit Maus bedienbar ist.
Es gibt jedoch auch viele andere Varianten des Ur-vi Editors [2], die alle eine ähnlich Bedienung aufweisen, hier jedoch unberücksichtigt bleiben. Auf die graphische Benutzeroberfläche, die Vim bereitstellt wird in dieser Arbeit ebenfalls nicht eingegangen.
Der Editor wird, mit dem Kommando
bzw. mit Angabe der zu öffnenden Datei,
gestartet. Die Datei wird, sofern sie nicht existiert, angelegt. Durch das voranstellen eines + vor den Dateinamen wird der Cursor nicht am Dateianfang sondern am Ende positioniert [Wieland S.341]. Es ist über die Option +n möglich die Datei an der angegebenen Zeile n zu öffnen.
Neben dem Text wird zusätzlich in einer Statusleiste die Anzahl der Zeilen und Zeichen, die die Datei enthält angezeigt, sowie ob die Datei schreibbar markiert ist oder nicht.
Der Editor Vi(m) ist ein sog. modaler Editor, er arbeitet in unterschiedlichen Modi:
Kommandomodus auch Normalmodus genannt: hier befindet man sich nach dem Programmstart. Der Cursor kann bewegt werden, Text gelöscht, eingefügt und verschoben werden. Alle Zeicheneingaben werden als Kommandos interpretiert.
Im Eingabemodus kann Text eingegeben werden.
[Wieland S. 342] nennt als dritten Modus den sog. "Letzte-Zeile-Modus": er dient z.B. dazu andere Dateien zu laden, Text zu suchen und zu ersetzen. Die offizielle Vim Dokumentation kennt diesen Modus nicht, sondern fasst ihn mit dem Kommandomodus zusammen. Man könnte auch von einer eigenen Klasse von Befehlen sprechen, die all mit dem Zeichen : beginnen.
Die folgende Grafik aus Wieland soll veranschaulichen wie zwischen den Modi gewechselt werden kann:

Grafik nach [Wieland S.342]
Möchte man nach dem Programmstart mit der Texteingabe beginnen, so muss zuerst über das drücken der Taste i (insert) in den Eingabemodus gewechselt werden. Die Statuszeile zeigt den Wechsel mit „Insert“ an. Alternativ kann auch mit a (append) in den Eingabemodus gewechselt werden. Der Text wird dann nicht vor, sondern nach dem Cursor eingefügt.
Um Vim zu verlassen muss zuerst mit der Taste Esc in den Kommandomodus gewechselt werden. Durch Eingabe eines : kommt man in den sog. „Letzte-Zeile-Modus“, d.h. der Cursor ist nun in der letzten Zeile. Durch die Befehle wq (write, quite – sichern, beenden), oder q! (beenden ohne Änderungen zu speichern) kann der Editor verlassen werden. Im folgenden Verlauf der Arbeit wird der Letzte-Zeile-Modus nun nicht mehr explizit erwäht, sondern lediglich die Befehle mit dem vorangestellten Doppelpunkt angeben, also in diesem Fall: :wq bzw. :q! zum Beenden der Anwendung.
Nachdem zur Textbearbeitung mehr nötig ist als das bloße Schreiben, hier weitere grundlegende Funktionen.
Wie oben erwähnt, ist das bewegen des Cursors innerhalb des geschriebenen Textes nur im Kommandomodus möglich.
Mit den Pfeiltasten (←, ↓,↑,→) kann der Cursor jeweils ein Zeichen in die entsprechende Richtung bewegt werden. Vorsicht: Dies funktioniert nicht unter allen vi-Klonen. Ursprünglich waren die Tasten h, j, k und l zur Bewegung nach links, unten, oben und rechts vorgesehen. Diese funktionieren auch noch heute. Da die Hand nicht vom Hauptfeld der Tastatur genommen werden muss, bieten diese Tasten den angenehmen Vorteil einer blinden Bedienbarkeit des Editors.
b und w: ein Wort nach links bzw. rechts springen.
Pos1 und Ende: zum Zeilenanfang bzw. -ende gehen. Alternativ sind auch 0 und $ zulässig.
Bild↑ bzw. Bild↓: eine volle Bildschirmseite zurück bzw. vor (Alternativ Strg B / Strg F), eine halbe Seite mit Strg U respektive Strg D
G springt zum Dateiende, H zur ersten Zeile, M zur Mitte und I zur letzten Zeile des Bildschirms.
Um eine bestimmte Zeilennummer im Dokument anzuspringen verwendet man das Kommando nG, wobei n die gewünschte Zeilenzahl ist. Durch Eingabe von n↓ kann man n Zeilen nach unten springen.
Wie bereits erwähnt kann mit i bzw. a aus dem Kommandomodus in den Eingabemodus gewechselt und Text eingegeben werden. Dieser Moduswechsel kann aber noch mit weiteren Befehlen erfolgen: so fügt I den Text am Zeilenanfang ein, A am Zeilenende. Mit o wird eine neue Zeile unter dem Cursor begonnen mit O darüber. Mit C wird ab der Cursorposition die Zeile überschrieben.
Im Falle eines Vertippens kann man den gerade eingegebenen Text mit der Backspacetaste löschen. Ein Moduswechsel ist dafür nicht nötig. Sollen sonst Korrekturen am Text durchgeführt werden, kann man im Kommandomodus mit x das Zeichen hinter dem Cursor löschen, mit X davor. dw löscht die Buchstaben des Wortes in dem sich der Cursor befindet von der aktuellen Position bis zum Wortende [Wieland S. 344]. Mit dd kann die aktuelle Zeile gelöscht werden.
Durch die Angabe einer Zahl vor dem Löschkommando wird die Zahl seiner Wiederholungen angegeben. So können durch die Eingabe von 4x die nächsten 4 Zeichen gelöscht werden. Sollen größere Abschnitte gelöscht werden, z.B. ab der aktuellen Zeile bis zum Dateiende, so kann der Befehl : . ,$d verwendet werden. In allgemeiner Form lautet er:
:<startzeile>, <endzeile>d [Wieland, S.345]. Der Punkt kann als Abkürzung für die Zeile verwendet werden in der sich der Cursor befindet. Das $ Zeichen steht synonym für das Dateiende.
Um Änderungen zurückzunehmen gibt es den Befehl u. Um den Inhalt einer Zeile wieder herzustellen, wie er vor der letzten Änderung war, verwendet man U.
Um nach einem Wort(-fragment) zu suchen, gibt man im Kommandomodus / ein, gefolgt von dem gesuchten Ausdruck. Dadurch wird vorwärts im Text ab dem Cursor gesucht. Durch ?muster durchsucht man den Text rückwärts. n bzw. N führt zu einer Wiederholung der Suche in gleicher bzw. umgekehrter Richtung ab der aktuellen Cursorposition.
Die Suche unter Vim besitzt eine eingebaute Historie, man muss also wenn man erneut nach etwas suchen möchte, keine vollkommen neue Eingabe machen. Es genügt in diesem Fall / einzugeben ohne Enter zu drücken. Mit ↑ bzw. ↓ kann zwischen den vormaligen Suchen gewechselt werden. [vimbook, S. 29]
Neben der klassischen Suche bietet vim auch die Möglichkeit einer inkrementellen Suche an. Bei dieser wird bereits während der Eingabe nach dem entsprechenden Muster gesucht. Die inkrementelle Suche wird über das Kommando :set incsearch eingeschaltet, bzw. über :set noincsearch wieder ausgeschaltet. [vimbook, S. 29 f]
Auf Wunsch markiert vim die gefunden Ergebnisse, anstatt sie nur mit dem Cursor anzuspringen. Die Option wird mit :set hlsearch ein bzw. mit :set nohlsearch ausgeschaltet. [vimbook, S. 29]
Um den Text gleich bei der Suche zu ersetzen bieten sich folgende Befehle substitute an, der in der Regel mit s abgekürzt verwendet wird:
:s/text1/text2 - der Text text1 wird durch text2 ersetzt. Jedoch wird dabei nur das erste Auftreten in der aktuellen Zeile ersetzt.
:s/text1/text2/g - alle Vorkommen in der aktuellen Zeile werden ersetzt (g für „global“ - alle).
:s/text1/text2/gc – alle Vorkommen werden ersetzt aber bei jeder Ersetzung wird eine Bestätigung verlangt, d.h. y für yes - ja, oder n für no - nein, a für all also alle weiteren, q für quit, dem Beenden des Ersetzens, Strg E bzw. Strg Y eine Zeile hoch bzw. herunter Scrollen [vimbook, S. 103] (c = „confim“, Bestätigen). [Wieland, S. 345]
Eine zusätzliche Option ist p, die bewirkt, dass die Zeile ausgegeben wird, nachdem die Veränderung vorgenommen worden ist. [vioreilly S.15]
Das Suchen und Ersetzen kann selbstverständlich auch auf den ganzen Text, oder zumindest mehrere Zeilen angewandt werden. Dazu kann folgendes Kommando verwendet werden:
: <Startzeile>,<Endzeile> s/text1/text2/g [Wieland, S. 346]
Wie ein Kommando aussieht das die Änderungen auf den ganzen Text anwendet zeigt das folgende Beispiel:
:1, $ s/Win/Linux/g [Wieland, S. 346]
Der Editor vim kann, wie oben gezeigt, bereits beim Starten eine Datei öffnen. Dabei ist zu beachten, dass immer die komplette Datei in den Speicher geladen wird. Das mag auf den ersten Blick etwas aufwändig erscheinen, bietet aber den Vorteil, dass erst durch ein explizites Speicherkommando die Datei auf dem Datenträger geändert wird.
Um eine Datei während einer vim Sitzung zu laden gibt es zwei Befehle:
:r <Dateiname> lädt die angegeben Datei und fügt sie in die geöffnete Datei an der Cursorposition ein.
:e <Dateiname> beendet das Editieren der aktuellen Datei und die neue Datei ist zur Bearbeitung bereit. [Wieland S.347]
Der Editor kann mit dem Befehl ZZ veranlasst werden, die geöffnete Datei zu speichern und das Programm zu schließen.
Hinzu kommen diese, zum Teil schon aus 2.1 bekannten Befehle für das Speichern:
:w gerade bearbeitete Datei wird gespeichert.
:w <Dateiname> speichert unter dem angegebenen Namen.
:<Startzeile>, <Endzeile> w <Dateiname> speichert den genannten Textbereich in die angegebenen Datei. [Wieland S. 346]
Da der Editor die Schreibrechte einer Datei überprüft kann es passieren, dass der Speichervorgang mit der Bemerkung abgebrochen wird, ein Schreibschutz existiere. Hat der Nutzer jedoch entsprechende Rechte an der Datei seitens des Filesystems, so kann der Befehl mit einem angehängten ! trotzdem ausgeführt werden.
Bei Vim kann mit den folgenden Kommandos Text ausgeschnitten (kopiert) werden:
yy die aktuelle Zeile wird in den Puffer kopiert. Alternativ kann durch das Voranstellen einer Zahl angegeben werden, wie viele nachfolgenden Zeilen kopiert werden sollen. Durch die Abwandlung yw wird nur ein Wort ausgeschnitten und mit yf<Taste> werden ab der Cursorposition bis zum ersten Auftreten des Zeichens <Taste> alles kopiert. Diese Funktion ist z.B. nützlich wenn bis zum nächsten Satzzeichen kopiert werden soll [Wieland S. 347].
Möchte man mehrere Puffer verwenden so kann man über "ayy in einen benannten Puffer ausschneiden (Benennung von a-z) [vioreilly S.10].
Um den Text an der gewünschten Stelle einzufügen gibt es folgende Befehle:
p den Pufferinhalt nach dem Cursor einfügen
P den Pufferinhalt vor dem Cursor einfügt
"aP fügt den Text aus Puffer a vor dem Cursor ein. [vioreilly S.10]
Mit dem Editor Vim können beim Start mehrere Dateien gleichzeitig geöffnet werden:
vim datei1.c datei2.c datei3.c
Da der Editor jeweils nur eine Datei anzeigt, muss mit dem Kommando :next zur nächsten Datei gewechselt werden. Da Änderungen i.d.R. gespeichert werden sollen, kann auch das Kommando :wnext ein Speichern der Datei veranlassen.
Im Fall, dass die Änderungen nicht gespeichert werden sollen, verwendet man: :next! , da Vim sonst ein Weiterschalten unterbindet. Möchte man eine der geöffneten Dateien überspringen kann man durch die Angabe einer Zahl das next Kommando wiederholt ausführen lassen, z.B. :2next überspringt eine Datei [vimbook S.42 f].
Durch den Befehl :args kann man sich ausgeben lassen welche Dateien zur Zeit geöffnet sind. Welche davon gerade editiert wird, ist in eckigen Klammern angezeigt:

Grafik
aus [vimbook S.43]
Mit den Kommandos :previous bzw. :Next kann jeweils eine Datei zurückgegangen werden. Die beiden Befehle unterscheiden sich in ihrer Wirkung nicht. Auch hier kann durch das Voranstellen eines w die aktuelle Datei vor dem Weiterschalten gesichert werden.
Vim bietet die Möglichkeit einer Dateiwiederherstellung für den Fall, dass das System während der Arbeit abstürzt, ohne dass eine Sicherung durchgeführt werden konnte. Vim speichert noch nicht gesicherte Dateien in einem sog. Swapfile zwischen. Stürzt das System ab, ohne dass das Swapfile gelöscht werden konnte, fragt der Editor beim nächsten Start durch einen Warnbildschirm wie mit dem Swapfile zu verfahren ist. Es könnte z.B. ja auch sein, dass eine zweite Editorinstanz geöffnet ist.

Grafik aus [vimbook S. 148]: Warnung bei nicht
gelöschtem Swapfile
Es werden zu diesem Zeitpunkt vier Optionen angeboten um weiter zu verfahren: schreibgeschützt öffnen, trotzdem editieren, wiederherstellen, schließen. Über das angezeigte Auswahlmenü können sie gewählt werden.
Weiß man bereits, dass eine Datei wiederhergestellt werden muss, kann man dies auch mit der Kommandozeilenoption -r tun.
vim -r <Dateiname> stellt die angegebene Datei wieder her.
vim -r liefert eine Liste von Editorsitzungen, die wiederhergestellt werden können. [vimbook S. 149]
Es gibt noch viele Bereiche in denen man sich die Arbeit mit dem Vim erleichtern kann. Insbesondere wenn bei Suchen und Ersetzen die regulären Ausdrücke, die Vim auch mit sich bringt, verwendet werden, oder die Unterstützung, die er für Programmierer bietet, eingesetzt werden, zeigt sich, dass der Editor Vim entgegen vieler Aussagen eine wesentlich höhere Leistungsfähigkeit besitzt als so mancher Editor kommerzieller Betriebssysteme.
Hinzu kommt dass er i. d. R. auf jedem Unix/Linuxsystem zur Verfügung steht, und so ein Arbeiten unter jeder Umgebung ohne Umgewöhnen jederzeit möglich ist. Da er klein und kompakt ist, kann auch über eine einfachere Netzwerkverbindung effektiv gearbeitet werden und so beispielsweise Administrationsaufgaben wahrgenommen werden.
Da es neben den oben genannten noch viele weitere Funktionalitäten von Vim gibt, die über den Rahmen dieser Einführung hinausgehen, sei vimbook allen Interessierten als eine umfassende, jedoch einfach gehaltene Referenz, zum weiteren Studium empfohlen.
[features] Sven Guckes, „Was ist Vim?“, Oktober 2003, http://www.vim.org/6k/features.de.txt
[vimbook] Steve Oualline, „Vi IMproved – VIM“, 1. April 2001
http://www.truth.sk/vim/vimbook-OPL.pdf
[vioreilly] Arnold Robins, „vi Editor, kurz und gut“, 2. Auflage, 2000, O'Reilly Verlag Köln
[Wieland] Thomas Wieland, „C++ Entwicklung mit Linux“, 1. Auflage, 2001, dpunkt.verlag GmbH Heidelberg
[1] "Vim Homepage", http://www.vim.org
[2] "Vi Lovers Homepage", http://www.thomer.com/vi/vi.html