vi Texteditor





Grundsätzliches

Motivation

Zugegebenermaßen, der vi ist ein mieser Gammeleditor, der im Vergleich zu den allermeisten Editoren, die nach 1970 entstanden sind, eigentlich nur Nachteile bietet. Dennoch hat dieser im Mittelalter so beliebte Geselle einen entscheidenden Vorteil : er ist auf beinahe jedem UNIX-System zu finden, und die grundsätzliche Bedienung ist überall einheitlich. Das gilt zwar auch für seine noch beschränkteren Brüder ed und ex. Im Gegensatz zu diesen kann der vi aber auch die Illusion eines richtigen ))Editor-Fensters(( vermitteln.

Operation

Aufgerufen wird der vi, wer hätte es gedacht, durch Eingabe von vi . Als Parameter können ein oder mehrere Dateinamen angegeben werden; bei mehr als einer Datei kann man dann später mit dem Kommando :n durch die Liste gehen.
Auf manchen Systemen kann der vi auch view oder vedit heißen. Wenn man Glück hat, gibt es vim oder gvim, die verbesserte Versionen des vi sind und z.B. ))Syntax-Coloring, und im Falle von gvim sogar ein echtes Editorfenster mit?Pulldown-Menüs((, bieten.
Im vi gibt es zwei Modi : den Kommandomodus und den Einfügemodus. Wenn vi gestartet wird, befindet er sich zunächst im Kommandomodus, der der grundlegendere von beiden ist. Von hier aus ergehen Kommandos, von denen einige in den Einfügemodus wechseln, andere nicht. Der Einfügemodus erwartet Zeichen von der Tastatur, die in den Text eingefügt werden sollen. Durch Drücken von [ESC] kommt man stets in den Kommandomodus zurück.

Kommandos

Dateibearbeitung

ZZ oder 😡 oder :wqEditierten Text speichern und vi beenden
:q!vi beenden, ohne den editierten Text zu speichern
:wEditierten Text speichern
:n,m wdatei Zeilen n bis m in der Datei datei speichern
:w>> dateiEditierten Text an die Datei datei anhängen
:w!Editierte Datei trotz schreibschutz schreiben
:r dateiFügt den Inhalt der Datei datei hinter der aktuellen Zeile ein
:-r dateiFügt den Inhalt der Datei datei vor der aktuellen Zeile ein
:r! cmdFügt die Ausgabe des UNIX-Kommandos cmd hinter der aktuellen Zeile ein
:-r! cmdFügt die Ausgabe des UNIX-Kommandos cmd hinter der aktuellen Zeile ein
:e dateiÖffnet die Datei datei zum Editieren oder legt sie neu an
:e!Liest die momentan editierte Datei neu ein, ohne die Änderungen zu speichern
:e#Schließt die aktuelle Datei und öffnet die zuletzt editierte Datei

Cursorpositionierung

h oder CTRL-HCursor 1 Zeichen nach links
lCursor 1 Zeichen nach rechts
k oder – oder CTRL-PCursor 1 Zeile hoch
j oder + oder CTRL-J oder CTRL-NCursor 1 Zeile runter
wCursor auf Anfang nächstes Wort; Sonderzeichen zählen als Trenner
bCursor auf Anfang voriges Wort; Sonderzeichen zählen als Trenner
WCursor auf Anfang nächstes Wort; Sonderzeichen gehören zum Wort
ECursor auf Ende nächstes Wort; Sonderzeichen gehören zum Wort
BCursor auf Anfang voriges Wort; Sonderzeichen gehören zum Wort
OCursor auf Zeilenanfang
^Cursor auf erstes nicht leeres Zeichen in der aktuellen Zeile
nlCursor auf Spalte n in der aktuellen Zeile
$Cursor auf Zeilenende
HCursor auf Bildschirmanfang
MCursor in Bildschirmmitte?
LCursor auf Bildschirmende
nGZeile n
GTextende
CTRL-YBildschirminhalt 1 Zeile abwärts scrollen; Cursor läuft mit
CTRL-EBildschirminhalt 1 Zeile aufwärts scrollen; Cursor läuft mit
CTRL-DBildschirminhalt ½ Seite abwärts scrollen; Cursor bleibt stehen
CTRL-UBildschirminhalt ½ Seite aufwärts scrollen; Cursor bleibt stehen
CTRL-FBildschirminhalt 1 Seite abwärts scrollen; Cursor läuft mit
CTRL-BBildschirminhalt 1 Seite aufwärts scrollen; Cursor läuft mit
nCTR ))L-F Bildschirminhalt n Seiten abwärts scrollen; Cursor läuft mit
nCTR?L-B((Bildschirminhalt n Seiten aufwärts scrollen; Cursor läuft mit
z+Aktuelle Zeile am Bilschirmanfang darstellen
z.Aktuelle Zeile in der Bildschirmmitte darstellen
z-Aktuelle Zeile am Bilschirmende darstellen
%__Gegenklammer finden; der Cursor muß auf (, ), { oder } stehen; entsprechende Klammern werden in entsprechender Richtung gezählt, bis die passende Gegenklammer gefunden wird

Text einfügen

aEinfügen nach Cursor
AEinfügen am Zeilenende
iEinfügen vor Cursor
IEinfügen vor dem ersten nicht-leeren Zeichen der Zeile
oNeue Zeile hinter aktueller Zeile erzeugen und in dieser Text einfügen
ONeue Zeile hinter aktueller Zeile erzeugen und in dieser Text einfügen

Text überschreiben

rxÜberschreiben eines einzelnen Zeichens mit dem Zeichen x
RÜberschreiben ab Cursor bis maximal zum Zeilenende
nsn Zeichen ab Cursor durch nachfolgende Eingabe ersetzen
cwtextAktuelles Wort durch text ersetzen
C oder c$Text ab Cursor bis Zeilenende durch nachfolgende Eingabe ersetzen
cl oder sZeichen unter Cursor durch nachfolgende Eingabe ersetzen
cc oder SGanze aktuelle Zeile durch nachfolgende Eingabe ersetzen
cwAktuelles Wort durch nachfolgende Eingabe ersetzen

Text kopieren und verschieben

y$Text ab Cursor bis Zeilenende in den Buffer kopieren
yyGanze aktuelle Zeile in den Buffer kopieren
nyyn Zeilen ab aktueller Zeile in den Buffer kopieren
pText Pufferinhalt nach Cursor einfügen
PPufferinhalt vor Cursor einfügen
:n,m co.Kopie der Zeilen n bis m nach der aktuellen Zeile einfügen
:n,m mo.Zeilen n bis m hinter die aktuelle Zeile verschieben

Text löschen

xZeichen unter dem Cursor löschen (Delete)
X oder dhZeichen vor dem Cursor löschen (Backspace)
D oder d$Text ab Cursor bis Zeilenende löschen
ddGanze aktuelle Zeile löschen
nddn Zeilen ab Cursor löschen
dwAktuelles Wort löschen
:n,m dZeilen n bis m löschen

Text suchen und ersetzen

fxZeichen x in aktueller Zeile rechts vom Cursor suchen
FxZeichen x in aktueller Zeile links vom Cursor suchen
;wiederholt letztes f- oder ))F-Kommando((
,wiederholt letztes f- oder ))F-Kommando(( in entgegengesetzter Richtung
/textZeichenkette text vom Cursor aus vorwärts suchen
?textZeichenkette text vom Cursor aus rückwärts suchen
nwiederholt letztes /- oder ?-Kommando
Nwiederholt letztes /- oder ?-Kommando in entgegengesetzter Richtung
:s/text1/text2/In der aktuellen Zeile das erste Auftreten von text1 durch text2 ersetzen
:s/text1/text2/nIn n Zeilen ab der aktuellen Zeile jeweils das erste Auftreten von text1 durch text2 ersetzen
:s/text1/text2/gIn der aktuellen Zeile jedes Auftreten von text1 durch text2 ersetzen
:n,m s/text1/text2/In den Zeilen n bis m jeweils das erste Auftreten von text1 durch text2 ersetzen
:n,m s/text1/text2/gIn den Zeilen n bis m jedes Auftreten von text1 durch text2 ersetzen
&Letztes :s-Kommando wiederholen

Sonstige Kommandos

uLetztes Kommando rückgängig machen (Undo)
UAktuelle Zeile wiederherstellen in dem Zustand, der beim letzten Eintritt in die Zeile vorhanden war
~Zeichen unter dem Cursor in anderen Case konvertieren (Uppercase <-> Lowercase)
JAktuelle Zeile und nachfolgende Zeile zu einer Zeile zusammenfassen
:!cmdAusführen des UNIX-Kommandos cmd
CTRL-Gzeigt Dateiname, aktuelle Zeilennummer und Gesamtzahl Zeilen an
CTRL-LBildschirm refresh
CTRL-VIm Einfügemodus wird das nach dieser Kombination eingegebene Sonderzeichen als Textzeichen interpretiert
CTRL-[Bricht das begonnene Kommando ab, bzw. beendet den Einfügemodus

Quick Reference

Die wichtigsten Kommandos sind hier zusammengefaßt :

TastaturkürzelBeschreibung
:wqEditierten Text speichern und vi beenden
:q!vi beenden, ohne den editierten Text zu speichern
:wEditierten Text speichern
hCursor 1 Zeichen nach links
lCursor 1 Zeichen nach rechts
kCursor 1 Zeile hoch
jCursor 1 Zeile runter
wCursor auf Anfang nächstes Wort; Sonderzeichen zählen als Trenner
bCursor auf Anfang voriges Wort; Sonderzeichen zählen als Trenner
WCursor auf Anfang nächstes Wort; Sonderzeichen gehören zum Wort
ECursor auf Ende nächstes Wort; Sonderzeichen gehören zum Wort
BCursor auf Anfang voriges Wort; Sonderzeichen gehören zum Wort
0Cursor auf Zeilenanfang
$Cursor auf Zeilenende
nGZeile n
GTextende
aEinfügen nach Cursor
AEinfügen am Zeilenende
iEinfügen vor Cursor
oNeue Zeile hinter aktueller Zeile erzeugen und in dieser Text einfügen
RÜberschreiben ab Cursor bis maximal zum Zeilenende
cwtextAktuelles Wort durch text ersetzen
CText ab Cursor bis Zeilenende durch nachfolgende Eingabe ersetzen
ccGanze aktuelle Zeile durch nachfolgende Eingabe ersetzen
cwAktuelles Wort durch nachfolgende Eingabe ersetzen
yyGanze aktuelle Zeile in den Buffer kopieren
nyyn Zeilen ab aktueller Zeile in den Buffer kopieren
pPufferinhalt nach Cursor einfügen
PPufferinhalt vor Cursor einfügen
xZeichen unter dem Cursor löschen (Delete)
XZeichen vor dem Cursor löschen (Backspace)
DText ab Cursor bis Zeilenende löschen
ddGanze aktuelle Zeile löschen
nddn Zeilen ab Cursor löschen
dwAktuelles Wort löschen
:n,md Zeilen n bis m löschen
/textZeichenkette text vom Cursor aus vorwärts suchen
?textZeichenkette text vom Cursor aus rückwärts suchen