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 :wq | Editierten Text speichern und vi beenden |
:q! | vi beenden, ohne den editierten Text zu speichern |
:w | Editierten Text speichern |
:n,m w | datei Zeilen n bis m in der Datei datei speichern |
:w>> datei | Editierten Text an die Datei datei anhängen |
:w! | Editierte Datei trotz schreibschutz schreiben |
:r datei | Fügt den Inhalt der Datei datei hinter der aktuellen Zeile ein |
:-r datei | Fügt den Inhalt der Datei datei vor der aktuellen Zeile ein |
:r! cmd | Fügt die Ausgabe des UNIX-Kommandos cmd hinter der aktuellen Zeile ein |
:-r! cmd | Fü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-H | Cursor 1 Zeichen nach links |
l | Cursor 1 Zeichen nach rechts |
k oder – oder CTRL-P | Cursor 1 Zeile hoch |
j oder + oder CTRL-J oder CTRL-N | Cursor 1 Zeile runter |
w | Cursor auf Anfang nächstes Wort; Sonderzeichen zählen als Trenner |
b | Cursor auf Anfang voriges Wort; Sonderzeichen zählen als Trenner |
W | Cursor auf Anfang nächstes Wort; Sonderzeichen gehören zum Wort |
E | Cursor auf Ende nächstes Wort; Sonderzeichen gehören zum Wort |
B | Cursor auf Anfang voriges Wort; Sonderzeichen gehören zum Wort |
O | Cursor auf Zeilenanfang |
^ | Cursor auf erstes nicht leeres Zeichen in der aktuellen Zeile |
nl | Cursor auf Spalte n in der aktuellen Zeile |
$ | Cursor auf Zeilenende |
H | Cursor auf Bildschirmanfang |
M | Cursor in Bildschirmmitte? |
L | Cursor auf Bildschirmende |
nG | Zeile n |
G | Textende |
CTRL-Y | Bildschirminhalt 1 Zeile abwärts scrollen; Cursor läuft mit |
CTRL-E | Bildschirminhalt 1 Zeile aufwärts scrollen; Cursor läuft mit |
CTRL-D | Bildschirminhalt ½ Seite abwärts scrollen; Cursor bleibt stehen |
CTRL-U | Bildschirminhalt ½ Seite aufwärts scrollen; Cursor bleibt stehen |
CTRL-F | Bildschirminhalt 1 Seite abwärts scrollen; Cursor läuft mit |
CTRL-B | Bildschirminhalt 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
a | Einfügen nach Cursor |
A | Einfügen am Zeilenende |
i | Einfügen vor Cursor |
I | Einfügen vor dem ersten nicht-leeren Zeichen der Zeile |
o | Neue Zeile hinter aktueller Zeile erzeugen und in dieser Text einfügen |
O | Neue 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 |
ns | n Zeichen ab Cursor durch nachfolgende Eingabe ersetzen |
cwtext | Aktuelles Wort durch text ersetzen |
C oder c$ | Text ab Cursor bis Zeilenende durch nachfolgende Eingabe ersetzen |
cl oder s | Zeichen unter Cursor durch nachfolgende Eingabe ersetzen |
cc oder S | Ganze aktuelle Zeile durch nachfolgende Eingabe ersetzen |
cw | Aktuelles Wort durch nachfolgende Eingabe ersetzen |
Text kopieren und verschieben
y$ | Text ab Cursor bis Zeilenende in den Buffer kopieren |
yy | Ganze aktuelle Zeile in den Buffer kopieren |
nyy | n Zeilen ab aktueller Zeile in den Buffer kopieren |
p | Text Pufferinhalt nach Cursor einfügen |
P | Pufferinhalt 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
x | Zeichen unter dem Cursor löschen (Delete) |
X oder dh | Zeichen vor dem Cursor löschen (Backspace) |
D oder d$ | Text ab Cursor bis Zeilenende löschen |
dd | Ganze aktuelle Zeile löschen |
ndd | n Zeilen ab Cursor löschen |
dw | Aktuelles Wort löschen |
:n,m d | Zeilen n bis m löschen |
Text suchen und ersetzen
fx | Zeichen x in aktueller Zeile rechts vom Cursor suchen |
Fx | Zeichen x in aktueller Zeile links vom Cursor suchen |
; | wiederholt letztes f- oder ))F-Kommando(( |
, | wiederholt letztes f- oder ))F-Kommando(( in entgegengesetzter Richtung |
/text | Zeichenkette text vom Cursor aus vorwärts suchen |
?text | Zeichenkette text vom Cursor aus rückwärts suchen |
n | wiederholt letztes /- oder ?-Kommando |
N | wiederholt letztes /- oder ?-Kommando in entgegengesetzter Richtung |
:s/text1/text2/ | In der aktuellen Zeile das erste Auftreten von text1 durch text2 ersetzen |
:s/text1/text2/n | In n Zeilen ab der aktuellen Zeile jeweils das erste Auftreten von text1 durch text2 ersetzen |
:s/text1/text2/g | In 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/g | In den Zeilen n bis m jedes Auftreten von text1 durch text2 ersetzen |
& | Letztes :s-Kommando wiederholen |
Sonstige Kommandos
u | Letztes Kommando rückgängig machen (Undo) |
U | Aktuelle Zeile wiederherstellen in dem Zustand, der beim letzten Eintritt in die Zeile vorhanden war |
~ | Zeichen unter dem Cursor in anderen Case konvertieren (Uppercase <-> Lowercase) |
J | Aktuelle Zeile und nachfolgende Zeile zu einer Zeile zusammenfassen |
:!cmd | Ausführen des UNIX-Kommandos cmd |
CTRL-G | zeigt Dateiname, aktuelle Zeilennummer und Gesamtzahl Zeilen an |
CTRL-L | Bildschirm refresh |
CTRL-V | Im 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ürzel | Beschreibung |
:wq | Editierten Text speichern und vi beenden |
:q! | vi beenden, ohne den editierten Text zu speichern |
:w | Editierten Text speichern |
h | Cursor 1 Zeichen nach links |
l | Cursor 1 Zeichen nach rechts |
k | Cursor 1 Zeile hoch |
j | Cursor 1 Zeile runter |
w | Cursor auf Anfang nächstes Wort; Sonderzeichen zählen als Trenner |
b | Cursor auf Anfang voriges Wort; Sonderzeichen zählen als Trenner |
W | Cursor auf Anfang nächstes Wort; Sonderzeichen gehören zum Wort |
E | Cursor auf Ende nächstes Wort; Sonderzeichen gehören zum Wort |
B | Cursor auf Anfang voriges Wort; Sonderzeichen gehören zum Wort |
0 | Cursor auf Zeilenanfang |
$ | Cursor auf Zeilenende |
nG | Zeile n |
G | Textende |
a | Einfügen nach Cursor |
A | Einfügen am Zeilenende |
i | Einfügen vor Cursor |
o | Neue Zeile hinter aktueller Zeile erzeugen und in dieser Text einfügen |
R | Überschreiben ab Cursor bis maximal zum Zeilenende |
cwtext | Aktuelles Wort durch text ersetzen |
C | Text ab Cursor bis Zeilenende durch nachfolgende Eingabe ersetzen |
cc | Ganze aktuelle Zeile durch nachfolgende Eingabe ersetzen |
cw | Aktuelles Wort durch nachfolgende Eingabe ersetzen |
yy | Ganze aktuelle Zeile in den Buffer kopieren |
nyy | n Zeilen ab aktueller Zeile in den Buffer kopieren |
p | Pufferinhalt nach Cursor einfügen |
P | Pufferinhalt vor Cursor einfügen |
x | Zeichen unter dem Cursor löschen (Delete) |
X | Zeichen vor dem Cursor löschen (Backspace) |
D | Text ab Cursor bis Zeilenende löschen |
dd | Ganze aktuelle Zeile löschen |
ndd | n Zeilen ab Cursor löschen |
dw | Aktuelles Wort löschen |
:n,m | d Zeilen n bis m löschen |
/text | Zeichenkette text vom Cursor aus vorwärts suchen |
?text | Zeichenkette text vom Cursor aus rückwärts suchen |