Vim – Grundlagen für einen sicheren Umgang

Warum Vim? Während sich einige freuen, wenn sie aus Vim wieder herauskommen, schwören viele auf die Mächtigkeit und Effizienz des Texteditors. Der anfängliche Lernaufwand lohnt sich, wenn man häufig mit Textdateien in einer Linuxumgebung arbeitet und auch die zunächst unintuitive Bedienung erscheint mit ein wenig Übung sinnvoll.

Modi

Eine der größten Hürden beim Einstieg in Vim ist die Tatsache, dass der Editor zwischen verschiedenen Modi unterscheidet:

  • Normaler Modus – Eingabe von Befehlen
  • Einfügemodus – Gewöhnliche Texteingabe
  • Visueller Modus – Verändern von ganzen Textblöcken

Vim startet im normalen Modus. Mit ESC kommt man immer wieder zurück in den normalen Modus und ist dann bereit, Befehle einzugeben. Befehle, die mit einem : anfangen, werden beim Schreiben in der linken unteren Ecke angezeigt und können mit TAB automatisch vervollständigt werden. Einige der wichtigsten sind:

Befehl Erklärung
:w Speichern
:q Schließen
:wq Speichern und schließen
:q! Schließen erzwingen (ohne speichern)
:e [Dateipfad] Datei öffnen
u Undo
Strg+r Redo

In den Einfügemodus gerät man üblicherweise mit i. Anschließend lässt sich die Datei wie auch bei anderen Texteditoren bearbeiten.

Im visuellen Modus kann man Textblöcke auswählen und verändern. Dabei wird zwischen drei Auswahlarten unterschieden, die im unteren Bild dargestellt sind. Wird der visuelle Modus mit v aktiviert, dann wählt man alle Zeichen zwischen dem Start- und Endpunkt aus. Mit Shift+v werden immer nur ganze Zeilen selektiert. Strg+v ermöglicht die Auswahl von rechteckigen Bereichen (im Bild mit Breite 1). Diese Funktion kann beispielsweise zum Einfügen oder Entfernen von Kommentaren verwendet werden.

Textbearbeitung

Im Einfügemodus können wie üblich Entfernen und Backspace zum Löschen von Zeichen verwendet werden, allerdings bieten der normale und der visuelle Modus in vielen Fällen effizientere Methoden.

Vom normalen Modus aus kann eine Zeile mit y, y kopiert und anschließend mit p eingefügt werden. Gelöscht wird eine Zeile mit d, d, wodurch sie allerdings ebenfalls in einem Zwischenspeicher landet und mit p an anderer Stelle eingefügt werden kann. Die Funktionalität ähnelt also eher dem Ausschneiden.

Im visuellen Modus können je nach Auswahlart mehrere Linien, bestimmte Abschnitte oder ausgewählte Spalten mit d, y und p ausgeschnitten, kopiert oder eingefügt werden. Insbesondere das Ausschneiden mehrerer Linien ist ein häufiger Anwendungsfall. Vom normalen Modus aus nutzt man Shift+v um mehrere komplette Zeilen auszuwählen, trifft seine Auswahl mithilfe der Pfeiltasten und entfernt die Zeilen mit d. Anschließend können sie an einer anderen Stelle mit p eingefügt werden.

Der visuelle Modus kann auch genutzt werden, um Kommentarzeichen in mehreren Zeilen gleichzeitig zu entfernen. Dazu wählen Sie die Kommentarzeichen mit Strg+v aus und löschen sie mit d. Das Einfügen von Kommentarzeichen in mehrere Zeilen ist nur wenig komplizierter. Hierzu wird die erste Spalte der relevanten Zeilen mit Strg+v ausgewählt. Anschließend kann eine Eingabe mit Shift+i angefangen werden. Als C-Entwickler gibt man nun beispielsweise // gefolgt von ESC ein, womit jede der Zeilen auskommentiert ist.

Navigation

Wie in fast allen Editoren üblich können Sie den Cursor mit den Pfeiltasten bewegen und mit Bild-Auf und Bild-Ab seitenweise navigieren. Die Maus kann auch verwendet werden, dazu muss jedoch eine Einstellung verändert werden (siehe Abschnitt Einstellungen).

Zusätzlich dazu bietet Vim die Möglichkeit, in eine bestimmte Zeile zu springen. Zeile 70 ist beispielsweise mit :70 erreichbar. Auch kann eine Stelle mit m, s abgespeichert werden, um später mit , s wieder dorthin zurückzukehren. s kann dabei durch jeden beliebigen Buchstaben ersetzt werden, um verschiedene Stellen zu speichern. Mit g, ; gelangt man zur zuletzt bearbeiteten Stelle. Besonders nach dem Suchen ist es oft nützlich, wieder dorthin zurückzuspringen, wo man zuletzt gearbeitet hat.

Suchen kann man mit /suchbegriff. Mit n springt man zum nächsten Treffer und mit Shift+n zum vorherigen. Regex-Ausdrücke wie /such.*iff sind auch erlaubt. Anstatt den Suchbegriff manuell einzugeben, kann man aber auch mit * nach dem Begriff unter dem Cursor suchen und dann ebenfalls mit n und Shift+n navigieren.

Zum Ersetzen bestimmter Begriffe können Sie :%s/foo/bar/g verwenden. :%s sucht in der gesamten Datei (im Gegensatz dazu sucht :s nur in der aktuellen Zeile bzw. im ausgewählten Bereich). foo ist der Suchbegriff und wird durch bar ersetzt. Mit der Option g werden alle Treffer einer Zeile ersetzt. Hängt man noch ein c an, dann fragt Vim nach jedem Treffer, ob die Stelle ersetzt werden soll und kann so selektiv Treffer ersetzen. Wenn Sie nach bestimmten Mustern in URLs suchen, dann wird das Escapen der darin vorkommenden Slashes schnell lästig. Stattdessen können Sie das Trennzeichen der Suche auch einfach ändern. Beispielsweise ist :%s#foo#bar#g ebenso gültig.

Suchen und Ersetzen mit Regex-Ausdrücken kann viel Arbeit ersparen, was wir in diesem Blogeintrag mit einigen Beispielen bereits dargestellt haben.

Einstellungen

Sie können die Datei ~/.vimrc bearbeiten beziehungsweise erstellen, um Vim zu personalisieren. Folgende Optionen sind eine Überlegung wert:

colorscheme torte "Colorschemes können mit :colorscheme getestet werden
set tabstop=4     "Tabs werden vier Spalten breit angezeigt
set shiftwidth=4  "Eine Einrückungsebene ist vier Spalten breit
set shiftround    "Einrückung wird auf Vielfache von shiftwidth begrenzt
set expandtab     "Tabs werden durch Leerzeichen ersetzt
set autoindent    "Einrückungstiefe wird bei neuer Zeile beibehalten
set smartindent   "Einrückungstiefe wird durch Codesyntax beeinflusst
set number        "Zeilennummern werden angezeigt
set linebreak     "Verwende automatische Zeilenumbrüche
set scrolloff=10  "Scrollen bevor der Cursor am Bildschirmrand ist
set noerrorbells  "Ausschalten der Fehlertöne bei ungültigen Eingaben
set wildmode=longest,list "Einstellung zur Tabulatorvervollständigung
set ignorecase    "Ignoriere Groß-/Kleinschreibung beim Suchen, ...
set smartcase     "... außer wenn der Suchbegriff Großbuchstaben enthält
 
"Maussteuerung aktivieren. Mit dieser Option muss Shift
"beim Auswählen von Text gehalten werden, wenn der Text
"außerhalb von Vim kopiert werden soll.
set mouse=a

Fensterverwaltung

Oft ist es praktisch, mehrere Dateien gleichzeitig zu betrachten. In Vim hat man dazu zwei Möglichkeiten: Tabs und Fensterunterteilungen.

Ein neuer Tab kann mit :tabe geöffnet werden. Optional akzeptiert der Befehl auch einen Dateinamen für eine Datei, die im neuen Tab geöffnet werden soll. Zwischen den Tabs kann dann mit g, t gewechselt werden.

Meist sind jedoch Fensterunterteilungen nützlicher. Strg+w, v und Strg+w, s unterteilen das Fenster vertikal bzw. horizontal. Zwischen den Unterteilungen kann man mit Strg+w und einer entsprechenden Pfeiltaste wechseln.

Tipps & Tricks

Mit :! können Befehle wie außerhalb von Vim ausgeführt werden. Man kann zum Beispiel mit :!git status direkt von Vim aus den Status seines Git-Repositorys abfragen. Fügt man noch einen Punkt hinzu, dann wird die Ausgabe des externen Befehls im geöffneten Vim-Dokument eingefügt, das heißt :.!date schreibt das aktuelle Datum in die Datei.

Oft kommt es vor, dass man eine Datei ohne root-Rechte bearbeitet und erst beim Speichern merkt, dass man dazu keine Berechtigung hat. Mit :w !sudo tee % kann man die Datei dennoch speichern, vorausgesetzt man hat das Sudo-Passwort.

Mehr Informationen und Tricks kann man in Vims Hilfe :help, auf https://vim.fandom.com/ und natürlich auf StackOverflow finden. Vim kann noch deutlich mehr als das, was hier gelistet ist. Dazu gehören beispielsweise Makros, sehr viele effiziente Tastenkürzel, das Korrigieren der Einrückung einer Datei und das Entfernen von Trailing Whitespaces.

Haben Sie Fragen zum Umgang mit Vim? Wir stehen Ihnen gerne zur Verfügung.

Kontaktieren Sie uns!

Autor

  • Falke Stephan

    Falke Stephan arbeitet seit 2020 als Softwareentwickler bei MEDtech Ingenieur. Seine Aufgabengebiete umfassen unter anderem die Entwicklung von Medizingeräten basierend auf Embedded Linux.

Auch interessant:

Software Risikomanagement nach IEC 62304 und ISO 14971 – SW FMEA / FMECA bei Medizinprodukt-Software?

Referenzen: Wenn im Folgenden von IEC 62304 oder ISO 14971 gesprochen wird, sind folgende Ausgaben gemeint: IEC 62304:2006 + A1:2015 und EN ISO 14971:2012 Problemstellung: Wir entwickeln eine Software/Firmware, welche Bestandteil eines Medizinprodukts ist. Die Software (bzw. das Softwaresystem) wird der Software-Sicherheitsklasse B oder C zugeordnet. Diese Zuordnung hat u.a.…
Getagged mit: , , , ,