Unter Unix und unixoiden Betriebssystemen, zu denen auch Linux gehört, ist es oftmals nötig Textdateien zu editieren denn die Konfigurationsdateien z.B. sind, im Gegensatz zu Windows, meistens einfache Textdateien im ASCII-Format. Daher gibt es unter diesen Betriebssystemen einen ganzen Zoo an Editoren. Einer der meist genutzten Editoren ist vi bzw. seine Erweiterung vim. Der Grund ist das vi ein Editor für die Konsole ist und damit auch zu gebrauchen ist wenn die grafische Oberfläche nicht starten will aber auch seine sehr mächtigen Werkzeuge. Ein weiterer Grund ist, dass vi auf jedem POSIX-System installiert ist was in Rettungssituationen einfach notwendig ist den Editor bedienen zu können.
vi ist ein recht alter Editor der entwickelt wurde bevor es grafische Oberflächen gab und kann daher komplett mit der Tastatur bedient werden. Für Neulinge ist etwas ungewohnt, dass vi verschiedene Modi kennt. Auf vielen Linux-Distributionen ist vi ein symbolischer Link auf vim, also den verbesserten vi-Editor (vim steht für vi-improved), und es wird daher beim Aufruf von vi in Wirklichkeit vim gestartet.
Wenn man eine Textdatei mit vi öffnet ist man nicht, wie man zunächst erwarten würde, in einem Editiermodus sondern im Normalmodus. Hier kann man zwar den Cursor bewegen aber keinen Text eingeben oder verändern.
Ist man in einem andern Modus so kommt man durch Drücken der Taste ESC immer wieder in den Befehlsmodus. Durch Drücken der Taste i wird nun in den Bearbeitungsmodus gewechselt. Den Cursor kann man in beiden Modi bewegen. Zwar geht das Bewegen des Cursors auch mit Buchstabentasten aber es ist empfehlenswert dafür die Cursortasten (Pfeiltasten) zu benutzen. Unten rechts wird in beiden Modi die aktuelle Zeilennummer und die Spaltennummer, durch ein Komma getrennt, und zusätzlich Informationen über die Position im Text (Beginn, Ende oder eine Prozentangabe) angezeigt.
Durch Drücken der Taste i kommt man in den Eingabemodus. Nun kann man den Text editieren.
Die Stärke von vi/vim liegt darin, dass der Editor unglaublich mächtig ist und die Schwäche darin, dass er dadurch auch recht kompliziert und nicht intuitiv zu bedienen ist. Mit dem Eingabemodus kommt man normalerweise schon schnell klar da er sich in den Grundzügen wenig von einem GUI-Editor unterscheidet. Man erreicht vor allem mit vim da einen ähnliche Komfort wie bei Kate oder ähnlichen GUI-Editoren. Ganz im Gegensatz zum Befehlsmodus bei dem es mehr oder minder kryptische Befehle gibt.
Die wichtigsten Befehle werden nun hier in dieser Kommandoreferenz vorgestellt. Es gibt eine durchaus vollständigere Befehlsreferenzen für vi/vim aber diese hier sollte ein komfortables Arbeiten damit zulassen.
vi starten und beenden, Datei öffnen, speichern und schließen
Kommando | Funktion |
---|---|
vi /pfad/zur/datei | Öffnen einer Datei mit vi |
:q | Beendet vi mit der Datei ohne abzuspeichern |
:q! | Beendet vi mit der Datei und erzwingt das diese auch mit Veränderung nicht abgespeichert wird |
:w | Veranlasst, dass die Datei abgespeichert wird |
:wq | Beendet vi und veranlasst, dass die Datei abgespeichert wird |
:wq! | Beendet vi und erzwingt das Abspeichern einer Datei |
CTRL-z | Schickt vi mit der geöffneten Datei in den Hintergrund und öffnet eine Shell – Rückkehr erfolgt mit dem Shellbefehl fg |
Wie man eine Datei abspeichern kann obwohl man nicht die korrekten Benutzerrechte hat habe ich hier erläutert.
Der nächste Block beschreibt die Bewegungen des Cursors mittels der Tastatur. Natürlich geht heute mit dem Cursorblock bzw. Pfeiltasten einfacher aber vi stammt aus einer Zeit da diese Tasten noch nicht zur Standard bei einer Tastatur war und die Verbindung zu einem *NIX-Rechner über ein dummes Terminal erfolgte.
Cursorbewegungen und Positionierung
Kommando | Funktion |
---|---|
G, Zahl und G | G verschiebt den Cursor ans Ende der Datei und Zahl+G in die Zeilennummer Zahl |
0 oder ^ | Versetzt den Cursor an den Zeilenanfang |
$ | Versetzt den Cursor ans Zeilenende |
w | Versetzt den Cursor an den Anfang des nächsten Wortes |
b | Versetzt den Cursor an das Ende des nächsten Wortes |
h oder Pfeiltaste links | Versetzt den Cursor einen Buchstaben nach links |
j oder Pfeiltaste unten | Versetzt den Cursor eine Zeile nach unten |
k oder Pfeiltaste oben | Versetzt den Cursor eine Zeile nach oben |
l oder Pfeiltaste rechts | Versetzt den Cursor einen Buchstaben nach rechts |
STRG-u | Eine halbe Seite nach oben versetzen |
STRG-d | Eine halbe Seite nach unten versetzen |
Löschen und ändern
Kommando | Funktion |
---|---|
x oder entf. | Zeichen unter dem Cursor löschen |
s | Zeichen unter dem Cursor löschen und in den Bearbeitungsmodus gehen |
r | Zeichen unter dem Cursor ersetzen |
Zahl dd | Aktuelle Zeile löschen oder durch Zahl bestimmte Anzahl von Zeilen löschen |
Arbeiten mit der Zwischenablage
Kommando | Funktion |
---|---|
Y oder Zahl Y | Kopiert die aktuelle Zeile oder durch Zahl angegebene Anzahl Zeilen in die Zwischenablage |
yw oder Zahl yw | Kopiert das aktuelle Wort oder durch Zahl angegebenen Anzahl an Wörtern in die Zwischenablage |
p | Inhalt der Zwischenablage wird hinter die aktueller Zeile einfügen |
P | Inhalt der Zwischenablage wird vor die aktueller Zeile einfügen |
i | In Eingabemodus wechseln |
R | In Eingabemodus und Überschreiben wechseln |
A | Ans Ende der Zeile springen und in den Eingabemodus wechseln |
I | An den Anfang der Zeile springen und in den Bearbeitungsmodus wechseln |
Suchen und Ersetzen
Suchen und Ersetzen sind in einem Texteditor eine elementare Funktion und vi bietet natürlich auch diese Möglichkeit. Anders ist es mühsam z.B. in Konfigurationsdateien bestimmte Zeichenketten zu finden.
Kommando | Funktion |
---|---|
/Text | Ab der aktuellen Position die Zeichenkette Text abwärts suchen und zum ersten Auftreten springen |
?Text | Ab der aktuellen Position die Zeichenkette Text aufwärts suchen und zum ersten Auftreten springen |
n | Suche wiederholen – sowohl aufwärts als auch abwärts |
:%s/Text1/Text2/g | In der kompletten Textdatei Text1 durch Text2 ersetzen |
:Zahl1,Zahl2s/Text1/Text2/g | Von Zeile Zahl1 bis zur Zeile2 die Zeichenkette Text1 durch Zeichenkette Text2 ersetzen |
Rückgänig machen
Kommando | Funktion |
---|---|
u | Letzte Änderung rückgängig machen |
U | Letzte Änderung in der aktuellen Zeile rückgängig machen |