Vi-Befehlsreferenz: Bearbeitung

< Übersicht

Arbeitsweise des vi

Bearbeiten

vi ist ein modaler Editor. Das bedeutet, dass er zwei Betriebsmodi kennt:

  • den Eingabemodus (engl. input mode), in dem die Betätigung einer Taste zum Erscheinen des gewählten Zeichens in der bearbeiteten Datei und damit auf dem Bildschirm führt.
  • Den Befehlsmodus (engl. command mode), in dem die Tasten einfache bis komplexe Editorfunktionen auslösen beispielsweise das Löschen einer Zeile oder das Ersetzen aller 'ä' durch 'ae' in Zeilen, die nicht mit '>' beginnen. Der Befehlsmodus ist wiederum unterteilt:
    • in den unmittelbaren Modus (engl. immediate mode), in dem die eingegebenen, kurzen Kommandos selbst nicht angezeigt werden
    • und den ex-Modus (engl. ex mode, benannt nach dem Kommandozeileneditor ex). Die Befehlseingabe wird in der untersten Zeile des vi dargestellt.

Unmittelbar nach dem Start des vi befindet sich der Editor gewöhnlich im Befehlsmodus. Der Wechsel in den Eingabemodus erfolgt mit den Tasten i, I, a, A, o und O (s.u.). Der Wechsel in den Befehlsmodus erfolgt mit der Taste Esc.

Aus dem Befehlsmodus heraus wird der ex-Modus mit : eingeleitet und mit Enter abgeschlossen.



Die Modi des vi


Befehle des Befehlsmodus

Bearbeiten

Vielen Anweisungen des Befehlsmodus kann eine Zahl vorangestellt werden, die angibt, wie oft der Befehl ausgeführt wird. So bewegt h den Cursor eine Position nach links, 10h bewegt den Cursor 10 Positionen nach links.

Im Folgenden wird mit '#' die mögliche Angabe einer Wiederholung gekennzeichnet. #h heißt also, dass dem Befehl h eine Zahl vorangestellt werden kann.

Bewegungsbefehle

Bearbeiten

Bewegungsbefehle können - für sich geschrieben - den Cursor wie angegeben im Text bewegen.

Sie können darüber hinaus (ausgenommen die Befehle, die mit z beginnen) verwendet werden, um den Wirkungsbereich von Lösch-, Änderungs- und Kopierkommandos anzugeben. Die allermeisten Befehle sind Abkürzungen des eigentlichen Befehls. Das vorangestellte # bedeutet hier eine beliebige Zahl. Diese Zahl kann aus mehreren Ziffern bestehen. 12h bewegt als den Cursor um 12 Zeichen nach links.

Bei den Cursortasten ist insbesondere die historische Entwicklung des vi zu beachten. Der vi wurde programmiert als noch die meisten Tastaturen keinen Cursorblock besaßen. Aus diesem Grund wurden vier beliebige Tasten genommen, die nebeneinander lagen. Dies waren die Tasten hjkl und ersetzten im Kommando-Modus den Cursorblock.

#h Cursor einen/mehrere Buchstaben nach links
#l Cursor einen/mehrere Buchstaben nach rechts
#j Cursor eine/mehrere Zeile(n) nach unten (jump down)
#k Cursor eine/mehrere Zeile(n) nach oben
#w Cursor ein/mehrere Wort(e) nach rechts, nächster Wortanfang (word)
#b Cursor ein/mehrere Wort(e) nach links, vorheriger Wortanfang (begin)
#e Cursor ein/mehrere Wort(e) nach rechts, nächstes Wortende (end)
#W Cursor eine/mehrere Zeichenkette(n) nach rechts, nächster Zeichenkettenanfang (Word)
#B Cursor eine/mehrere Zeichenkette(n) nach links, vorheriger Zeichenkettenanfang (Begin)
#E Cursor eine/mehrere Zeichenkette(n) nach rechts, nächstes Zeichenkettenende (End)
0 (Null) Cursor auf Spalte 1 der aktuellen Zeile
#| Cursor auf Spalte 1/angegebene Spalte der aktuellen Zeile
^ Cursor auf das erste Zeichen der aktuellen Zeile
$ Cursor auf das letzte Zeichen der aktuellen Zeile
#f<Zeichen> Cursor auf das (soundsovielte) <Zeichen> nach rechts
#F<Zeichen> Cursor auf das (soundsovielte) <Zeichen> nach links
#t<Zeichen> Cursor links neben das (soundsovielte) <Zeichen> nach rechts
#T<Zeichen> Cursor rechts neben das (soundsovielte) <Zeichen> nach links
#; (mehrfaches) Wiederholen des letzten f-, t-, F- oder T-Kommandos
#, (mehrfaches) Wiederholen des letzten f-, t-, F- oder T-Kommandos in entgegengesetzter Richtung
#G Zur letzten/angegebenen Zeile springen ('G'oto)
#gg Zur ersten/angegebenen Zeile springen
#Enter Cursor eine/mehrere Zeile(n) nach unten, auf das erste Zeichen
#+ Cursor eine/mehrere Zeile(n) nach unten, auf das erste Zeichen
#- Cursor eine/mehrere Zeile(n) nach oben, auf das erste Zeichen
#_ Cursor auf das erste Zeichen, keine/angegebene Zeilen -1 (sic!) nach unten
#H Cursor auf der Anfang der obersten/angegebenen Zeile von oben (Head)
M Cursor auf den Anfang der mittleren Zeile (Middle)
#L Cursor auf den Anfang der untersten/angegebenen Zeile von unten (Lower)
#% Cursor auf den Anfang der Zeile, welcher # % der Zeilen der Datei entsprechen
% Wenn der Cursor auf einer Klammer ([, ], {, }, (, )) steht, springe zu der anderen Klammer des Paares.
#) Cursor einen/angegebene Satz/Sätze vorwärts (Ein Satz endet mit ., ? oder !, gefolgt von einem Leerzeichen, Tabulator oder Zeilenumbruch. Schließende Klammern ) und ] und Anführungszeichen " und ' vor den Leerzeichen eingeschlossen.)
#( Cursor einen/angegebene Satz/Sätze rückwärts (Ein Satz endet mit ., ? oder !, gefolgt von einem Leerzeichen, Tabulator oder Zeilenumbruch. Schließende Klammern ) und ] und Anführungszeichen " und ' vor den Leerzeichen eingeschlossen.)
#} Cursor einen/angegebene Absatz/Absätze vorwärts (Ein Absatz beginnt nach jeder leeren Zeile oder nach jedem Nroff-Absatzmakro)
#{ Cursor einen/angegebene Absatz/Absätze rückwärts (Ein Absatz beginnt nach jeder leeren Zeile oder nach jedem Nroff-Absatzmakro)
#]] Cursor einen/angegebene Abschnitt(e) oder bis zur nächsten { in der ersten Spalte vorwärts (Ein Abschnitt beginnt mit einem Seitenvorschub in der ersten Spalte oder nach jedem Nroff-Abschnittsmakro)
#][ Cursor einen/angegebene Abschnitt(e) oder bis zur nächsten } in der ersten Spalte vorwärts
#[[ Cursor einen/angegebene Abschnitt(e) oder bis zur letzten { in der ersten Spalte rückwärts
#[] Cursor einen/angegebene Abschnitt(e) oder bis zur letzten } in der ersten Spalte rückwärts
#z- Text so anzeigen, dass die aktuelle/angegebene Zeile als unterste Zeile erscheint
#z. Text so anzeigen, dass die aktuelle/angegebene Zeile als mittlere Zeile erscheint
#zEnter Text so anzeigen, dass die aktuelle/angegebene Zeile als oberste Zeile erscheint
z^ Text so anzeigen, dass die erste Zeile oberhalb der Darstellung als unterste Zeile erscheint
#z+ Text so anzeigen, dass die erste Zeile unterhalb der Darstellung/angegebene Zeile als oberste Zeile erscheint
 
Bewegungsbefehle des vi

Eingabebefehle / Wechsel in den Eingabemodus

Bearbeiten

Die Angabe einer Wiederholung mit # bezieht sich hier auf den eingegebenen Text bis zum nächsten Wechsel in den Befehlsmodus mit Esc.

5iEchoEsc ergibt EchoEchoEchoEchoEcho .

#i Texteingabe vor dem Cursor (insert)
#I Texteingabe am Zeilenanfang (Insert)
#a Texteingabe nach dem Cursor (append)
#A Texteingabe hinter dem Zeilenende (Append)
#o Texteingabe in einer neuen Zeile unterhalb des Cursors
#O Texteingabe in einer neuen Zeile oberhalb des Cursors (Over)
 
Eingabebefehle des vi

Löschbefehle

Bearbeiten

Die mit einem Befehl gelöschten Textteile werden in einen Zwischenpuffer (engl. deletion buffer) kopiert.

Sie können mit den Einfügebefehlen an anderer Stelle wieder eingefügt werden.

#x Löschen eines/mehrerer Zeichen(s) unter dem Cursor/nach rechts
#X Löschen eines/mehrerer Zeichen(s) nach links
#dd Löschen einer/mehrerer Zeile(n) von der aktuellen Zeile nach unten
D Löschen bis zum Zeilenende
d$ Löschen bis zum Zeilenende
dt$ Löschen bis zum Zeichen $
d^ Löschen bis zum Zeilenanfang
d0 Löschen bis zum linken Rand
#dw Löschen eines/mehrerer Worte(s) nach rechts bis zum nächsten Wortanfang
#db Löschen eines/mehrerer Worte(s) nach links bis zum vorherigen Wortanfang
#de Löschen eines/mehrerer Worte(s) nach rechts bis zum Wortende
#dW Löschen einer/mehrerer Zeichenkette(n) nach rechts bis zum nächsten Zeichenkettenanfang
#dB Löschen einer/mehrerer Zeichenkette nach links bis zum vorherigen Zeichenkettenanfang
#dE Löschen einer/mehrerer Zeichenkette(n) nach rechts bis zum Zeichenkettenende
#d} Löschen einer/mehrerer Blöcke vom Cursor bis zum Absatzende

Siehe hierzu auch den Abschnitt Arbeiten mit Puffern.

Änderungsbefehle

Bearbeiten

Die mit einem Befehl (ausgenommen r, R und ~) gelöschten Textteile werden in einen Zwischenpuffer (engl. deletion buffer) kopiert.

Sie können mit den Einfügebefehlen an anderer Stelle wieder eingefügt werden.

#r<Zeichen> Ersetzen eines/mehrerer Zeichen(s) unter dem Cursor/nach rechts durch das angegebene Zeichen.
#R<Zeichen><Zeichen>...Esc Ändern eines/mehrerer Zeichen(s) nach rechts bis zur Eingabe von Esc (entspr. Überschreiben)
#~ Ändern der Gross-/Kleinschreibung eines/mehrerer Zeichen(s) unter dem Cursor/nach rechts bis zur Eingabe von Esc
C<Zeichen><Zeichen>...Esc Ändern bis zum Zeilenende bis zur Eingabe von Esc
c$<Zeichen><Zeichen>...Esc Ändern bis zum Zeilenende bis zur Eingabe von Esc
c^<Zeichen><Zeichen>...Esc Ändern bis zum Zeilenanfang bis zur Eingabe von Esc
c0<Zeichen><Zeichen>...Esc Ändern bis zum linken Rand bis zur Eingabe von Esc
#cw<Zeichen><Zeichen>...Esc Ändern eines/mehrerer Worte(s) nach rechts bis zum nächsten Wortanfang bis zur Eingabe von Esc
#cb<Zeichen><Zeichen>...Esc Ändern eines/mehrerer Worte(s) nach links bis zum vorherigen Wortanfang bis zur Eingabe von Esc
#ce<Zeichen><Zeichen>...Esc Ändern eines/mehrerer Worte(s) nach rechts bis zum Wortende bis zur Eingabe von Esc
#cW<Zeichen><Zeichen>...Esc Ändern einer/mehrerer Zeichenkette(n) nach rechts bis zum nächsten Zeichenkettenanfang bis zur Eingabe von Esc
#cB<Zeichen><Zeichen>...Esc Ändern einer/mehrerer Zeichenkette(n) nach links bis zum vorherigen Zeichenkettenanfang bis zur Eingabe von Esc
#cE<Zeichen><Zeichen>...Esc Ändern einer/mehrerer Zeichenkette(n) nach rechts bis zum Zeichenkettenende bis zur Eingabe von Esc
#s<Zeichen><Zeichen>...Esc Ersetzen eines/mehrerer Zeichen(s) nach rechts bis zur Eingabe von Esc
#S<Zeichen><Zeichen>...Esc Ersetzen einer/mehrerer Zeile(n) nach unten bis zur Eingabe von Esc

Siehe hierzu auch den Abschnitt Arbeiten mit Puffern.

Kopierbefehle

Bearbeiten

Die mit einem Befehl kopierten Textteile werden in einen Zwischenpuffer (engl. deletion buffer (sic!)) kopiert.

Sie können mit den Einfügebefehlen an beliebiger Stelle wieder eingefügt werden.

Der Cursor wird durch den Kopierbefehl auf das am weitesten links stehende Zeichen des kopierten Textteils gesetzt.

#yy Kopieren einer/mehrerer Zeile(n) von der aktuellen Zeile nach unten
#Y Kopieren einer/mehrerer Zeile(n) von der aktuellen Zeile nach unten
y$ Kopieren bis zum Zeilenende
y^ Kopieren bis zum Zeilenanfang
y0 Kopieren bis zum linken Rand
#yw Kopieren eines/mehrerer Worte(s) nach rechts bis zum nächsten Wortanfang
#yb Kopieren eines/mehrerer Worte(s) nach links bis zum vorherigen Wortanfang
#ye Kopieren eines/mehrerer Worte(s) nach rechts bis zum Wortende
#yW Kopieren einer/mehrerer Zeichenkette(n) nach rechts bis zum nächsten Zeichenkettenanfang
#yB Kopieren einer/mehrerer Zeichenkette(n) nach links bis zum vorherigen Zeichenkettenanfang
#yE Kopieren einer/mehrerer Zeichenkette(n) nach rechts bis zum Zeichenkettenende
#y} Kopieren einer/mehrerer Blöcke vom Cursor bis zum Absatzende

Siehe hierzu auch den Abschnitt Arbeiten mit Puffern

Einfügebefehle

Bearbeiten

Wurde der Inhalt des Zwischenpuffers (engl. deletion buffer) durch zeilenorientierte Befehle gefüllt, so wird sein Inhalt in Form ganzer Zeilen eingefügt.

#p Einfügen des Zwischenpuffers nach der Cursorposition (paste)
#P Einfügen des Zwischenpuffers vor der Cursorposition (Paste)

Siehe hierzu auch den Abschnitt Arbeiten mit Puffern.

Suchbefehle

Bearbeiten

Das Suchmuster ist für beide Suchrichtungen das selbe.

Suchmuster kann ein Wort oder ein regulärer Ausdruck sein. Suchmuster sind beschrieben im Abschnitt Suchmuster.

Versatz ist eine Zahl, die angibt, um wie viele Zeilen der Cursor nach der Fundstelle positioniert wird. Versatz kann negativ sein, um den Cursor vor die Fundstelle zu positionieren.

/<Suchmuster>Enter Suche vorwärts nach <Suchmuster>
/<Suchmuster>/VersatzEnter Suche vorwärts nach <Suchmuster>, positioniere Cursor um mit Versatz angegebene Zeilen nach der Fundstelle.
/Enter Suche vorwärts nach dem letzten Suchmuster
//VersatzEnter Suche vorwärts nach dem letzten Suchmuster, positioniere Cursor um mit Versatz angegebene Zeilen nach der Fundstelle.
?<Suchmuster>Enter Suche rückwärts nach <Suchmuster>
?<Suchmuster>?VersatzEnter Suche rückwärts nach <Suchmuster>, positioniere Cursor um mit Versatz angegebene Zeilen nach der Fundstelle.
?Enter Suche rückwärts nach dem letzten Suchmuster
??VersatzEnter Suche rückwärts nach dem letzten Suchmuster, positioniere Cursor um mit Versatz angegebene Zeilen nach der Fundstelle.
n Letzte Suche mit / oder ? in gleicher Richtung wiederholen.
N Letzte Suche mit / oder ? in Gegenrichtung wiederholen.

sonstige

Bearbeiten
#J Die aktuelle und die folgende(n) Zeile(n) zu einer zusammenfügen (Join)
#. Den letzten Befehl, der den Text änderte, (mehrfach) wiederholen
u Den letzten Befehl, der den Text änderte, rückgängig machen (undo)
U Alle Änderungen der aktuellen Zeile rückgängig machen (Undo)
#>> (Angegebene Anzahl) Zeile(n) einrücken (siehe auch ex-Befehl set sw=n)
#<< (Angegebene Anzahl) Zeile(n) ausrücken (siehe auch ex-Befehl set sw=n)
ZZ Datei speichern und vi verlassen
ma..zA..Z Die aktuelle Cursorposition mit der Marke a..zA..Z markieren. (mark)
'a..zA..Z Cursor an den Anfang der mit der Marke a..zA..Z versehenen Zeile setzen
`a..zA..Z Cursor auf die mit der Marke a..zA..Z versehene Position setzen
: Einleiten eines Befehls im ex-Modus
Q Dauerhaftes Umschalten in den zeilenorientierten ex-Modus (zurück mit 'vi') (Quit)
~ Wechsel von Groß- zu Kleinbuchstaben und umgekehrt. Die Tilde gilt immer nur für einen Buchstaben. Mit einer Zahl n vorangestellt, können n Buchstaben gleichzeitig umgestellt werden. Die Tildetaste bewegt den Cursor um einen Buchstaben nach rechts. Beispiel: Eimer wird damit zu eIMER.

Befehle des ex-Modus

Bearbeiten

Die Befehle des ex-Modus werden aus dem Kommandomodus heraus mit : eingeleitet. Der : und die ihm folgenden Eingaben werden unten links im Editor dargestellt. Die Befehle des ex-Modus werden mit Enter abgeschlossen, woraufhin vi mit der Ausführung beginnt.

Zeilenangaben für ex-Befehle

Bearbeiten

Die meisten Befehle des ex-Modus folgen der Form

:<Zeilenangabe><Befehl>Enter

<Zeilenangabe> gibt an, auf welche Zeilen <Befehl> wirken soll.

Für <Zeilenangabe> sind folgende Angaben möglich:

# eine Zeilennummer
/<Suchmuster>/ die erste Zeile, die einem Suchmuster entspricht
'a..zA..Z eine (zuvor gesetzte) Marke
$ die letzte Zeile
% alle Zeilen
. die aktuelle Zeile

Die Angaben können durch relative Zeilenangaben ergänzt werden. Geht diesen keine Zeilenangabe voraus, beziehen sich die Angaben auf die Zeile mit der aktuellen Cursorposition.

-# angegebene Anzahl Zeilen vor der angegebenen/aktuellen Zeile. Anstelle der Angabe der Anzahl kann - auch entsprechend oft wiederholt werden: (3- = ---)
+# angegebene Anzahl Zeilen nach der angegebenen/aktuellen Zeile. Anstelle der Angabe der Anzahl kann + auch entsprechend oft wiederholt werden: (2+ = ++)

Die Zeilenangaben können für Bereichsangaben paarweise mit , oder ; zusammengefügt werden. Das angegebene Kommando wird für die angegebenen und die dazwischen liegenden Zeilen ausgeführt. Wenn als zweite Zeilenangabe ein Suchmuster angegeben wurde, wird für die zweite Zeilenangabe bei der Angabe von , ab der aktuellen Cursorposition gesucht, bei ; ab der Stelle der ersten Zeilenangabe.

Beispiele:

:2d

Löscht (d) Zeile Nummer 2 (2)

:1;/^$/d

Löscht (d) von der ersten (1) bis zur darauffolgenden (;) Leerzeile (/^$/) alle Zeilen. (Entfernen der Header einer EMail-Datei)
 
:/<table>/;/<\/table>/d

Löscht (d) von der nächsten Zeile, die <table> enthält bis zur darauffolgenden (;) Zeile mit </table> alle Zeilen.
(Entfernen einer HTML-Tabelle). Der \ maskiert /, damit es nicht als Ende des Suchmusters interpretiert wird.

:/<table>/+1;/<\/table>/-1d

Löscht (d) zwischen (+1, -1) der nächsten Zeile, die <table> enthält und der darauffolgenden (;) Zeile mit </table> alle Zeilen. 
(Entfernen des Inhalts einer HTML-Tabelle). Der \ maskiert /, damit es nicht als Ende des Suchmusters interpretiert wird.

Dateioperationen

Bearbeiten
w Datei speichern (write)
w! Datei speichern erzwingen
wq Datei speichern und vi beenden (write and quit)
x Datei speichern und vi beenden (exit)
wq! Datei speichern erzwingen und vi beenden
q Datei nicht speichern und vi beenden (quit)
q! Datei nicht speichern und vi beenden erzwingen
e <Dateiname> Laden der Datei <Dateiname> zur Bearbeitung. Die bisherige Datei wird verlassen. (edit)
e! <Dateiname> Laden der Datei <Dateiname> zur Bearbeitung erzwingen. Die bisherige Datei wird verlassen.
r <Dateiname> Datei <Dateiname> einlesen und unterhalb der aktuellen Cursorposition einfügen (read)
r! <Kommando> <Kommando> an /bin/sh zur Ausführung übergeben und dessen Ausgabe unterhalb der aktuellen Cursorposition einfügen
sp <Dateiname> Laden der Datei <Dateiname> in geteiltem Fenster (horizontal) (split)
Strg+w v (s) geteiltes Fenster - vertikal (horizontal)
Strg+w w (p) springt zum nächsten (vorherigen) Window

Shelloperationen

Bearbeiten

Die Shell kann im ex-Modus über ! angesprochen werden. Mit dem Befehl :!echo Test wird in einer Shell der Befehl echo Test ausgeführt.

Der Befehl :!! wiederholt das letzte Kommando.

Beispiel: Sie editieren die Datei xinetd.conf und müssen die geänderte Konfigurationsdatei erneut laden. Mit dem Befehl :w speichern sie die Datei und mit :!/usr/sbin/init.d/xinetd reload laden sie die Konfigurationsdatei neu. Bei der nächsten Änderung genügt dann nur noch der Befehl :w für speichern und :!! und der xinetd lädt erneut die geänderte Konfiguration.

Bearbeitungskommandos

Bearbeiten
p Ausgabe der aktuellen/angegebenen Zeile. (paste)
d <Puffer> Löschen und Kopieren in einen Puffer. (delete)
m<Zeilenangabe> Verschieben hinter die angegebene Zeile. (move)
co<Zeilenangabe> Kopieren hinter die angegebene Zeile. (copy)
t<Zeilenangabe> Wie co
ya <Puffer> Aktuelle / angegebene Zeile(n) in einen Puffer kopieren.
y <Puffer> Wie ya
pu <Puffer> Pufferinhalt hinter der angegebenen / aktuellen Zeile einfügen.
s/<Suchmuster>/<Ersetzung>/<Flags> Suchen und Ersetzen in den angegebenen / der aktuellen Zeile(n).
%s/<Suchmuster>/<Ersetzung>/<Flags> Suchen und Ersetzen in den angegebenen / der aktuellen Datei.
g<Bearbeitungskommando> Globales Ausführen eines Kommandos auf den angegebenen / der aktuellen Zeile(n).
@<Puffer> Ausführen des Pufferinhalts als ex-Befehl.

Einstellungen

Bearbeiten
se ai Einrückung von vorheriger Zeile übernehmen. (set autoindent)
se nu Zeilennummern anzeigen. (set numbers)
se no<Einstellung> Einstellung wieder ausschalten.
syntax [on|off] Syntaxhervorhebung aktivieren oder deaktivieren
se sw=n Einrückung (shift width) auf die Anzahl der Zeichen (n) einstellen (beeinflusst die vi-Befehle '<<' und '>>')

Arbeiten mit Puffern

Bearbeiten

vi hat 27 Puffer, die als Zwischenablagen genutzt werden können. Diese sind der Löschpuffer und die Puffer a-z.

Die Puffer werden durch Lösch- und Pufferkopierkommandos gefüllt.

Wenn kein Puffer explizit angegeben ist, wirken die Befehle auf den Löschpuffer. Beim Beschreiben eines Puffers geht sein vorheriger Inhalt verloren.

Werden die Puffer dagegen mit Großbuchstaben (A-Z) angesprochen, wird der kopierte oder gelöschte Text an den bisherigen Pufferinhalt angehängt.

Wird der Puffer von einem Einfügebefehl angesprochen, ist Groß-/Kleinschreibung unerheblich.

Puffer im Befehlsmodus

Bearbeiten

Im Befehlsmodus wird ein Puffer angegeben, indem dem Befehl "<Puffername> vorangestellt wird.

Im Befehlsmodus werden Puffer von folgenden Kommandos gefüllt: d, D, y, Y, c, C, s, S, x, X.

Im Befehlsmodus werden Puffer von folgenden Kommandos ausgelesen: p, P.

Puffer im ex-Modus

Bearbeiten

Im ex-Modus wird ein Puffer angegeben, indem dem Befehl ein Leerzeichen und <Puffername> nachgestellt wird.

Im ex-Modus werden Puffer von folgenden Kommandos gefüllt: d, y.

Im Befehlsmodus werden Puffer von folgendem Kommando ausgelesen: pu.

Eine besondere Funktion stellt das Ausführen eines Pufferinhalts als ex-Befehl dar: @<Puffername>. Sie ermöglicht das komfortable Erstellen eines komplexen ex-Befehls in einer Textzeile und dessen anschließende Ausführung. Die Angabe eines Puffernamens ist zwingend, der Löschpuffer kann nicht verwendet werden.

Suchen und Ersetzen

Bearbeiten

Bei der Angabe eines Suchmusters für die Befehle /, ?, :g, :s stehen einige Zeichen -- oder Zeichenfolgen -- nicht für sich selbst, sondern für eine bestimmte Funktion. Diese Zeichen heißen Metazeichen. Die mit Hilfe von Metazeichen gebildeten Suchmuster heißen Reguläre Ausdrücke. Um die besonderen Funktionen dieser Zeichen auszuschalten, sie zu "entwerten", wird ihnen ein \ voran gestellt, d.h.: ein Zeichen mit Sonderfunktion wird durch Voranstellen eines \ zu einem "normalen Zeichen".

Suchmuster

Bearbeiten
^ Der Anfang einer Zeile. Wenn ^ selbst gemeint ist, schreibt man \^.
$ Das Ende einer Zeile. Wenn $ selbst gemeint ist, schreibt man \$.
\< Der Anfang eines Wortes.
\> Das Ende eines Wortes.
. Der Punkt steht für ein beliebiges einzelnes Zeichen. Wenn . selbst gemeint ist, schreibt man \..
[<Zeichen>] der Ausdruck steht für ein beliebiges der zwischen den Klammern angegeben Zeichen. Wenn [ oder ] selbst gemeint sind, schreibt man \[ bzw. \].
[^<Zeichen>] der Ausdruck steht für ein beliebiges Zeichen, solange es keines der zwischen den Klammern angegeben ist.
<Zeichen>-<Zeichen> gibt innerhalb von [] einen Bereich von Zeichen an. So kann z.B. abcdefghijklmnopqrstuvwxyz als a-z abgekürzt werden. Wenn - innerhalb von [] gemeint ist, stellt man - als erstes oder letztes Zeichen zwischen die Klammern.
\(<Zeichenkette>\) Zwischenspeicherung der Zeichenkette zwischen \( und \). Es können bis zu 9 Klammern verwendet werden. Die gespeicherten Zeichenketten können später im Muster oder beim Ersetzen wiederverwendet werden. Beim Ersetzen wird die erste Zeichenkette mit \1, die neunte mit \9 referenziert.
\<Ziffer 1-9> Einsetzen der von dem Klammernpaar mit der entsprechenden Nummer erfassten Zeichenkette.
* Die beliebige (auch null-malige) Wiederholung des vorangegangenen Zeichens oder []-Ausdrucks. Wenn * selbst gemeint ist, schreibt man \*.
\ Verleiht oder entfernt die besondere Bedeutung der oben angegebenen Metazeichen. Wenn \ selbst gemeint ist, schreibt man \\.

Ersetzen

Bearbeiten
\<Ziffer 1-9> Einsetzen der von dem Klammernpaar mit der entsprechenden Nummer erfassten Zeichenkette.
\0 Einsetzen der vom Suchmuster erfassten Zeichenkette.
& Einsetzen der vom Suchmuster erfassten Zeichenkette. Wenn & selbst eingesetzt werden soll, schreibt man \&.