Lieblingseditor des Autors

SMK Projects  /  Der Editor vi

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.

vi link
Zeigt wohin der Link vi auf einem Debian System-Zeigt.
 

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:

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:

vi Befehle die den Eingabemodus automatisch aktivieren
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.

Zeichen
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)

Text

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
Zeilen
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
Bildschirm
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
Zeilennummerierung
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

Neuen Text einfügen
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.
Text verändern und löschen
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.

vi Speichern und Beenden
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

Bearbeiten von mehrere 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.