Kapitel 4. Betrieb
Zurück | 4.19 `vi` | Weiter

## 4.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 aufwendigen 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 Hause 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 Kommando-Modus 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. Seitenweise 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.

### 4.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.

### 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.

### 4.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-Lese-Modus.

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

### Verschiedene Dateien gleichzeitig bearbeiten

`vim` beherscht 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

### 4.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.

### 4.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` - Listet 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.

### 4.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.

### 4.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.

### 4.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.

### 4.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.

### Absätze neu formatieren

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

### 4.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.

### 4.19.10 Verschiedenes

- `u` - Undo, widerruft die letzte Änderung.

- `U` - Stellt die aktuelle Zeile wieder her.

- `~` - Ändert Groß-/Kleinschreibung.

- `.` - Wiederholt das letzte Kommando.

### 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.

Zurück | Nach oben | Weiter
4.18 Links | Zum Anfang | 4.20 Dateisysteme

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).