Der Editor Vi |
Übersicht |
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.
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 |
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. |
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 |
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. |
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«. |
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 |
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 |
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 |
Das Kopieren folgt immer dem gleichen Schema:
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:
P | ||
Fügt Inhalt des aktiven Puffers
|
||
p | ||
Fügt Inhalt des aktiven Puffers
|
||
: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). |
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 |
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:
Suchen und Ersetzen |
/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.