Der Editor Vi

Übersicht Weiter

Der vi selbst ist ein kommerzielles Produkt und seine Verwendung unterliegt entsprechenden Lizenzen. Aus diesem Grund existieren eine ganze Reihe von Klones, wie der in diesem Abschnitt beschriebene vim.

Wundern Sie sich nicht , falls die eine oder andere Option, die in den folgenden Abschnitten Erwähnung findet, womöglich nicht das beschriebene Resultat erbringt. Der vi ist hochgradig konfigurierbar und die verschiedenen Distributionen liefern häufig abweichende Voreinstellungen aus. Auch spielt die Aktualität der Programmversion eine große Rolle, welche Fähigkeiten der vi(m) unterstützt.

Modiwechsel

Wenn Sie den Vi starten, befindet sich der Editor automatisch im so genannten Kommandomodus (nachfolgend beschrieben). Eine Reihe Kommandos (Editieren) versetzt ihn erst in den Einfügemodus, der primär zur Eingabe von Text dient. Um zurück in den Kommandomodus zu gelangen, müssen Sie entweder die Taste [ESC] oder die Tastenkombination [Ctrl]-[ [ ] betätigen.

Wichtige Optionen im Kommandomodus Zurück Anfang Weiter

Beginnt in nachfolgender Aufzählung eine Option nicht mit einem Doppelpunkt, dann wird diese mittels

:set [Option]

gesetzt und mit

:set no[Option]

wieder abgeschaltet.

Die wichtigsten Optionen sind:

:se[opt]
         Abfrage des Wertes einer Option.
:se all
         Anzeige der Werte aller Optionen.
:syntax on|off
         Farbliche (unter X) bzw. durch verschiedene Fontarten hervorgehobene Syntax verschiedener Quelldateien (C, C++, Shellskripte, HTML...).
ap
         autoprint: Änderungen werden am Bildschirm angezeigt (default).
aw
         Beim Beenden wird automatisch der Puffer zurückgeschrieben.
bf
         beautify: Entfernen aller Steuerzeichen aus dem Text.
ht
         Tabulator-Schrittweite.
ic
         ignorecase: Groß- und Kleinschreibung werden nicht unterschieden.
nu
         Zeilennummerierung einschalten.
scroll
         Bestimmt den Scrollbereich.
sh
         Bestimmt die Shell, deren Kommandos innerhalb des Editors aufgerufen werden können.
ts
         Setzt die Länge des Tabulators (z.B. :set ts=3).
wa
         Erlaubt das Zurückschreiben des Puffers in die Originaldatei.

Anlegen einer Ressourcendatei

Mitunter wird es lästig, bei jedem Start des Editors die gewünschten Einstellungen vornehmen zu müssen. Einfacher ist es, eine eigene Ressourcendatei .vimrc in seinem Heimatverzeichnis abzulegen und in dieser die eigenen Optionen zu setzen. Die folgende Beispieldatei schaltet das Syntax-Highlighting ein und setzt die Schrittweite des Tabulators auf 3.

user@sonne> less ~/.vimrc
syntax on
set ts=3


Starten und Beenden Zurück Anfang Weiter

Start des Vi

Der vi kann auf verschiedene Arten gestartet werden. Dabei können ihm beliebig viele Dateien als Argumente mitgegeben werden (die Anzahl ist allerdings durch die Beschränkung offener Filedeskriptoren begrenzt):

vi
         Start ohne Dokument.
vi Dokument
         Start mit dem angegebenem Dokument. Existiert Dokument nicht, wird die Datei neu angelegt.
vi +Dokument
         Der Vi arbeitet mit einer Kopie von Dokument und öffnet die Datei selbst erst beim Beenden und Zurückschreiben.
vi -r Dokument
         Nach einem Systemabsturz wird die Abarbeitung an der Stelle fortgesetzt, an der die Unterbrechung stattfand. Laut Voreinstellung speichert der vi aller 30 Sekunden die Puffer ab.
vi -R Dokument
         Eröffnet Dokument nur zum Lesen.

Öffnen und Schließen von Dateien im Vi

Weitere Möglichkeiten zum Schließen von Dateien stehen unter »Beenden«.

:e Dokument
         Öffnet die Datei »Dokument«. Bei der Eingabe des Dateinamens kann der Expansionsmechanismus der Bash verwendet werden. Die aktuell bearbeitete Datei darf seit dem letzten Abspeichern nicht modifiziert worden sein.
:e! Dokument
         Wie »:e Dokument«; die Änderungen in der aktuell bearbeiteten Datei werden ggf. verworfen.
:r Dokument
         Fügt die Datei »Dokument« ab der Position des Cursors ein. Bei der Eingabe des Dateinamens kann der Expansionsmechanismus der Bash verwendet werden.
:w »Dokument«
         Schreibt den aktuellen Puffer in die Datei »Dokument«.
:w >> »Dokument«
         Fügt den aktuellen Puffer an die Datei »Dokument«.

Beenden des Vi

Das Beenden kann u.a. auf folgende Art und Weise erfolgen:

:q
         Verlassen ohne zu speichern. Funktioniert nur, falls das Dokument nicht verändert wurde.
:q!
         Verlassen ohne zu speichern auch bei modifiziertem Dokument.
:wq
         Schreiben des Puffers und Verlassen.
:wn
         Der Puffer wird geschrieben und das nächste Dokument geladen.
ZZ
         Wie :wq.
:x
         Wie :wq.

 

Positionierung des Cursors Zurück Anfang Weiter

Neben der Positionierung mit den Cursortasten stehen zum Scrollen durch den Text noch folgende Kommandos zur Verfügung:

[Ctrl]+[F] oder l
         Ein Zeichen nach rechts.
[Ctrl]+[B] oder h
         Ein Zeichen nach links.
[Ctrl]+[P] oder k
         Eine Zeile nach oben.
[Ctrl]+[N] oder j
         Eine Zeile nach unten.
[Ctrl]+[V]
         Eine Bildschirmseite nach unten.
[Alt]+[V]
         Eine Bildschirmseite nach oben.
w
         Beginn des nächsten Wortes.
b
         Beginn des vorherigen Wortes.

Zum Einfügen von Text an der aktuellen Cursorposition kann auch die Maus (mittlere Taste) genutzt werden.

In neueren Versionen des Vim kann der Cursor auch mit der Maus positioniert werden. Hierzu ist die Option »:set mouse=a« zu setzen.

Editieren Zurück Anfang Weiter

Die nachfolgenden Kommandos (Ausnahme »rc») schalten den Vi vom Kommandomodus in den Eingabemodus. Um zurück in den Kommandomodus zu gelangen, ist die Taste [ESC] zu betätigen.

i
         Einfügen links vom Cursor.
I
         Einfügen am Zeilenanfang.
a
         Einfügen rechts vom Cursor.
A
         Einfügen am Zeilenende.
o
         Neue Zeile hinter der aktuellen einfügen.
O
         Neue Zeile vor der aktuellen einfügen.
rc
         Ersetze ein Zeichen unter Cursor durch das Zeichen c
R
         Überschreiben ab Cursorposition.
sText
         Ersetze ein Zeichen durch »Text«.
SText
         Ersetze ganze Zeile durch »Text«.
nsText
         Ersetze n Zeichen durch »Text«.
cwText
         Ersetze Wort durch »Text«.
ccText
         Wie Stext.

 

Text kopieren Zurück Anfang Weiter

Das Kopieren folgt immer dem gleichen Schema:

Text in einen Puffer kopieren

yy
         Kopiert aktuelle Zeile in einen Puffer.
ny
         Kopiert n+1 Zeilen in einen Puffer.
yw
         Kopiert ein Wort rechts vom Cursor in Puffer.
yb
         Kopiert ein Wort links vom Cursor in Puffer.

Das Kommando »y« kann in Verbindung mit jedem Befehl zur Cursorpositionierung verwendet werden.

Um einen bestimmen Bereich zu kopieren, kann man wie folgt vorgehen:

  1. Setzen des Cursors an den Beginn (oder Ende) des zu markierenden Textes
  2. Umschalten in den »Visual«-Modus durch Eingabe von »v«
  3. Setzen des Cursors an das Ende (oder Beginn) des zu markierenden Textes
  4. Eingabe von »y« (der »Visual«-Modus wird automatisch beendet)

Text aus einem Puffer einfügen

P
         Fügt Inhalt des aktiven Puffers
  • vor der aktuellen Zeile ein, falls sich eine Zeile im Puffer befindet
  • vor dem aktuellen Wort ein, falls sich ein Wort im Puffer befindet
p
         Fügt Inhalt des aktiven Puffers
  • nach der aktuellen Zeile ein, falls sich eine Zeile im Puffer befindet
  • nach dem aktuellen Wort ein, falls sich ein Wort im Puffer befindet
:reg
         Anzeige aller Pufferinhalte (siehe Beispiel im Anschluss an diese Liste).
:"c
         Nutzt für die nächste (!) Operation (Löschen/Markieren/Einfügen) den durch c benannten Puffer (siehe Beispiel unter dieser Tabelle).

Beispiel zum Umgang mit Puffern

Angenommen wir haben 4 Texte bereits in einen Puffer kopiert. Uns interessiert jetzt, was im Puffer steht. Also geben wir im vi :reg ein:

:reg
--- Registers ---
"" eine kurze Zeile
"0 eine kurze Zeile
"- ein_wort
": reg
"% /home/user/.vimrc
Press RETURN or enter command to continue

Der aktive Puffer ist "" eine kurze Zeile. Um nun mit der folgenden Einfügeoperation mittels p den Puffer ein_wort zu wählen, tippt man zuvor "- ein.

Text löschen Zurück Anfang Weiter

Befindet sich der Vi im Einfügemodus, können die zuletzt eingegebenen Zeichen nacheinander mittels der Taste »[Backspace]« gelöscht werden. Bei entsprechender Konfiguration steht auch die Taste »[Del]« im Einfügemodus zur Verfügung.

x
         Zeichen unter Cursor
nx
         n Zeichen ab Cursorposition
X
         Zeichen vor dem Cursor
nX
         n Zeichen vor der Cursorposition
nJ
         Entfernt die Zeilenendezeichen der nächsten n Zeilen
dd
         Aktuelle Zeile
ndd
         n Zeilen ab aktueller Zeile
dL
         Bis zum unteren Bildschirmrand
dw
         Ein Wort
d)
         Bis Absatzende
D
         Bis Zeilenende
nD
         Alles bis zum Ende der aktuellen Zeile und die n-1 nächsten Zeilen
:[Bereich]d [x]
         Löscht die durch Bereich angegebenen Zeichen und speichert diese ins Register x. Beispiel: Die Eingabe von :1,$d z löscht die ganze Datei und kopiert den Inhalt in das Register z.

Zum Löschen von Bereichen kann wiederum der »Visual«-Modus verwendet werden:

  1. Cursor an Beginn des zu löschenden Textes setzen
  2. Mit »v« in den »Visual«-Modus schalten
  3. Mit den Cursortasten den zu entfernenden Bereich markieren
  4. Mit »d« löschen
Suchen und Ersetzen Zurück Anfang


/muster
         Suche nach Muster vorwärts im Text.
/
         Wiederholt die Suche vorwärts.
?muster
         Suche nach Muster rückwärts im Text.
?
         Wiederholt die Suche rückwärts.
n
         Wiederholt letztes Suchkommando.
:s/alt/neu
         Sucht und ersetzt »alt« durch »neu« (nur das erste Auftreten in aktueller Zeile).
:s/alt/neu/g
         Sucht und ersetzt alle »alt« durch »neu« in aktueller Zeile.
:1,$s/alt/neu
         Ersetzen im gesamten Dokument

Für Informationen zu weiteren Kommandos rufen Sie im vi »:h« auf.