Vi/Vim: wer mit Linux arbeitet, öffnet früher oder später ein Konfigurationsfile oder ein Script mit dem mächtigen Texteditor. Während die Lernkurve durchaus spürbar ist, dem Editor jedoch sämtlicher Komfort heutiger GUI Applikationen zu fehlen scheinen, wird oft auf einfachere Tools wie “Nano” ausgewichen.
Dabei ist Vim nicht nur sehr viel mächtiger, er kann bei täglichen Aufgaben den Workflow enorm effizienter machen. Und im Gegensatz zu grafischen Editoren, ist er auf jedem Linux Server, und unter anderem auch in vielen Docker Containern, installiert und aufrufbar.
Vim Befehlsmodus
Basics
Ein paar Basics müssen allerdings beherrscht werden, damit mit vim vernünftig gearbeitet werden kann. Dieser Artikel wendet sich insofern auch an erfahrene Vim Benutzer die bereits den Unterschied zwischen Command Mode” und “Insert Mode” kennen. Wem das nichts sagt, dem sei diese online Suse Linux Dokumentation empfohlen.
Die folgenden Befehle führe ich als Reminder und Aufwärmer auf:
i | In den Insert Modus wechseln und Zeichen in der aktuellen Cursorposition ins Dokument einfügen |
a | Gleich wie i, nur wird das Einfügen um eine Position rechts des Cursors gemacht, also angehängt |
R | Das Zeichen unter dem Cursor wird überschrieben |
r | Sämtliche Zeichen rechts vom Cursor werden ersetzt mit den Eingaben. |
dd | Löscht die gesamte Zeile |
cw | Ersetzt das gesamte Wort |
dw | Das Wort unter dem Cursor löschen |
yy | Zeile ins Memory kopieren |
4yy | Die 4 unter dem Cursor befindlichen Zeilen ins Memory kopieren |
p | Den kopierten Inhalt "pasten" |
$ | Springe ans Ende der Zeile |
^ | Springe an den Beginn der Zeile |
w | Ein Wort nach vorne springen |
:34 | Springe zu Zeile 34 |
u | Undo |
Speichern des Dokuments und Beenden von Vim:
:w | Speichern |
:w [File] | Speichern in ein neues Dokument “dokument2.txt" |
:wq | Speichern und Beenden |
:q! | Beenden ohne zu speichern |
Fortgeschrittene Befehle
:1,$s/Q1/Q2/g | Ersetze im gesamten Dokument das Wort Q1 mit dem Wort Q2, wenn es auf der gleichen Zeile mehrfach vorkommt, ersetze es mehrfach |
:set number :set nonumer | Zeigt die Linienummern am linken Editor-Rand an. Mit “nonumber” wieder ausschalten |
:set cursorline | Zeile wird bei Cursorposition mit einer horizontalen Linie angezeigt |
:syntax on | Syntax-Highlighting wird angezeigt |
:set filetype=python :set filetype=perl | Syntax-Highlighting für die spezifizierte Sprache wird angezeigt. |
:r! which bash | der Shell Befehl nach ! wird ausgeführt und dessen Output ins Dokument eingefügt. Hier: “/bin/bash” |
:edit [File] | Das angegeben File wird geöffnet und editiert |
:help :help [Page] | Öffnen der Help Pages |
:edit $MYVIMRC | Editieren des Vim Konfigurationsfiles ~/.vimrc. Muss vorher angelegt werden! |
Vim Default Einstellung anpassen
Mit der Datei ~/.vimrc kann das Verhalten von Vim individuell und nach eigenen Bedürfnissen angepasst werden. Eine einfache .vimrc könnte so aussehen und via Ansible auf allen Servern verteilt werden:
set paste
syntax on
set tabstop=2
set shiftwidth=2
set expandtab
set laststatus=2
set cursorline
set paste | Inhalt wird per copy paste eingefüllt ohne die Formatierung zu ändern |
syntax on | Syntax Highlighting eingeschaltet |
set tabstop=2 | Breite des Tabulators auf 2 Characters |
set shiftwidth=2 | Bei Indentkorrekturen mit den Tasten <<, >>, == wird der Abstand auf 2 Charaketer gesetzt |
set expandtab | Statt eines Tabulatorzeichens werden Leerzeichen gesetzt |
set laststatus=2 | Setzen der Statusbar |
set cursorline | Anzeigen der Cursorlinie |
Die obigen Anpassungen bewirken dies:

Erweiterte Funktionen
Window Splitting
Bisweilen hätte man gerne das Fenster gesplittet: eine zweite Datei soll bearbeitet werden, oder die gleiche Datei soll an verschiedenen Stellen verglichen werden. Auf einem entfernten Rechner oder in einem Container muss nicht unbedingt eine zweite Session eröffnet werden. Vim kann seine Anzeige splitten:

:vsplit :vsplit [File] | Vertikaler Split des Fensters, ohne Dateiangabe gleiche Datei |
:split :split [File] | Horizontaler Split |
2 x Ctrl + W | Wechseln der Dateien |
:wall | Alle Dateien sichern |
:qall | Alle Dateien schliessen |
:close | Schliessen |
Tabs
Auch Tabs gibt es unter Vim. Ist der Platz begrenzt und müssen mehrere Dateien gleichzeitig bearbeitet werden, bieten sich Tabs an:

:tabedit [File] | Öffnet die Datei in einem neuen Tab |
[Esc] gt | Switch zwischen den Tabs |
vimdiff
Selbst eine Vergleichsfunktion bietet Vim. Mit folgendem Befehl können Dateien verglichen werden:
vimdiff file1 file2

Dabei werden nur die relevanten Zeilen angezeigt, also die von der Differenz betroffene und der Übersicht zuliebe ein paar Zeilen darüber und ein paar darunter.
Terminal
Mit :ter kann auch ein Terminal als split Screen geöffnet werden. Manchmal ganz nett, wenn man mit vim beispielsweise das System dokumentiert.

Fazit
Natürlich bietet Vim noch weit mehr Funktionen. Da wäre zum Beispiel Vim-Script, oder die vielen Plugins die man herunterladen und installieren kann. Ich persönlich nutze Vim aber eigentlich “nur” wenn ich auf Server und Container zugreifen muss. “Nur” in Anführungszeichen, weil das zum Tagesgeschäft eines Linux-Admins gehört. Jedoch sind gerade die Funktionen, welche ich oben aufgeführt habe, das von mir am meisten benutzte Werkzeug, wenn ich Dateien im Terminal analysieren, vergleichen und verändern muss.