Eingabemodus: Einfügen von Text oder Überschreiben vorhandener Textpassagen.
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). |
Umschalten in den Eingabemodus
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');
Umschalten in den Kommandomodus
Der Eingabemodus wird durch Drücken der ESC-Taste verlassen und somit der
Kommandomodus aktiv.
Blättern auf dem Bildschirm
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 |
Cursorpositionierung (im Kommandomodus)
Normalerweise ist der vi an die Pfeiltasten der Tastatur richtig angepaßt.
Das muß aber nicht immer so sein. Deshalb helfen manchmal nur die
folgenden Möglichkeiten (Auswahl):
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 |
Löschen von Text (im Kommandomodus)
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ö |
[n] dd | n ganze Zeilen löschen. Falls n fehlt, wird eine Zeile gelöscht. |
D | ab Cursorposition bis Zeilenende löschen |
Text ändern:
Änderungskommandos wechseln automatisch in den Eingabemodus, der mit der
ESC-Taste verlassen werden muß.
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 |
Suchen nach Zeichen oder Strings
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) |
Sonstige Kommandos
. | 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.
Weitere Techniken:
- Zeile verschieben:
Zeile mit dd löschen
Zur neuen Position wechseln
Zeile mit p (vor dem Cursor)
oder P (nach dem Cursor) einfügen
- Zeile kopieren:
Zeile mit yy in den Puffer kopieren
Zur neuen Position wechseln
Zeile mit p (vor dem Cursor)
oder P (nach dem Cursor) einfügen
- Ein paar einfache Tricks:
zwei aufeinanderfolgende Zeichen vertauschen: xp
zwei aufeinanderfolgende Zeilen vertauschen: ddp
eine Zeile duplizieren: yyp
- Mehrere Zeilen verschieben oder kopieren:
Mehrere Zeilen werden durch Voranstellen der Zeilenzahl vor "dd" oder
"yy" in den Puffer gebracht. Alles weitere wie oben.
- Weitere Puffer:
Neben dem anonymen Puffer können 26 weitere Pufferbereiche verwendet werden,
die durch einen Buchstaben ("a" - "z") bezeichnet werden. Dazu
wird ein Doppelapostroph und der Puffername vor den Befehl gestellt, z. B.:
"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 |
- Blöcke von einer Datei in die andere übertragen:
Mit dem Kommando :e <dateiname> kann eine neue Datei bearbeitet werden,
ohne den vi zu verlassen.
vi mit der ersten Datei aufrufen, z. B.:
vi foo.txt
Textblock mit den Yank-Kommando in einen Puffer schreiben:
"f10yy (10 Zeilen in Puffer f)
neue Datei holen, z. B.:
:e bar.txt
an die gewünschte Stelle gehen und Puffer einfügen:
"fp
- Weitere Steuerfunktionen für reguläre Ausdrücke:
Im vi gibt es noch zwei Steuerfunktionen für RA, die sich auf den Anfang
oder das Ende eines Wortes beziehen (Wortanfang/-Ende wird durch Leerzeichen oder
Satzzeichen identifiziert).
\< | Markiert den Wortanfang bei der Mustersuche |
\> | Markiert das Wortende bei der Mustersuche |
- Blöcke selektieren:
Da bei allen ex-Kommandos reg. Ausdrücke als Positionsbestimmung möglich sind,
können auch Blöcke über Suchbegriffe selektiert werden. Sei beispielsweise
folgender Text gegeben:
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/
- Weitere Beispiele für globales Suchen und Ersetzen:
Das Leerzeichen wird in den Beispielen als "_" dargestellt. Das
Prozentzeichen (%) ist eine Abkürzung für 1,$ - also für die
Bearbeitung der ganzen Datei.
- Ersetzen Punkt durch Semikolon in den ersten 10 Zeilen:
:1,10s/\./;/g
- Alle Worte "Hilfe" oder "hilfe" durch "HILFE" ersetzen:
:%s/[Hh]ilfe/HILFE/g
- aufeinanderfolgende Leerzeichen durch ein einziges ersetzen
:%s/_ _*/_/g
- alle Leerzeilen löschen:
:g/^$/d
- alle Zeilen löschen, die entweder leer sind oder nur Leerzeichen enthalten:
:g/^_*$/d
- Wie wir gesehen haben, können geklammerte Terme durch Backslash und die
Nummer des Ausdrucks referiert werden. Der folgende Ausdruck ersetzt alle führenden
Leerzeichen aller Zeilen:
%s/^_ _*\(.*\)/\1/
- Einfügen von 3 Leerzeichen am Anfang jeder Zeile:
:%s/^/_ _ _/
- Die Reihenfolge zweier Texte in einer Zeile vertauschen, die durch einen
Gedankenstrich getrennt sind; so soll aus more - Dateien anzeigen die
Zeile Dateien anzeigen - more entstehen. Zur besseren Verständlichkeit
ist der Ausdruck durch Leerstellen strukturiert, die man bei der Eingabe natürlich
weglassen muß (das Leerzeichen wird hier durch "_" dargestellt):
%s / \(.*\) _-_ \(.*\) / \2 _-_ \1 /
Makros
Makros sind nichts weiter, als die Zusammenfassung von vi-Kommandos unter einer Taste.
Man kann so häufig benutzte Tastenbetätigungen augf eine Taste legen. Bei
der Definition von Makros sollten Sie immer davon Ausgehen, daß sich der vi im
Kommandomodus befindet. Die Makros lassen sich auch dauerhaft in der Datei .exrc im
eigenen Homedirectory speichern. Sie werden dann immer beim Aufruf des vi geladen.
In .exrc lassen sich auch andere vi-Voreinstellungen vornehmen (siehe vi-Manualpage,
set-Kommando). Die Definition eines Makros ist recht einfach (entweder als Zeile in
.exrc oder im ex-Modus, also eingeleitet durch Doppelpunkt:
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%uuml;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>
Literaturhinweise
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.
|
|