Crash-Kurs: Arbeiten mit vi

10.08.2005 von Jürgen Donauer
Speziell wenn es um die tägliche Arbeit mit Textdateien wie Scripts oder ini-Dateien geht, ist ein leistungsfähiger Texteditor gefragt. Der vi unter Unix beziehungsweise der vim (vi improved) unter Linux ist ein solches Tool, das zum Standard einer jeden Distribution gehört.

Die Bedienung des vim scheint für Neulinge auf den ersten Blick kompliziert. Doch es genügen bereits wenige Befehle, um mit dem vim schnell und effektiv erste Ergebnisse zu erzielen.

Unser Exkurs in die Welt des vim zeigt Ihnen die wichtigsten Schalter und Befehle, damit Sie sich sofort einarbeiten können. In modernen Distributionen ist der Befehl vi übrigens nur ein Alias für vim. Es ist somit unerheblich, ob Sie den Editor mit vi oder vim starten.

Bevor Sie loslegen, ist es jedoch wichtig, die Arbeitsweise des vim zu verstehen. Denn der vim stellt im Wesentlichen drei Arbeitsmodi bereit, die jeweils spezielle Aufgaben abdecken:

Erste Schritte

Durch Drücken der <Esc>-Taste gelangen Sie stets in den Befehlsmodus zurück. Beim Start des vim befindet sich dieser im Befehlsmodus.

Mit vi Dateiname öffnen Sie wie gewohnt eine Datei zum Bearbeiten. Zum Beenden des vim kann man jedoch nicht auf übliche Befehle oder Tastaturkürzel zurückgreifen. Weder <strg>+<c> noch <strg>+<x> oder ein sonst üblicher Shortcut bewegen den vim zum Schließen. Haben Sie keine Änderungen an der Datei vorgenommen, genügt ein einfaches :q+<Enter> (Doppelpunkt+q+<Enter>, das q steht dabei für quit).

Mit dem Drücken der Taste i (insert) gelangen Sie vom Befehlsmodus in den Einfügemodus. Nun lässt sich wie gewohnt Text eingeben. Änderungen nehmen Sie durch den Wechsel in den Befehlsmodus und die Taste u (undo) zurück. Ein Redo erfolgt mit <strg>+r . Zum Speichern fordern Sie den vim mit :w+<Enter> auf. :q!+<Enter> schließt die Datei unverändert. Speichern und Schließen einer Datei erfolgen über die Kombination :wq (write quit). Viele Befehle ergeben sich demnach aus dem ersten Buchstaben der gewünschten Aktion.

Bitte beachten Sie, dass der vim zwischen Groß- und Kleinschreibung unterscheidet (siehe auch Tabellen auf den folgenden Seiten). Die Eingabe von i im Einfügemodus hat beispielsweise zur Folge, dass der vim den Text vor der Cursor-Position einsetzt. Drücken Sie I, erfolgt das Einfügen am Zeilenanfang.

Kleine Befehle, große Wirkung

vim ist nicht nur ein stupides „Zeichen-Veränder-Tool“, sondern ein überaus mächtiges Werkzeug. So können Sie durch die Eingabe einfacher Befehle große Textblöcke in einem Schritt bearbeiten, ohne wie mit WYSIWYG-Editoren üblich Zeilen mit der Maus anzuwählen, zu markieren und dann zu bearbeiten.

So erfolgt ein Löschen der aktuellen Zeile im Befehlsmodus mit dem Befehl dd. Wollen Sie gleich zehn Zeilen auf einmal entfernen, geben Sie einfach das Kommando d10d ein. Die Zeilen 23-54 einer Datei schicken Sie mit :23,54d+<Enter> in den digitalen Papierkorb.

Äquivalent zum Löschen funktioniert das Kopieren. yy kopiert die aktuelle Zeile, und p fügt diese unterhalb des Cursors ein. Das Kopieren von beispielsweise 20 Zeilen geschieht analog wie beim Löschen mit der Anweisung y20y.

Darüber hinaus ist die Implementation der so genannten „Regular Expressions“ speziell bei Kommandozeilen-Gurus sehr beliebt. Mit /hallo+<Enter> sucht der Editor vom Standpunkt des Cursors vorwärts nach dem Ausdruck hallo. Zum nächsten hallo in der Datei gelangt man durch Drücken von n (next). Wollen Sie rückwärts suchen, ersetzen Sie einfach den Slash (/) durch ein Fragezeichen (?), also ?hallo+<Enter>.

Auch das Suchen und Ersetzen erfolgt im vim mittels einfacher Befehlszeilen. So ersetzt :%s/hallo/servus/+<enter> im gesamten Dokument den Ausdruck hallo durch servus. Wollen Sie den Ausdruck nur in einer bestimmten Textpassage tauschen, zum Beispiel zwischen den Zeilen 2-15, geben Sie :2,15s/<Ausdruck1>/<Ausdruck2>/+<enter> ein.

Features für Programmierer

Für Programmierer hält der vim zusätzliche Optionen parat. Der vim beherrscht beispielsweise auch Syntax-Highlighting und Zeilennummerierung. :set syntax on+<enter> beziehungsweise :set syntax off+<enter> aktiviert oder deaktiviert die Hervorhebungen. Damit das Highlighting auch exakt abgebildet wird, achten Sie auf die korrekte Dateiendung. Zum Beispiel wird ein perl-Dokument nur dann richtig dargestellt, wenn die Dateiendung .pl lautet.

Die Zeilennummerierung schalten Sie mit :set number ein und mit :set nonumber auch wieder aus. Wollen Sie gezielt eine Zeile anspringen, genügt der Befehl :Zeile+<enter> (etwa :12+<enter>). Speziell bei der Versionskontrolle von Dateien ist eine Vergleichsfunktionalität gewünscht. Beim vim ist dafür der Schalter -d zuständig. Der Aufruf erfolgt mit vi -d Datei1 Datei2.

Der vim öffnet die zwei Dateien und zeigt Ihnen die Unterschiede auf. Dabei erkennt der Editor, ob sich Zeilen komplett unterscheiden oder nur punktuell. Die Änderungen markiert der vim farbig.

Kurzreferenz des vim

Die folgende Tabelle zeigt die wichtigsten Funktionen des vim im Überblick.

Funktionen im Kommandozeilenmodus

Kommando

Funktion

vi hallo <cr>

Datei hallo editieren

:w<cr>

Datei speichern

:w hallo2<cr>

Datei unter dem Namen hallo2 speichern

:q<cr>

Datei schließen, funktioniert nur, wenn nichts geändert wurde

:q!<cr>

Datei schließen erzwingen

:wq<cr>

Datei speichern und schließen

:f hallihallo<cr>

aktuelle Datei in hallihallo umbenennen

/ text<cr>

Zeichenkette text vorwärts suchen

? text<cr>

Zeichenkette text rückwärts suchen

:%s/hallo/servus/

ersetzt hallo durch servus

:syntax on<cr>

Syntax Highlighting aktivieren

:syntax off<cr>

Syntax Highlighting deaktivieren

:set number<cr>

Zeilennummerierung aktivieren

:set nonumber<cr>

Zeilennummerierung deaktivieren

:25 d<cr>

Zeile 25 löschen

:25, 54d<cr>

von Zeile 25 bis einschließlich Zeile 54 löschen

:25,$d

von Zeile 25 bis einschließlich Textende löschen

Funktionen im Einfügemodus

Kommando

Funktion

i

Text einfügen, vor Cursor-Position

a

Text einfügen, nach Cursor-Position

I

Text am Zeilenanfang einfügen

A

Text am Zeilenende einfügen

o

Text unterhalb der aktuellen Zeile einfügen

O

Text oberhalb der aktuellen Zeile einfügen

Funktionen im Befehlsmodus

Kommando

Funktion

x

Zeichen unter Cursor löschen

dd

Zeile löschen

dw

Wort löschen

D

ab Cursor bis zum Zeilenende löschen

r

Zeichen unter Cursor überschreiben

R

Zeichen ab Cursor überschreiben

yy

Zeile kopieren

yw

Wort kopieren

p

Zwischenspeicher vor aktuellem Zeichen einfügen

P

Zwischenspeicher nach aktuellem Zeichen einfügen

u

letzte Änderung rückgängig machen

J

Zeile mit der folgenden verbinden

.

Wiederholen des letzten Einfüge-/Löschkommandos

Fazit

Zugegeben, die Einarbeitung in den vim ist für viele Umsteiger gewöhnungsbedürftig. Doch wenn Sie regelmäßig damit arbeiten und die wichtigsten Tastaturkürzel verinnerlicht haben, werden Sie den vim speziell für Änderungen an Textdateien nicht mehr missen wollen.

Doch nicht nur in der Unix/Linux-Welt hat sich der vi/vim als fester Bestandteil etabliert. Mittlerweile sind unter http://www.vim.org Portierungen für fast alle gängigen Betriebssysteme wie Windows, Mac OS, OS/2, AmigaOS, BSD und OpenVMS erhältlich. Sogar für PDAs (Sharp Zaurus, HP Jornada, Windows CE) finden Sie auf der Website Download-Links für angepasste vim-Versionen. (ala)