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.
Beginnt in nachfolgender Aufzählung eine Option nicht mit einem Doppelpunkt, dann
wird diese mittels
gesetzt und mit
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
|
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. |
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.
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. |
Das Kopieren folgt immer dem gleichen Schema:
- Text in einen Puffer kopieren
- Text aus (einem bestimmten) Puffer einfügen
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:
- Setzen des Cursors an den Beginn (oder Ende) des zu markierenden Textes
- Umschalten in den »Visual«-Modus durch Eingabe von »v«
- Setzen des Cursors an das Ende (oder Beginn) des zu markierenden Textes
- 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.
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:
- Cursor an Beginn des zu löschenden Textes setzen
- Mit »v« in den »Visual«-Modus schalten
- Mit den Cursortasten den zu entfernenden Bereich markieren
- Mit »d« löschen
/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.
|