In diesem Kapitel, werden wir verstehen, wie der vi-Editor unter Unix funktioniert. Es gibt viele Möglichkeiten, Dateien unter Unix zu bearbeiten. Das Bearbeiten von Dateien mit dem bildschirmorientierten Texteditor vi ist eine der besten Möglichkeiten. Dieser Editor ermöglicht es Ihnen, Zeilen im Kontext mit anderen Zeilen in der Datei zu bearbeiten.
Eine verbesserte Version des vi-Editors, die VIM genannt wird, ist inzwischen ebenfalls verfügbar. VIM steht dabei für Vi IMproved.
vi gilt allgemein als der De-facto-Standard unter den Unix-Editoren, weil –
-
er in der Regel auf allen Flavors von Unix-Systemen verfügbar ist.
-
seine Implementierungen sind durchweg sehr ähnlich.
-
Er benötigt nur sehr wenige Ressourcen.
-
Er ist benutzerfreundlicher als andere Editoren wie der ed oder der ex.
Sie können den vi-Editor verwenden, um eine bestehende Datei zu bearbeiten oder eine neue Datei von Grund auf zu erstellen. Sie können diesen Editor auch verwenden, um eine Textdatei einfach nur zu lesen.
Starten des vi-Editors
Die folgende Tabelle listet die grundlegenden Befehle zur Verwendung des vi-Editors auf –
Sr.Nr. | Befehl &Beschreibung |
---|---|
1 |
vi Dateiname Erzeugt eine neue Datei, wenn sie noch nicht existiert, ansonsten öffnet eine bestehende Datei. |
2 |
vi -R Dateiname Öffnet eine vorhandene Datei im Nur-Lese-Modus. |
3 |
Ansicht Dateiname Öffnet eine vorhandene Datei im Nur-Lese-Modus. |
Nachfolgend ein Beispiel, um eine neue Datei testfile anzulegen, wenn sie im aktuellen Arbeitsverzeichnis noch nicht existiert –
$vi testfile
Der obige Befehl erzeugt die folgende Ausgabe –
|~~~~~~~~~~~~"testfile"
Sie werden eine Tilde (~) in jeder Zeile nach dem Cursor sehen. Eine Tilde steht für eine unbenutzte Zeile. Wenn eine Zeile nicht mit einer Tilde beginnt und leer zu sein scheint, ist ein Leerzeichen, ein Tabulator, ein Zeilenumbruch oder ein anderes nicht sichtbares Zeichen vorhanden.
Sie haben jetzt eine offene Datei, mit der Sie arbeiten können.
Bedienungsmodi
Während der Arbeit mit dem vi-Editor stößt man normalerweise auf die folgenden zwei Modi –
-
Befehlsmodus – In diesem Modus können Sie administrative Aufgaben wie das Speichern von Dateien, das Ausführen von Befehlen, das Bewegen des Cursors, das Ausschneiden (Yanking) und Einfügen von Zeilen oder Wörtern sowie das Suchen und Ersetzen durchführen. In diesem Modus wird alles, was Sie eingeben, als Befehl interpretiert.
-
Einfügemodus – In diesem Modus können Sie Text in die Datei einfügen. Alles, was in diesem Modus getippt wird, wird als Eingabe interpretiert und in der Datei platziert.
vi startet immer im Befehlsmodus. Um Text einzugeben, müssen Sie sich im Einfügemodus befinden, für den Sie einfach i eingeben. Um aus dem Einfügemodus herauszukommen, drücken Sie die Esc-Taste, die Sie zurück in den Befehlsmodus bringt.
Tipp – Wenn Sie sich nicht sicher sind, in welchem Modus Sie sich befinden, drücken Sie zweimal die Esc-Taste; das bringt Sie in den Befehlsmodus. Sie öffnen eine Datei mit dem vi-Editor. Geben Sie zunächst einige Zeichen ein und kommen Sie dann in den Befehlsmodus, um den Unterschied zu verstehen.
Ausstieg aus vi
Der Befehl zum Ausstieg aus vi lautet :q. Sobald Sie im Befehlsmodus sind, geben Sie einen Doppelpunkt und ‚q‘ ein, gefolgt von Return. Wenn Ihre Datei in irgendeiner Weise verändert wurde, wird der Editor Sie darauf hinweisen und Sie nicht beenden lassen. Um diese Meldung zu ignorieren, lautet der Befehl zum Verlassen von vi ohne zu speichern :q! Damit können Sie vi verlassen, ohne die Änderungen zu speichern.
Der Befehl zum Speichern des Inhalts des Editors lautet :w. Sie können den obigen Befehl mit dem quit-Befehl kombinieren oder :wq und return verwenden.
Der einfachste Weg, Ihre Änderungen zu speichern und vi zu verlassen, ist der Befehl ZZ. Wenn Sie sich im Befehlsmodus befinden, geben Sie ZZ ein. Der ZZ-Befehl funktioniert auf die gleiche Weise wie der :wq-Befehl.
Wenn Sie einen bestimmten Namen für die Datei angeben möchten, können Sie dies tun, indem Sie ihn nach dem :w angeben. Wenn Sie zum Beispiel die Datei, an der Sie gerade arbeiten, unter einem anderen Dateinamen namens Dateiname2 speichern möchten, würden Sie :w Dateiname2 eingeben und zurückgehen.
Bewegen innerhalb einer Datei
Um sich innerhalb einer Datei zu bewegen, ohne Ihren Text zu beeinflussen, müssen Sie sich im Befehlsmodus befinden (drücken Sie zweimal Esc). In der folgenden Tabelle finden Sie einige Befehle, mit denen Sie sich zeichenweise bewegen können –
Sr.Nr. | Befehl &Beschreibung | |
---|---|---|
1 |
k Verschiebt den Cursor nach oben eine Zeile nach oben |
|
2 |
j Bewegt den Cursor eine Zeile nach unten |
|
3 |
h Bewegt Bewegt den Cursor um ein Zeichen nach links |
|
4 |
l Bewegt den Cursor um ein Zeichen nach rechts Position |
Für das Bewegen innerhalb einer Datei müssen folgende Punkte beachtet werden –
-
vi ist case-sensitiv. Sie müssen bei den Befehlen auf Groß- und Kleinschreibung achten.
-
Den meisten Befehlen in vi kann man die Anzahl der gewünschten Aktionen voranstellen. Zum Beispiel bewegt 2j den Cursor zwei Zeilen nach unten.
Es gibt viele andere Möglichkeiten, sich in vi innerhalb einer Datei zu bewegen. Denken Sie daran, dass Sie sich im Befehlsmodus befinden müssen (zweimal Esc drücken). In der folgenden Tabelle sind einige Befehle aufgeführt, mit denen Sie sich in der Datei bewegen können.
Nachfolgend finden Sie eine Liste der Befehle, mit denen Sie sich in der Datei bewegen können.
Sr.Nr. | Befehl & Beschreibung | |
---|---|---|
1 |
0 oder ‖ Positioniert den Cursor an den Anfang einer Zeile |
2 |
Positioniert den Cursor an das Ende einer Zeile |
3 |
w Positioniert den Cursor auf das nächste Wort |
|
4 |
b Positioniert den Cursor auf das vorherige Wort |
|
5 |
( Positioniert den Cursor an den Anfang des aktuellen Satzes |
|
6 |
) Positioniert den Cursor an den Anfang des nächsten Satzes |
|
E Setzt den Cursor an das Ende des von Leerzeichen begrenzten Wortes |
||
8 |
{ Verschiebt einen Absatz zurück |
|
9 |
} Verschiebt einen Absatz vorwärts |
|
10 |
] Verschiebt einen Abschnitt vorwärts |
12 |
n| Verschiebt zur Spalte n in der aktuellen Zeile |
13 |
1G Bewegt sich zur ersten Zeile der Datei |
|
14 |
G Bewegt sich in die letzte Zeile der Datei |
|
15 |
nG Springt in die n-te Zeile der Datei |
16 |
:n Zieht in die n-te Zeile der Datei |
17 |
fc Zieht vorwärts nach c |
|
18 |
Fc Zieht zurück zu c |
|
19 |
H Bewegt sich an den oberen Rand des Bildschirms |
|
20 |
nH Bewegt sich zur n-ten Zeile vom oberen Rand des Bildschirms |
|
21 |
M Bewegt sich zur Mitte des Bildschirms |
22 |
L Bewegt sich zum den unteren Rand des Bildschirms |
23 |
nL Bewegt sich zur n-ten Zeile vom unteren Rand des Bildschirms |
|
24 |
😡 Kolon gefolgt von einer Zahl würde den Cursor auf die Zeilennummer positionieren, die durch x repräsentiert wird |
Steuerungsbefehle
Die folgenden Befehle können mit der Steuerungstaste verwendet werden, um die in der folgenden Tabelle angegebenen Funktionen auszuführen –
Nachfolgend ist die Liste der Steuerungsbefehle aufgeführt.
Str.Nr. | Befehl & Beschreibung |
---|---|
1 |
CTRL+d Bewegt sich 1/2 Bildschirm vorwärts |
2 |
CTRL+f Bewegt sich einen ganzen Bildschirm vorwärts |
3 |
CTRL+u Bewegt sich 1/2 Bildschirm rückwärts |
4 |
CTRL+b Bewegt sich einen Vollbildschirm zurück |
5 |
CTRL+e Bewegt den Bildschirm eine Zeile nach oben |
6 |
CTRL+y Verschiebt den Bildschirm eine Zeile nach unten |
7 |
CTRL+u Bewegt den Bildschirm um 1/2 Seite nach oben |
8 |
CTRL+d Verschiebt den Bildschirm um 1/2 Seite nach unten |
9 |
CTRL+b Bewegt den Bildschirm eine Seite nach oben |
10 |
CTRL+f Verschiebt den Bildschirm eine Seite nach unten |
11 |
CTRL+I Zeichnet den Bildschirm neu |
Dateien bearbeiten
Um die Datei zu bearbeiten, müssen Sie sich im Einfügemodus befinden. Es gibt viele Möglichkeiten, aus dem Befehlsmodus in den Einfügemodus zu gelangen –
Sr.Nr. | Befehl & Beschreibung |
---|---|
1 |
i Einfügen von Text vor der aktuellen Cursorposition |
2 |
I Fügt Text am Anfang der aktuellen Zeile ein |
3 |
a Fügt Text nach der aktuellen Cursorposition ein |
4 |
A Fügt Text am Ende der aktuellen Zeile ein |
5 |
o Erzeugt eine neue Zeile zur Texteingabe unterhalb der Cursorposition |
6 |
O Erzeugt eine neue Zeile für die Texteingabe oberhalb der Cursorposition |
Zeichen löschen
Hier ist eine Liste von wichtigen Befehlen, die zum Löschen von Zeichen und Zeilen in einer geöffneten Datei verwendet werden können –
Str.Nr. | Befehl & Beschreibung |
---|---|
1 |
x Löscht das Zeichen unter der Cursorposition |
2 |
X Löscht das Zeichen vor der Cursorposition |
3 |
dw Löscht von der aktuellen Cursorposition bis zum nächsten Wort |
4 |
d^ Löscht von der aktuellen Cursorposition bis zum Zeilenanfang |
5 |
d$ Löscht von der aktuellen Cursorposition bis zum Zeilenende |
6 |
D Löscht von der Cursorposition bis zum Ende der aktuellen Zeile |
7 |
dd Löscht die Zeile, auf der sich der Cursor befindet |
Wie oben erwähnt, kann den meisten Befehlen in vi die Anzahl der Male vorangestellt werden, die die Aktion ausgeführt werden soll. Zum Beispiel löscht 2x zwei Zeichen unter der Cursorposition und 2dd löscht zwei Zeilen, auf denen sich der Cursor befindet.
Es empfiehlt sich, die Befehle zu üben, bevor wir weitergehen.
Änderungsbefehle
Sie haben auch die Möglichkeit, Zeichen, Wörter oder Zeilen in vi zu ändern, ohne sie zu löschen. Hier sind die entsprechenden Befehle –
Str.Nr. | Befehl &Beschreibung |
---|---|
1 |
cc Entfernt den Inhalt der Zeile und lässt Sie im Einfügemodus. |
2 |
cw Wechselt das Wort, auf dem sich der Cursor befindet, vom Cursor zum klein geschriebenen w am Wortende. |
3 |
r Ersetzt das Zeichen unter dem Cursor. vi kehrt nach der Ersetzung in den Befehlsmodus zurück. |
4 |
R Überschreibt mehrere Zeichen beginnend mit dem Zeichen, das sich gerade unter dem Cursor befindet. Sie müssen Esc verwenden, um das Überschreiben zu stoppen. |
5 |
s Ersetzt das aktuelle Zeichen durch das Zeichen, das Sie eingeben. Danach befinden Sie sich im Einfügemodus. |
6 |
S Löscht die Zeile, in der sich der Cursor befindet, und ersetzt sie durch den neuen Text. Nachdem der neue Text eingegeben wurde, bleibt vi im Einfügemodus. |
Kopier- und Einfügebefehle
Mit den folgenden Befehlen können Sie Zeilen oder Wörter von einer Stelle kopieren und dann an einer anderen Stelle einfügen –
Sr.Nr. | Befehl & Beschreibung |
---|---|
1 |
yy Kopiert die aktuelle Zeile. |
2 |
yw Kopiert das aktuelle Wort ab dem Zeichen, auf dem sich der Kleinbuchstaben-W-Cursor befindet, bis zum Ende des Wortes. |
3 |
p Setzt den kopierten Text hinter den Cursor. |
4 |
P Setzt den kopierten Text vor den Cursor. |
Erweiterte Befehle
Es gibt einige erweiterte Befehle, die das tägliche Editieren vereinfachen und eine effizientere Nutzung von vi ermöglichen –
Nachfolgend eine Liste der erweiterten Befehle.
Str.Nr. | Befehl & Beschreibung |
---|---|
1 |
J Verbindet die aktuelle Zeile mit der nächsten. Eine Anzahl von j-Befehlen verbindet viele Zeilen. |
2 |
<< Schiebt die aktuelle Zeile um eine Verschiebebreite nach links. |
3 |
>> Verschiebt die aktuelle Zeile um eine Verschiebebreite nach rechts. |
4 |
~ Schaltet die Großschreibung des Zeichens unter dem Cursor um. |
5 |
^G Drücken Sie die Tasten Strg und G gleichzeitig, um den aktuellen Dateinamen und den Status anzuzeigen. |
6 |
U Setzt die aktuelle Zeile in den Zustand zurück, in dem sie sich befand, bevor der Cursor in die Zeile eintrat. |
7 |
u Damit wird die letzte Änderung in der Datei rückgängig gemacht. Durch erneutes Tippen von ‚u‘ wird die Änderung wieder rückgängig gemacht. |
8 |
J Verbindet die aktuelle Zeile mit der nächsten. Eine Anzahl verbindet so viele Zeilen. |
9 |
:f Zeigt die aktuelle Position in der Datei in % und den Dateinamen, die Gesamtanzahl der Datei an. |
10 |
:f Dateiname Benennt die aktuelle Datei nach Dateiname um. |
11 |
:w Dateiname Schreibt in die Datei Dateiname. |
12 |
:e Dateiname Öffnet eine weitere Datei mit Dateiname. |
13 |
:cd dirname Wechselt das aktuelle Arbeitsverzeichnis zu dirname. |
14 |
:e # Wechselt zwischen zwei geöffneten Dateien. |
15 |
:n Wenn Sie mehrere Dateien mit vi öffnen, verwenden Sie :n, um zur nächsten Datei in der Reihe zu wechseln. |
16 |
:p Wenn Sie mehrere Dateien mit vi öffnen, verwenden Sie :p, um zur vorherigen Datei in der Reihe zu wechseln. |
17 |
:N Wenn Sie mehrere Dateien mit vi öffnen, verwenden Sie :N, um zur vorherigen Datei in der Reihe zu wechseln. |
18 |
:r Datei Liest Datei und fügt sie nach der aktuellen Zeile ein. |
19 |
:nr Datei Liest Datei und fügt sie nach der Zeile n ein. |
Wort- und Zeichensuche
Der vi-Editor hat zwei Arten von Suchen: Zeichenketten- und Zeichensuche. Für eine Zeichenkettensuche werden die Befehle / und ? verwendet. Wenn Sie diese Befehle starten, wird der gerade eingegebene Befehl in der letzten Zeile des Bildschirms angezeigt, in der Sie die zu suchende Zeichenkette eingeben.
Diese beiden Befehle unterscheiden sich nur in der Richtung, in der die Suche stattfindet –
-
Der /-Befehl sucht vorwärts (abwärts) in der Datei.
-
Der Befehl ? sucht rückwärts (aufwärts) in der Datei.
Die Befehle n und N wiederholen den vorherigen Suchbefehl in der gleichen bzw. der entgegengesetzten Richtung. Einige Zeichen haben eine Sonderbedeutung. Diesen Zeichen muss ein umgekehrter Schrägstrich (\) vorangestellt werden, damit sie als Teil des Suchausdrucks berücksichtigt werden.
Str.Nr. | Zeichen &Beschreibung |
---|---|
1 |
^ Sucht am Anfang der Zeile (Verwendung am Anfang eines Suchausdrucks). |
2 |
Sucht nach einem einzelnen Zeichen. |
3 |
* Sucht nach null oder mehr des vorherigen Zeichens. |
4 |
Zeilenende (Verwendung am Ende des Suchausdrucks). |
5 |
[ Beginnt eine Reihe von passenden oder nicht passenden Ausdrücken. |
6 |
< Dieser wird in einen mit dem Backslash escapeten Ausdruck gesetzt, um das Ende oder den Anfang eines Wortes zu finden. |
7 |
> Dies hilft bei der obigen Beschreibung des Zeichens ‚<‚. |
Die Zeichensuche sucht innerhalb einer Zeile nach einem nach dem Befehl eingegebenen Zeichen. Die Befehle f und F suchen nur in der aktuellen Zeile nach einem Zeichen. f sucht vorwärts und F sucht rückwärts und der Cursor springt an die Position des gefundenen Zeichens.
Die Befehle t und T suchen nur nach einem Zeichen in der aktuellen Zeile, aber bei t bewegt sich der Cursor an die Position vor dem Zeichen, und T sucht die Zeile rückwärts bis zur Position nach dem Zeichen.
Set-Befehle
Sie können das Aussehen Ihres vi-Bildschirms mit den folgenden :set-Befehlen ändern. Sobald Sie sich im Befehlsmodus befinden, geben Sie :set gefolgt von einem der folgenden Befehle ein.
Sr.No. | Befehl & Beschreibung | |
---|---|---|
1 |
:set ic Ignoriert die Groß- und Kleinschreibung bei der Suche |
|
2 |
:set ai Setzt den Autoindent |
3 |
:set noai Setzt autoindent |
4 |
:set nu Zeilen mit Zeilennummern auf der linken Seite anzeigen |
|
5 |
:set sw Setzt die Breite eines Software-Tabstopps. Zum Beispiel würden Sie mit diesem Befehl eine Breite von 4 einstellen – :set sw = 4 |
|
6 |
:set ws Wenn wrapscan gesetzt ist und das Wort nicht am Ende der Datei gefunden wird, wird versucht, es am Anfang zu suchen |
|
7 |
:set wm Wenn diese Option einen Wert größer als Null hat, wird der Editor automatisch einen „Wortumbruch“ durchführen. Um zum Beispiel den Umbruch auf zwei Zeichen zu setzen, würden Sie folgendes eingeben: :set wm = 2 |
|
8 |
:set ro Ändert den Dateityp auf „nur lesen“ |
|
9 |
:set term Der Terminaltyp wird gedruckt |
|
10 |
:set bf Verwirft Steuerzeichen aus der Eingabe |
Befehle ausführen
Der vi hat die Möglichkeit, Befehle aus dem Editor heraus auszuführen. Um einen Befehl auszuführen, brauchen Sie nur in den Befehlsmodus zu gehen und :! command einzugeben.
Wenn Sie zum Beispiel prüfen wollen, ob eine Datei existiert, bevor Sie versuchen, Ihre Datei mit diesem Dateinamen zu speichern, können Sie :! ls eingeben und Sie sehen die Ausgabe von ls auf dem Bildschirm.
Sie können eine beliebige Taste (oder die Escape-Sequenz des Befehls) drücken, um zu Ihrer vi-Sitzung zurückzukehren.
Ersetzen von Text
Mit dem Ersetzungsbefehl (:s/) können Sie schnell Wörter oder Wortgruppen in Ihren Dateien ersetzen. Im Folgenden sehen Sie die Syntax zum Ersetzen von Text –
:s/search/replace/g
Das g steht für global. Das Ergebnis dieses Befehls ist, dass alle Vorkommen in der Zeile des Cursors geändert werden.
Wichtige Hinweise
Die folgenden Punkte werden zu Ihrem Erfolg mit vi beitragen –
-
Sie müssen sich im Befehlsmodus befinden, um die Befehle zu verwenden. (Drücken Sie jederzeit zweimal Esc, um sicherzustellen, dass Sie sich im Befehlsmodus befinden.)
-
Sie müssen mit den Befehlen vorsichtig umgehen. Diese unterscheiden Groß- und Kleinschreibung.
-
Sie müssen sich im Einfügemodus befinden, um Text einzugeben.