3.19 vi

Der Unix-Standard-Editor vi ist nach der Installation des Basissystems auf jedem Debian GNU/Linux-System verfügbar. vi wird schon seit vielen Jahren auf Unix-Systemen eingesetzt. Seine für Anfänger kryptische Bedienung rührt aus der langen Geschichte dieses Editors her. In der Urzeit der Computertechnik standen keine aufwändigen grafischen Arbeitsplätze zur Verfügung. Textdrucker mit Tastatur oder - etwas moderner - Text-Terminals (VT100, ein Modell der Firma DEC, ist noch heute ein Begriff), die seriell an den Rechner angeschlossen wurden, waren der Stand der Technik.

Debian verwendet bereits von Haus aus eine verbesserte Version des vi, den nvi.

In jedem Fall ist es sinnvoll, ein paar wenige Grundlagen über den vi zu erfahren. Dieser Editor ist einfach immer verfügbar, auch auf einem minimalem System. Unabhängig von Ihren Vorlieben (oder denen Ihrer Freunde) sind Grundkenntnisse in der Bedienung des vi für jeden Benutzer eines Unix-Systems notwendig, spätestens wenn der Bereich der Systemadministration gestreift wird.

Wenn Sie sich etwas in den vi eingearbeitet haben, werfen Sie mal einen Blick auf Vim, vi improved, der eine erweiterte Version des vi ist.

Beim vi wird zwischen einem Kommando- und einem Eingabemodus unterschieden. Durch Drücken der Taste i für Input kommen Sie in den Eingabemodus. Ein Druck auf die Taste ESC beendet den Eingabemodus, und man befindet sich wieder im Kommandomodus. Zum Eingabemodus gibt es nicht viel zu sagen, es können damit weitere Zeichen in die Datei eingegeben werden.

Interessanter ist der Kommandomodus des vi. Mit einzelnen Tasten können Sie im Text navigieren oder auch Zeichen bzw. Zeilen löschen. Laden Sie einfach eine Datei, beispielsweise mit den Kommandos: cp /etc/hosts . (legt eine Kopie der Datei im aktuellen Verzeichnis ab) und vi ./hosts (startet vi und lädt die Datei). Nach dem Start des vi befinden Sie sich im Kommandomodus. Sie können nun ein einzelnes Zeichen löschen, indem Sie die Taste x drücken. Ein solcher Befehl kann mit der Taste u rückgängig gemacht werden.

Um den Cursor im Text zu bewegen, können Sie die Pfeiltasten benutzen. Sollte dies aufgrund fehlerhafter Einstellungen (zum Beispiel über eine telnet-Verbindung) einmal nicht funktionieren, können Sie in jedem Fall mit den Tasten h (bewegt den Cursor ein Zeichen nach links), j (springt zur nächsten Zeile), k (springt eine Zeile nach oben) und l (bewegt den Cursor ein Zeichen nach rechts) navigieren. Seitenweises Blättern kann mit den Tasten STRG+U (Up/Aufwärts) und STRG+D (Down/Abwärts) erreicht werden.

Viele der vi-Kommandos lassen sich auch vervielfältigen. Beispielsweise löscht 9x neun Zeichen ab der aktuellen Position. Dies funktioniert mit den meisten anderen Kommandos ebenso.

Wenn Sie die Änderungen in einer Datei speichern wollen, können Sie dies mit :w tun. Dateien unter einem anderen Namen speichern Sie mit :w neu.txt. Sie können den vi beenden, indem Sie :q eingeben. Auch hier sind Kombinationen möglich, so können Sie eine Datei mit :wq speichern und den Editor verlassen.

Häufig möchte man Zeilen kopieren: Hierzu dient der Befehl yy. Dieser speichert die aktuelle Zeile in einem Puffer. Die gespeicherten Daten lassen sich mit p wieder an einer anderen Stelle einfügen. Analog dazu lassen sich mit 7yy sieben Zeilen kopieren und so weiter.

So viel zu den Grundzügen des Editors vi. Mit diesen wenigen Kommandos sind Sie in der Lage, Anpassungen an den Konfigurationsdateien Ihres Debian GNU/Linux-Systems vorzunehmen.

3.19.1 vi für Fortgeschrittene

Wenn Sie sich eine Zeit lang mit diesem Editor beschäftigt haben, können Sie folgende Übersicht verwenden, um Ihr vi-Know-how zu vertiefen.

[Tipp]PDF-Dateien bearbeiten mit Vim

Das Paket pdftk (http://www.pdfhacks.com/pdftk/) erlaubt es, PDF-Dateien zu bearbeiten. Über ein Makro (http://www.pdfhacks.com/pdftk/#vim_plugin) kann diese Funktionalität auch in Vim eingebunden werden.

[Tipp]Vim Tipps

Im Vim Tips Wiki finden sich seh viele und nützliche Tipps zum Editor Vim: vim.wikia.com/wiki/Vim_Tips_Wiki.

3.19.2 Programmstart

Bereits beim Programmstart können einige Optionen angegeben werden. Diese sind unter anderem:

  • vi name - Startet den Editor und lädt die Datei name.

  • vi name1 name2 name3 - Startet den Editor und lädt die Dateien name1, name2 und name3.

  • vi -R name - Startet den Editor und lädt die Datei name im Nur-lesen-Modus.

  • vi -r name - Startet den Editor und restauriert die Datei name nach einem Absturz.

[Tipp]Verschiedene Dateien gleichzeitig bearbeiten

Vim beherrscht einen Modus, in dem es möglich ist, an unterschiedlichen Dateien zur gleichen Zeit zu arbeiten. Dazu wird mit :vsplit der Editierbereich vertikal in zwei so genannte Fenster geteilt und mit :bn im aktuellen Fenster der nächste Buffer ausgewählt bzw. das nächste Fenster aktiviert. Die Bewegung der Schreibmarke (Cursor) kann in beiden Fenstern durch den Befehl :set scrollbind gekoppelt werden. Der Befehl muss dazu auch in beiden Fenstern ausgeführt werden!

Sollen bereits beim Aufruf von Vim zwei Dateien geladen werden, so kann eine Datei zwei.scr mit folgendem Inhalt angelegt werden:

:vsplit^M:bn^M:set scrollbind^M^W^W:set scrollbind^M^W^W

^M wird durch gleichzeitiges Drücken von Ctrl+M erreicht, ^W durch Drücken von Ctrl+W. Aktiviert wird dieses Skript nun durch:

vim -s zwei.scr dateia.txt dateib.txt

3.19.3 Einstellungen

Wenn der Editor gestartet ist, können einige Einstellungen verändert werden. Sollen diese Änderungen dauerhaft gespeichert werden, so können diese in die Datei ~/.vimrc eingetragen werden.

  • :set - Zeigt die aktuellen Benutzereinstellungen.

  • :set all - Zeigt alle Einstellungen.

  • :set <option> - Aktiviert eine Option. Zum Beispiel aktiviert set number die Anzeige der Zeilennummern.

  • :set no<option> - Deaktiviert eine Option. Zum Beispiel deaktiviert set nonumber die Anzeige der Zeilennummern.

  • :set option? - Zeigt die möglichen Werte dieser Option.

3.19.4 Dateioperationen

  • ZZ - Speichert die Datei und beendet das Programm.

  • :wq - Speichert die Datei und beendet das Programm.

  • :w - Speichert die Datei.

  • :w! - Speichert die Datei, auch wenn die Zugriffsrechte auf Nur-lesen gesetzt sind.

  • :w name - Speichert die Datei unter dem Namen name.

  • :q - Beendet das Programm.

  • :q! - Beendet das Programm, Änderungen werden verworfen.

  • :e name - Lädt die Datei name.

  • :e! name - Lädt die Datei name erneut und verwirft alle bisherigen Änderungen.

  • :e + name - Lädt die Datei name und springt ans Ende der Datei.

  • :e +<n> name - Lädt die Datei name und springt in die Zeile < n>.

  • :n - Geht zur nächsten der geladenen Dateien.

  • :args - Zeigt die aktuelle Liste der Dateien.

  • :rew - Springt zur ersten Datei in der Dateiliste.

  • :f - zeigt den Namen der aktuellen Datei und die aktuelle Zeilennummer an.

  • :q - Beendet das Programm.

3.19.5 Cursorbewegungen

  • Pfeiltasten - Mit den Pfeiltasten kann der Cursor wie in anderen Anwendungen bewegt werden.

  • STRG+d> - Springt eine halbe Seite nach unten.

  • STRG+u> - Springt eine halbe Seite nach oben.

  • STRG+f - Springt eine Seite nach unten.

  • STRG+b - Springt eine Seite nach oben.

  • :0 - Springt zum Anfang der Datei.

  • :<n> - Springt zur Zeile < n> der Datei.

  • :$ - Springt zum Ende der Datei.

  • 0 - Springt zum Anfang der Zeile.

  • ^ - Springt zum ersten Zeichen, das kein Leerzeichen ist.

  • $ - Springt zum Ende der Zeile.

  • RETURN - Springt zum Anfang der nächsten Zeile.

  • % - Zeigt die zugehörige Klammer.

  • G - Springt zur letzten Zeile.

  • H - Springt zur ersten Zeile im aktuellen Fenster.

  • L - Springt zur letzten Zeile im aktuellen Fenster.

  • M - Springt in die Mitte des aktuellen Fensters.

  • - - Springt zum ersten Nicht-Leerzeichen der vorhergehenden Zeile.

  • + - Springt zum ersten Nicht-Leerzeichen der nächsten Zeile.

  • j - Springt zur nächsten Zeile in der gleichen Spalte.

  • k - Springt zur vorhergehenden Zeile in der gleichen Spalte.

  • h - Springt ein Zeichen nach links.

  • l - Springt ein Zeichen nach rechts.

  • w - Springt ein Wort vorwärts.

  • b - Springt ein Wort rückwärts.

  • e - Springt zum Ende des Wortes.

  • ) - Springt zum nächsten Satz.

  • ( - Springt zum vorhergehenden Satz.

  • } - Springt zum nächsten Absatz.

  • { - Springt zum vorhergehenden Absatz.

3.19.6 Löschen

  • x - Löscht das Zeichen unter dem Cursor.

  • X - Löscht das Zeichen vor dem Cursor.

  • D - Löscht alles bis zum Ende der Zeile.

  • d^ - Löscht alles bis zum Anfang der Zeile.

  • dd - Löscht die gesamte Zeile.

  • <n>dd - Löscht <n> Zeilen.

  • d<n>w - Löscht <n> Wörter ab der Cursorposition.

3.19.7 Einfügen und Ändern

  • i - Aktiviert den Eingabemodus vor dem Cursor.

  • I - Aktiviert den Eingabemodus vor dem ersten Nicht-Leerzeichen in der aktuellen Zeile.

  • a - Aktiviert den Eingabemodus nach dem Cursor.

  • A - Aktiviert den Eingabemodus nach dem Ende der Zeile.

  • o - Beginnt eine neue Zeile nach der aktuellen Zeile und aktiviert den Eingabemodus.

  • O - Beginnt eine neue Zeile über der aktuellen Zeile und aktiviert den Eingabemodus.

  • r<n> - Ersetzt das Zeichen unter dem Cursor durch das Zeichen < n>, der Eingabemodus wird nicht aktiviert.

  • R - Aktiviert den Eingabemodus, Zeichen werden überschrieben.

  • C - Ändert den Text bis zum Zeilenende.

  • D - Löscht den Text bis zum Zeilenende.

  • s - Ersetzt Zeichen.

  • S - Ersetzt Zeilen.

  • J - Entfernt den Zeilenumbruch am Ende einer Zeile, fügt also die aktuelle und die folgende Zeile zusammen.

3.19.8 Kopieren und Einfügen

  • yy - Kopiert die aktuelle Zeile.

  • <n>yy - kopiert <n> Zeilen.

  • p - Fügt die kopierten Zeilen nach der aktuellen Zeile ein.

  • P - Fügt die kopierten Zeilen vor der aktuellen Zeile ein.

Auch gelöschte Zeilen können mit den aufgeführten Kommandos eingefügt werden.

[Tipp]Absätze neu formatieren

Um mehrere Zeilen oder komplette Absätze, beispielsweise innerhalb einer zitierten E-Mail, neu umzubrechen, ist der gewünschte Abschnitt zunächst mittels v (Visual-Mode) und den Pfeiltasten zu markieren. Danach formatiert die Tastenkombination gqa den Absatz mit den aktuellen Einstellungen neu.

3.19.9 Suchen und Ersetzen

  • /text - Sucht vorwärts nach text.

  • ?text - Sucht rückwärts nach text.

  • n - Sucht noch einmal in der gleichen Richtung.

  • N - Sucht noch einmal in der umgekehrten Richtung.

  • [ addr ] s/from/to/ [ g ] - Ersetzt einmalig from durch to. Mit addr kann ein Bereich angegeben werden, in dem die Aktion durchgeführt werden soll. Die Zeilennummern sind durch ein Komma zu trennen. g führt die Aktion an jeder gefundenen Stelle durch. Beispiel: :2,10s/a/b/g ersetzt in den Zeilen von 2 bis 10 alle Buchstaben a durch b.

3.19.10 Verschiedenes

  • u - Undo, widerruft die letzte Änderung.

  • U - Stellt die aktuelle Zeile wieder her.

  • ~ - Ändert Groß-/Kleinschreibung.

  • . - Wiederholt das letzte Kommando.

[Tipp]Zeilenumbruch entfernen

Unter DOS/Windows erstellte Dateien erscheinen unter GNU/Linux häufig mit doppelten Zeilenendezeichen, da auf diesen Systemen eine Kombination aus CR+LF verwendet wird. CR (Carriage Return) hat den ASCII-Code 13, LF (Line Feed) den ASCII-Code 10.

Um diese Dateien zu konvertieren, gibt es verschiedene Lösungsansätze. Im vi benutzt man das Kommando :se ff=unix. Sollten noch überflüssige RETURN-Zeichen (^M) am Zeilenende auftauchen, so lassen sich diese mittels :1,$s/^M//g entfernen. Dabei muss man das ^M durch Drücken von STRG+V, gefolgt von STRG+M, eingeben. STRG+V dient dazu, die nachfolgend gedrückte Tastenkombination direkt in den Text zu übernehmen.

 Impressum