Der Editor vi
vi ist der traditionelle Editor für Unix. Die originale Version von Bill Joy war ursprünglich nicht frei verfügbar, so das dieser Editor mittlerweile eine Reihe von Klonen mit etliche Erweiterungen existieren, z. B. Vim, nvi, elvis. Unter Linux ist vi normalerweise ein Link zu einem dieser Programme.

Innerhalb von vi lassen sich mächtige Editier-Funktionen durch die Eingabe von einem Doppelpunkt (:), gefolgt von einem ex-Befehl ausführen.
Dieser Artikel behandelt im wesentlichen den Editor vim ich werde auf auf folgende Themen eingehen:
Arbeiten mit vi/vim
Nach dem Öffnen und Laden einer Datei befindest du dich im Befehlsmodus. Hier kannst du folgende Aktionen ausführen:
- In den Eingabemodus wechseln
- Editierbefehle eingeben
- Den Cursor-Bewegen
- Datei Speichern
- Den Editor verlassen
Einfügemodus
Im Einfügemodus kannst du einen Text eingeben. Durch Drücken der ESC-Taste oder der Tastenkombination CTRL-[ verlässt du den Eingabemodus und kehrst zum Befehlsmodus zurück. Folgende Befehle aktiviert den Eingabemodus automatisch:
a | Hinter dem Cursor anhängen. |
A | Am Ende der Zeile anhängen. |
c | Textersetzung starten |
C | Text vom Cursor bis zum Zeilenende ersetzen (Zeile wird gelöscht und geht in den Einfügemodus) |
i | Vor dem Cursor einfügen. |
I | Am Zeilenanfang einfügen. |
o | Eine neue Zeile unter der aktuellen einfügen. |
O | Eine neue Zeile über der aktuellen einfügen. |
R | Textüberschreibung starten. |
s | Ein Zeichen ersetzen. |
S | Eine Zeile ersetzen. |
vi-Befehle
In vi haben Befehle folgende Syntax:
[n] Operator [m] Objekt, dies bedeutet:
n und m geben an, wie oft und auf wie viele Objekte eine Operation ausgeführt werden soll. Wenn n oder m nicht angegeben wird, dann wird standardmäßig von 1 ausgegangen. Ein Objekt kann folgende Textblöcke sein:
Wort | Alle Zeichen bis zu einem Leer- oder Satzzeichen. |
Satz | Alle Zeichen bis ein Satzzeichen erreicht wird (.,!?), gefolgt von zwei Leerzeichen. |
Absatz | Alle Zeichen bis zur nächsten Absatzmakro (para= Option) |
Abschnitt | Alle Zeichen bis zur nächsten Abschnittsüberschrift (sec= Option) |
Hier ein paar Beispiele:
d} | Alles bis zum nächsten Absatzanfang löschen. |
y]] | Alles bis zum nächsten Abschnittsbeginn Kopieren. |
2cw | Die beiden nächsten Wörter ersetzten. |
d^ | Alles zurück bis zum Zeilenanfang löschen. |
5yy | Die Nächten fünf Zeilen Kopieren. |
Befehle auf der Statuszeile
Die meisten Befehle werden nicht auf dem Bildschirm angezeigt. Bei folgenden Befehlen erscheint die Eingabe auf der Statuszeile (letzte Zeile des Bildschirms).
/ | Vorwärts Suche. |
? | Rückwärts Suche. |
: | ex Befehl ausführen. |
! | Ausgabe eines Befehls direkt einfügen. |
Cursor Bewegen
Eine Zahl vor dem Befehl wiederholt den jeweiligen Befehl. Die Befehle zur Cursor-Bewegung sind gleichzeitig Objekte für Ersetzen, Löschen, Kopieren.
h,j,k,l | nach links, nach unten, nach oben, nach rechts. Geht auch mit den Pfeiltasten. |
Leertaste | nach rechts |
Backspace | nach links (löscht ein Zeichen) |
Ctrl-H | nach links (löscht ein Zeichen) |
w, b | wortweise vorwärts/rückwärts (Satzzeichen als Trenner) |
W, B | wortweise vorwärts/rückwärts (nur Leerzeichen als Trenner) |
e | zum Wortende (Satzzeichen als Trenner) |
E | zum Wortende (nur Leerzeichen als Trenner) |
), ( | zum Anfang der nächsten bzw. aktuellen Satzes |
}, { | zum Anfang der nächsten bzw. aktuellen Absatzes |
]], [[ | zum Anfang des nächsten bzw. aktuellen Abschnitts |
Ctrl-D | zum vorherigen Tabulatorstop |
Ctrl-T | zum nächsten Tabulatorstop |
Ctrl-W | ein Wort zurück |
0,$ | erstes bzw. letztes Zeichen des aktuellen Satzes |
^,_ | erstes nicht-leeres Zeichen der aktuellen Zeile |
+,- | erstes Zeichen der nächsten bzw. vorhergehenden Zeile |
Return/Enter | erstes nicht-leeres Zeichen der nächsten Zeile |
n| | Spalte n der aktuellen Zeile |
H | erste Bildschirmzeile |
M | mittlere Bildschirmzeile |
L | letzte Bildschirmzeile |
nH | n Zeilen unter der obersten Bildschirmzeile |
nL | n Zeilen über der letzten Bildschirmzeile |
Ctrl-J | eine Zeile nach unten |
Ctrl-M | erstes nicht-leeres Zeichen der nächsten Zeile |
Ctrl-F, Ctrl-B | Einen Bildschirm vorwärts, rückwärts blättern. |
Ctrl-D, Ctrl-U | Einen halben Bildschirm vorwärts, rückwärts blättern. |
Ctrl-E, Ctrl-Y | Eine weitere Zeile am Bildschirmende bzw. Anfang zeigen. |
z Return | Aktuelle Zeile an Bildschirmanfang blättern. |
z . | Aktuelle Zeile in Bildschirmmitte blättern. |
z _ | Aktuelle Zeile an Bildschirmende blättern. |
Ctrl-L, Ctrl-R | Bildschirm neu aufbauen (ohne zu blättern) |
/Muster | vorwärts Suche |
/ | vorwärts Suche wiederholen |
/Muster/+n | Sprung zu n-ten Zeile nach Muster |
?Muster | rückwärts Suche nach Muster |
? | rückwärts Suche wiederholen |
n | Letzte Suche wiederholen |
N | Letzte Suche in umgekehrter Richtung wiederholen |
% | Suche den passenden runden, Eckigen oder geschweiften Klammer |
fx | Cursor auf das nächste x der aktuellen Zeile positionieren |
Fx | Cursor auf das vorherige x der aktuellen Zeile positionieren |
tx | Cursor ein Zeichen vor dem nächsten x der aktuellen Zeile positionieren |
Tx | Cursor ein Zeichen nach dem vorherigen x der aktuellen Zeile positionieren |
, | Richtung der letzten Suche mit f, F, t oder T umdrehen. |
: | Letzte Zeichensuche (f, F, t oder T) wiederholen |
Ctrl-G | Aktuellen Dateinamen und aktuelle Zeilennummer anzeigen. |
nG | Sprung zur Zeile n |
G | Sprung zur letzten Zeile der Datei |
:n | Sprung zur Zeile n |
Editierbefehle
a | Hinter dem Cursor anhängen. |
A | Am Ende der Zeile anhängen. |
i | Vor dem Cursor einfügen. |
I | Am Zeilenende einfügen. |
o | Eine neue Zeile unter der aktuellen einfügen. |
O | eine neue Zeile oberhalb der aktuellen einfügen. |
ESC, Ctrl-[ | Einfügemodus beenden. |
Tab | Tabulatorzeichen einfügen. |
Backspace | Links stehendes Zeichen löschen (im Einfügemodus) |
Ctrl-I | Tabulatorzeichen einfügen. |
Ctrl-U | Aktuelle Zeile löschen. |
Ctrl-V | Nächstes Zeichen uninterpretiert einfügen. |
cw | Text von der aktuellen Position bis zum Ende des aktuellen Wortes ändern. |
cc | Zeile ändern. |
c$ | Text von der aktuellen Position bis zum Ende der Zeile ändern. |
C | selbe wie c$ |
dd | Zeile löschen. |
d$ | Rest der Zeile löschen. |
D | selbe wie d$ |
ndd | n Zeichen löschen. |
dw | Wort löschen. |
d} | Bis zum nächsten Absatz löschen. |
d^ | Bis zum Zeilenanfang rückwärts löschen. |
d/Muster | Bis zum ersten Vorkommen von Muster löschen. |
dn | Bis zum nächsten Vorkommen löschen. |
dfa | Alles auf der aktuellen Zeile bis zum nächsten a löschen (a wird auch gelöscht) |
dta | Alles auf der aktuellen Zeile bis zum nächsten a löschen (a wird nicht gelöscht) |
dL | Bis zum Bildschirmende löschen. |
dG | Bis zum Dateiende löschen. |
p | Zuletzt gelöschten Text hinter dem Cursor einfügen. |
P | Zuletzt gelöschten Text vor dem Cursor einfügen. |
rx | Zeichen durch x ersetzten. |
RText | Text ab der Cursor Position ersetzten. |
s | Zeichen ersetzen. |
ns | n Zeichen ersetzen. |
S | Ganze Zeile ersetzen. |
u | Letzte Änderung rückgängig machen (Undo) |
U | Aktuelle Zeile wiederherstellen. |
x | Zeichen unter dem Cursor löschen. |
X | Ein Zeichen nach links löschen. |
nX | n Zeichen nach links löschen. |
. (Punkt) | Letzte Änderungen wiederholen. |
~ | Groß/Kleinschreibung umkehren. |
& | Letzte Ersetzung wiederholen. |
Y | Zeile Kopieren. |
yy | wie Y. |
"xyy | Zeile in Buffer x kopieren. |
ye | bis zum Wortende kopieren. |
yw | wie ye. |
y$ | Rest der Zeile kopieren. |
"xdd | Zeile löschen und in Buffer x kopieren. |
"xp | Inhalt von Buffer x einfügen. |
J | Zeile mit der folgenden zusammenfügen. |
:j! | wie J. |
Speichern und Beenden
Mit Speichern ist gemeint, die Änderungen in eine Datei sichern und den Zeitstempel dieser Datei zu aktualisieren.
ZZ | Editor beenden und nur Speichern wenn Änderungen vorgenommen wurden. |
:x | wie ZZ. |
:w | Speichern. |
:wq | Speichern und Beenden. |
:w Datei | Datei unter einen anderen Namen Speichern (Kopie). |
:n1,n2 w Datei | Zeilen n1 bis n2 in einer neuen Datei Speichern. |
n1,n2 w >> Datei | Zeilen n1 bis n2 in einer Datei anhängen. |
:w! | Abspeichern, dabei Schreibschutz wenn möglich nicht beachten. |
:w! Datei | Datei überschreiben. |
:w %.neu | Buffer x als x.neu speichern. |
:q | Beenden, wenn Änderungen vorhanden sind müssen diese zuvor gesichert werden. |
:q! | Beenden und Änderungen verwerfen. |
Q | vi beenden und ex aufrufen. |
:vi | Rückkehr zu vi nach einem Q-Befehl. |
Arbeiten mit mehreren Dateien
:e Datei | Andere Datei zum bearbeiten öffnen. Die aktuelle Datei wird zur alternativen Datei. |
:e! | Letzte gespeicherte Version der aktuellen Datei wieder öffnen. |
:e+ Datei | Editieren von Datei an dessen Ende beginnen. |
:e+ n Datei | Editieren von Datei auf Zeile n beginnen. |
:e# | Zur vorherigen Position in der alternativen Datei springen. |
:ta Markierung | Datei an der Stelle Markierung editieren. |
:n | Nächste Datei editieren. |
:n! | Nächste Datei editieren, dabei Änderungen der aktuellen Datei verwerfen. |
:n Dateien | Neue Liste von Dateinamen angeben. |
:args | Liste der zu editierenden Dateien anzeigen. |
:rew | In der Liste der zu editierenden Dateien nach oben springen. |
Zusammenfassung
Du siehst, der Editor vi ist sehr mächtig und dieser Artikel hat bei weitem noch nicht alles beschrieben was mit dem vi alles angestellt werden kann. Aus dem Editor ist es möglich Befehle abzusetzen, Stichwort "Shell-Integration". Der Editor kann über viele Plug-Ins erweitert werden, was dem Editor ungeahnte Kräfte freisetzt. Z. B. ist es für zahlreiche Programmiersprachen möglich die Syntax Prüfen zu lassen, so werden Fehler viel früher erkannt oder passieren erst gar nicht. Automatisches einrücken um guten Code zu schreiben. Da die Konfiguration vom vi nicht immer einfach ist, kann ich dir empfehlen eine vorgefertigte Konfiguration wie z. B. https://github.com/kepbod/ivim zu verwenden. Probiert es einfach mal aus, du wirst sehen deine Arbeitsweise wird sich um einiges verbessern. Zugegeben, die Lernkurve bei diesem Editor ist sehr hoch, aber hast du diese erst einmal überstanden, erleichtert er dir dein tägliches Arbeiten enorm.
Es liegt also jetzt an dir.
Noch keine Kommentare