![]() |
Vorlesung "UNIX"von Prof. Jürgen Plate |
Das Umschalten zwischen den Modi erfolgt mit der ESC-Taste ([ESC]). Die Handhabung des Kommandomodus des vi macht die Bedienung für den Anfänger etwas ungewohnt. Die Cursorpositionierung erfolgt mit verschiedenen Tasten, für die Eingabe von Dateibefehlen oder anderen Funktionen (z. B. Suchen/ersetzen) ist die Eingabe eines Doppelpunktes nötig. Man befindet sich dann in ex-Modus, der ähnliche Eigenschaften hat, wie der ed.
Bleiben wir gleich bei den ex-Befehlen. Nach der Eingabe des : springt der Cursor in die letzte Zeile und erlaubt die Eingabe eines ex-Befehls, der mit der Return-Taste abgeschlossen wird. Es sind nach dem Doppelpunkt alle ed-Befehle möglich.Für den Einstieg genügen:
:w | Text auf die Platte schreiben |
:w! | Text auf die Platte schreiben, Schreibschutz ignorieren |
:wq | Text auf die Platte schreiben und vi beenden |
[ESC] Z Z | wie :wq |
:x | wie :wq |
:w Datei | Text auf die angegebene (andere) Datei schreiben |
w >> Datei | Text an die angegebene Datei anhängen |
:q | Abbrechen, ohne den Text auf Platte zu schreiben. Bei Änderungen im Text erfolgt eine Warnung und kein Abbruch. |
:q! | Abbrechen, ohne den Text auf Platte zu schreiben. |
:r Datei | Text aus der angegebenen Datei nach der momentanen Zeile einfügen. |
:e Datei | Neue Datei bearbeiten (der Textpuffer wird überschrieben). Ist die aktuelle Datei noch nicht gespeichert worden, erfolgt eine Warnung. |
:e! Datei | Neue Datei bearbeiten (der Textpuffer wird immer überschrieben). |
:n | wechselt zur nächsten geladenen Datei (falls beim Aufruf mehr als eine Datei angegeben wurde). |
a | (append) Eingabe rechts vom Cursor |
A | Eingabe am Zeilenende |
i | (insert) Engabe links vom Cursor |
I | Eingaben am Zeilenanfang |
o | Eingabe ab der aktuellen Zeile, d.h. in der folgenden Zeile, Spalte 1. |
O | Eingabe in der vorhergehenden Zeile, Spalte 1. |
Wenn es die Hardware ermöglicht, ändert sich die Form des Cursors beim Wechsel zwischen Eingabe- und Kommandomodus. Bei vielen vi-Versionen wird der Eingabemodus unten rechts am Bildschirm angezeigt ('append mode', 'input mode');
CTRL-F | Eine Bildschirmseite vorwärts |
CTRL-B | Eine Bildschirmseite rückwärts |
CTRL-D | Eine halbe Bildschirmseite vorwärts |
CTRL-L | Bildschirm neu aufbauen |
h | Zeichen links (auch Backspace) |
l | Zeichen rechts (auch blank) |
k | Spalte höher |
j | Spalte tiefer |
b | Wortanfang |
e | Wortende |
w | Anfang nächstes Wort |
H | Anfang erste Zeile des Bildschirms |
L | Anfang letzten Zeile des Bildschirms |
0 | (Null) Zeilenanfang |
$ | Zeilenende |
RETURN | nächste Zeile |
nG | (Go) Gehe zu Zeile n. n ist eine Zeilennummer. Fehlt die Zahl, wird zur letzten Zeile der Datei gesprungen. |
% | sucht zur aktuellen Klammer die korrespondierende öffnende bzw. schließende Klammer |
x | Zeichen unter dem Cursor löschen |
X | Zeichen vor dem Cursor löschen |
dw | ab Cursorposition bis Wortende löschen |
db | ab Cursorposition bis Wortanfang löschen |
[n] dd | n ganze Zeilen löschen. Falls n fehlt, wird eine Zeile gelöscht. |
D | ab Cursorposition bis Zeilenende löschen |
r | Zeichen ersetzen (kein Abschluß mit ESC) |
~ | Wechsel Groß-/Kleinbuschst. (kein Abschluß mit ESC) |
R | Mehrere Zeichen ersetzen |
s | Ein Zeichen ersetzen und zusätzliche Zeichen anschließend einfügen |
cc | Gesamte Zeile ändern |
cw | Wort ändern |
C | ab Cursorposition bis Zeilenende ändern |
fx | Zeichen "x" in der momentanen Zeile suchen (vorwärts) |
Fx | Zeichen "x" in der momentanen Zeile suchen (rückwärts) |
Die folgenden Suchkommandos müssen mit der Return-Taste abgeschlossen werden | |
/str | String "str" vorwärts in der Datei suchen |
?str | String "str" rückwärts in der Datei suchen |
// | Letzten Suchbefehl wiederholen (vorwärts) |
?? | Letzten Suchbefehl wiederholen (rückwärts) |
. | Letztes Kommando wiederholen |
J | Zeilen verbinden (nächste Zeile anhängen) |
u | Letzten Befehl rückgängig machen |
U | Aktuelle Zeile wiederherstellen |
CTRL-g | Zeilennummer und Dateiinfo zeigen |
CTRL-v | Nächstes Zeichen transparent eingeben (z. B. Steuerzeichen) |
:! cmd | Verläßt vi temporär und führt das Kommando cmd aus (ggf. Rückkehr mit exit). |
:r! cmd | Fügt die Ausgabe von cmd ab Cursorposition ein. |
!! cmd | benutzt aktuelle Zeile als Eingabe für cmd und ersetzt durch dessen Ausgabe. |
Zum Kopieren dient der y-Befehl (yank), mit dem Textteile in einen Puffer kopiert werden. "y" wird in der Regel mit einem zweiten Steuerbuchstaben kombiniert, der angibt, wieviel Text gepuffert wird (z. B. "yw", "y$"). Eine ganze Zeile wird mit "yy" oder "Y" kopiert. Vor "yy" kann noch die Anzahl der zu kopierenden Zeilen stehen (z. B. 12yy). Das Einfügen des Kopierten Textes geht dann mit p (vor dem Cursor) oder P (nach dem Cursor).
Zusätzlich bietet der vi weitere Steuerungsfunktionen für den Editor und einen Makromechanismus. Kommandofolgen können damit durch ein einziges Befehlswort abgerufen werden. Weitere Infos auf den vi-Manualpages.
"ayy | kopiere Zeile in Puffer a |
"b6yy | kopiere die nächsten 6 Zeilen in Puffer b |
"ap | Inhalt Puffer a nach dem Cursor einfügen |
\< | Markiert den Wortanfang bei der Mustersuche |
\> | Markiert das Wortende bei der Mustersuche |
Das Betriebssystem UNIX blickt auf eine lange Vergangenheit
zurück. Ursprünglich wurde es für PDP-Rechner der
Firma DEC entwickelt und sollte hauptsächlich die Bedürfnisse
von professionellen Softwareentwicklern befriedigen. Heute ist UNIX auf
Workstations mit 64-Bit-Prozessoren zugeschnitten. Zu den Neuerungen
gehören die Einführung von Threads, mit denen ein Programm
mehrere Funktionen gleichzeitig ausführen kann. Ebenfalls neu
sind Echtzeitfunktionen mit denen Programmlaufzeiten vorhersagbar sind.
Insbesondere für Datenbanken ist die Möglichkeit, sehr große
Dateien verarbeiten zu können, von nicht unerheblicher Bedeutung.
Die beiden letzten Zeilen sollen nach vorne verschoben werden.
:/Echtzeitfunktionen/,/Bedeutung/ mo /UNIX/
map <Makroname> <Kommandofolge>
MIt map ohne Parameter gibt es eine Liste der Makros und mit unmap kann ein Makro gelöscht werden. Steuerzeichen (RETURN, ESC, BACKSPACE, etc.) können natürlich nicht direkt eingegeben werden, sondern als CTRL-V <Stuerzeichen>. In den Beispielen unten werden die Steuerzeichen beispielsweise als <CTRL-X> dargestellt. Zum Beispiel kann man den Text "Mit freundlichen Grüßen" auf den Tastencode "fg" legen, indem man mit "i" in den Eingabemodus wechselt, den Text angibt und dann wieder in den Kommandomodus geht:
map fg iMit freundlichen Grüßen<ESC>
Um das ESC-Zeichen einzugeben, tippt man <CTR-V><ESC>. Man könnte auf diese Weise auch die gewohnten PC-Tasten (in der entsprechenden Terminal-Emulation) auf die vi-Kommandos legen.
" Taste einf
map <ESC>[2~ i
" Taste del
map <ESC>[3~ x
" Taste pos1
map <ESC>[1~ ^
" Taste end
map <ESC>[4~ $
" Taste PgUp
map <ESC>[5~ <CTRL-B>
" Taste PgDown
map <ESC>[6~ <CTRL-F>
:set timeout ttimeoutlen=100 timeoutlen=5000 :set term=builtin_ansi :set nocompatible
L. Lamb:
Learning the vi Editor
O'Reilly & Ass. (1990)
S. von Bomhard:
Hartes Brot - vi-Tips für Neugierige
iX, 4/92, S. 115-119, Heise Verlag
Manualpage zum vi (man vi)
Im Anhang finden Sie noch eine vi-Kurzreferenz.
![]() |
![]() |