Suchen und Ersetzen im Vim-Editor - Im Sucher

Lesezeit
6 Minuten
Bis jetzt gelesen

Suchen und Ersetzen im Vim-Editor - Im Sucher

06.05.2013 - 12:48
Veröffentlicht in:

Wer gelernt hat, sich ohne Cursor-Tasten durch den Vim-Editor zu bewegen, kann sich an die nächste Herausforderung wagen: Suchen und Ersetzen, auf Wunsch auch mit Regular Expressions oder interaktiv.

Als Abkömmling des alten Vi-Editors, der aus dem Jahr 1976 stammt, ist Vim einer der am weitestverbreiteten Texteditoren überhaupt, insbesondere in Linux-Distributionen. Bei den meisten ist er standardmäßig enthalten und es gibt kaum einen Anwender, der nicht mit ihm Bekanntschaft gemacht hat – und sei es nur, dass er oder sie unabsichtlich in den Vim-Editor gelangte und nicht wusste, wie man ihn beendet.

Viele Anwender lernen dann die grundlegende Bedienung, gelangen aber kaum darüber hinaus. Für viele bleibt zum Beispiel die Suche in dem Texteditor immer ein Buch mit sieben Siegeln. Das ist sehr verständlich, denn mit seinen vielen Eigenheiten und Hunderten von Tastaturkürzeln wirkt Vim oft eher wie ein eigenes Betriebssystem als wie ein Editor. Auf jeden Fall kann man seine umfangreichen Fähigkeiten nicht nutzen, wenn man sich darauf beschränkt, mit den Cursor-Tasten durch eine Datei zu navigieren. Sich ein paar grundlegende Suchbefehle anzueignen, bringt einen wahren Schub für die eigene Produktivität.

Basis-Suche

Wie Sie vielleicht wissen, gibt es in Vim zwei unterschiedliche Modi: den Befehlsmodus und den Einfügemodus. Man startet Vim im Befehlsmodus und drückt dann beispielsweise i, um in den Einfügemodus zu gelangen und Text einzugeben. Ein Druck auf die Esc-Taste versetzt Vim wieder in den Befehlsmodus. Am unteren Rand des Fensters zeigt Vim eine Statusleiste, in der etwa der Einfügemodus gekennzeichnet ist.

Die Befehle und Tastenkürzel für die reine Suche in Vim unterscheiden sich von denen für das Suchen und Ersetzen. Wie die meisten anderen werden sie im Befehlsmodus eingegeben. Die grundlegende Suche könnte kaum einfacher sein: Geben Sie /Suchbegriff ein, um von der aktuellen Cursor-Position ausgehend die Datei nach dem Suchbegriff zu durchsuchen. Um rückwärts zu suchen, verwenden Sie ?Suchbegriff. Im Prinzip steckt dahinter ein System, das sich dem deutschen Anwender nicht unbedingt erschließt: Auf der US-amerikanischen Tastatur liegen diese beiden Buchstaben auf derselben Taste. Per Default unterscheidet Vim hier Groß- und Kleinschreibung, eine Suche nach Vim findet also weder vim noch VIM.

Wollen Sie nach einem Treffer weitersuchen, drücken Sie die Taste n. Um alternativ weiter in der Datei nach oben zu suchen, verwenden Sie N. Die Systematik entspricht hier derjenigen der Suche: Auch n und N unterscheiden sich nur durch einen Shift-Druck, aber hiervon profitieren auch Anwender mit deutscher Tastatur.

Zwillinge finden

Das waren aber nur die absoluten Basics. Steht der Cursor auf einem bestimmten Wort und Sie drücken *, springt er zum nächsten Vorkommen dieses Worts in der Datei. Der umgekehrte Fall, zurück zu springen, lässt sich mit # erreichen. Vim findet hierbei nur genau das Wort, aber keine Substrings, eine Suche nach Admin springt also nicht zu Administrator. Um das zu erreichen, verwenden Sie die Tastenfolge g* beziehungsweise g#.

Weitere Variationen der grundlegenden Suchbefehle erlauben noch weitere Suchoptionen. Geben Sie nur / ein, nachdem Sie einmal gesucht haben, wiederholt Vim die letzte Suche. Mit einer Zahl kombiniert, springt der Editor zu dem n-ten Vorkommen des Suchbegriffs: /5/command springt also zu der fünften Stelle, an der der String command steht. Das lässt sich wiederum mit den eben beschriebenen Kürzeln kombinieren. So springt /2* zur zweiten Stelle, an der das aktuelle Wort steht. Per Default landet man dabei immer am Anfang des Suchbegriffs. Wollen Sie stattdessen ans Ende springen, schreiben Sie hinter den Suchbegriff /e.

Ignorant

Die Unterscheidung von Groß- und Kleinschreibung bei der Suche schalten Sie ab, indem Sie \c an eine Suche anhängen. Verwenden Sie dagegen ein \C, wird die Unterscheidung wieder eingeschaltet. Alternativ können Sie auch vor der Suche den Befehl :set ignorecase eingeben und die Einstellung damit für die aktuelle Sitzung dauerhaft einschalten. Dauerhaft legen Sie diese Einstellung fest, indem Sie den Befehl in die Konfigurationsdatei $HOME/.vimrc schreiben. Falls Sie dann doch einmal Groß- und Kleinschreibung unterscheiden wollen, verwenden Sie eben den Schalter \C.

Schlauer Vim

Eine weitere interessante Alternativ dazu ist es, gleichzeitig :set ignorecase und :set smartcase einzuschalten. Vim entscheidet dann anhand des eingegebenen Suchbegriffs, ob er Groß- und Kleinschreibung beachtet oder nicht. Enthält er einen Großbuchstaben, findet Vim nur diese Schreibweise, ansonsten ist er tolerant. Die Smartcase-Einstellung funktioniert nur, wenn man den Suchbegriff eintippt, aber nicht, wenn man mit * sucht.

Sehr praktisch ist es auch, im Text alle Fundstellen hervorzuheben. Das können Sie mit :set hlsearch erreichen (Abbildung 1). Standardmäßig verwendet Vim dafür Gelb, mit der Einstellung :hi Search guibg=ASCII COLOR lässt sich das aber ändern. Für die nächste Suche schalten Sie die Hervorhebung mit :nohlsearch ab. Dauerhaft tut dies :set nohlsearch.

Abbildung 1: Auf Wunsch hebt Vim alle Fundstellen bei einer Suche grafisch hervor.
Abbildung 1: Auf Wunsch hebt Vim alle Fundstellen bei einer Suche grafisch hervor.

Noch bequemer ist es, mit :set incsearch die sogenannte inkrementelle Suche zu aktivieren. Damit markiert Vim bereits gefundene Wörter, während Sie noch den Suchbegriff eintippen. Sucht man etwa bei diesem Artikel nach /Vi, hebt Vim die ersten beiden Buchstaben von Vi-Editor hervor. Tippt man nun noch ein m, springt die Markierung in den nächsten Nebensatz zur ersten Erwähnung von Vim.

Markierungen

Wenn Sie die grafische Hervorhebung praktisch finden, wollen Sie vielleicht manche ihrer Suchergebnisse dauerhaft markieren. Das können Sie tun, indem Sie mKleinbuchstabe eingeben. Die Marke besteht dann aus einem Buchstaben zwischen a und z. Ist eine Markierung gesetzt, springen Sie mit 'Buchstabe dorthin. Zusätzlich zu ihrer Verwendung als Ziel für Sprünge können Sie die Marken auch für Textblocks verwenden, also etwa um Text von der aktuellen Cursor-Position bis zur Marke zu löschen. Ein Nachteil der Marker ist, dass sie nicht sichtbar sind. Sie müssen sich also selbst merken, wo Sie Markierungen gesetzt haben.

Alle diese Kürzel zu lernen, braucht seine Zeit. Der Vim-Editor hilft dabei, indem er eine History der gefundenen Wörter (nicht der Suchbegriffe) führt. Um ein schon einmal gefundenes Wort noch einmal zu suchen, tippen Sie / beziehungsweise ? und verwenden dann die Pfeiltasten, um durch die History zu scrollen.

Suchen und Ersetzen

Wie schon erwähnt, ist Suchen und Ersetzen in Vim eine vom Suchen vollkommen getrennte Funktion. Grundsätzlich sieht der Befehl für eine Ersetzung so aus:

%s/Suchbegriff/Ersetzung/g

Das Prozentzeichen zu Beginn zeigt an, dass sich der Befehl auf die ganze Datei bezieht. Das g am Ende steht für "global" und bedeutet, dass Vim den String auch ersetzt, wenn er in einer Zeile mehrmals vorkommt. In der Praxis werden meist diese beiden Optionen verwendet.

Den Grundbefehl können Sie auf mehrfache Weise variieren. Lassen Sie das Prozentzeichen weg, sucht Vim nur in der aktuellen Zeile. Ersetzen Sie es durch einen Bereich, etwa 4,6,, sucht Vim nur in den Zeilen 4 bis 6:

:4,6s/Vim/Foom/

Analog dazu führt Vim die Ersetzung mit 'd,'g nur zwischen den Markierungen d und g aus. Alternativ ist auch die Angabe einer relativen Position möglich. So ersetzt Vim mit ./$ gefundene Strings in allen Zeilen von der aktuellen bis zur letzten; ./+N macht das gleiche für die folgenden N Zeilen. Mit g/^String/ ersetzt Vim das Suchmuster nur in Zeilen, die mit dem angegebenen String beginnen.

Neben g gibt es auch noch weitere Optionen, die als Modifikatoren hinter dem Ersetzungsstring folgen dürfen. Dies sind i (ignoriere Groß-/Kleinschreibung), l (achte Groß-/Kleinschreibung) und c (bestätige Ersetzung). Im letzten Fall fragt der Editor bei jedem Fund nach, was er machen soll (siehe Tabelle 1).

Tabelle 1
Bestätigung beim Suchen & Ersetzen

Eingabe

Funktion

y

Ersetze String

n

Überspringen

a

Ersetze alle Folgenden

q

Suchen & Ersetzen beenden

l

Diesen String ersetzen, dann beenden

^E

Mit Strg+e hochscrollen

^Y

Mit Strg+y herunterscrollen

Regular Expressions

Vim hat seine eigene Version von Regular Expressions [1], die sich beim Suchen (und Ersetzen) verwenden lassen. Dabei gibt es die üblichen Verdächtigen wie . für ein Zeichen und * für die optionale mehrmalige Wiederholung eines Zeichens. Einen Bereich von Zeichen geben Sie innerhalb eckiger Klammern an, etwa [a-z]. Steht innerhalb der Klammern zu Beginn ein ^, wird der Bereich negiert.

Wer Regular Expressions von anderen Programmen oder Programmiersprachen kennt, sollte daran denken, dass sie sich von denen in Vim möglicherweise unterscheiden. Gerade beim Ersetzen sollte man das Suchmuster lieber noch einmal überprüfen. Für den Fall, dass die eingesetzten Regular Expressions unerwartete Nebeneffekte haben, gibt es sonst immer noch das Undo-Kommando.

Speziell bei Regular Expressions empfiehlt es sich, eine von Vim unterstützte Grep-Version zu verwenden: entweder die externen Befehle grep und lgrep oder die eingebauten Vim-Befehle vimgrep und lvimgrep. Der übliche Rat lautet, für einfache Suchaufträge die eingebauten Kommandos zu verwenden, sie aber für komplizierte zu vermeiden, weil sie nicht sehr schnell sind. Die Ergebnisliste für Suchen mit grep und vimgrep öffnen Sie mit :cw oder :copen; bei lgrep und lvimgrep sind es die Befehle :lw und :lopen [2].

Wie andere Anwendungen lassen sich auch die Suchfunktionen in Vim durch Plugins erweitern. Das Plugin Ack.vim [3] erlaubt die Suche mit dem Ack-Utility [4], das für rekursive Suchen in Quellcode-Dateien optimiert ist. Ein anderes populäres Plugin ist SearchComplete [5], das Vim beim Suchen mit Tab-Vervollständigung ausstattet, wie viele Anwender sie von der Bash-Shell kennen. Schließlich bleibt als letzter Ausweg auch noch der Gvim-Editor (Abbildung 2), der Anwender mit dem gewohnten Dialogfenster beglückt.

Abbildung 2: Ganz ohne Tastaturkürzel: Die grafische Version von Vim unterstützt Anwender bei der Suche mit dem von anderen Anwendungen bekannten Dialogfenster.
Abbildung 2: Ganz ohne Tastaturkürzel: Die grafische Version von Vim unterstützt Anwender bei der Suche mit dem von anderen Anwendungen bekannten Dialogfenster.

Autor: Bruce Byfield Artikel aus dem Admin Magazin Ausgabe 3/2013: Web Security Seite 114

Tags

Ähnliche Beiträge

So bleibt IT-Sicherheit auch für den Mittelstand bezahlbar Redaktion IT-A… Mi., 27.03.2024 - 09:16
IT-Sicherheit darf keine Kostenfrage sein. Dennoch nennen viele Unternehmen die Investitions- und Betriebskosten als Hauptgrund für ihre Zurückhaltung beim Thema Sicherheit. Doch wie viel Wahrheit steckt dahinter? Warum handeln deutsche Unternehmen (noch) nicht? Und warum ist ITSicherheit überlebenswichtig? Und welche Rolle spielt dabei NIS2? Diesen Fragen und möglichen Lösungsansätzen gehen wir in unserem Artikel auf den Grund.
Im Test: Auerswald COMtrexx Next Redaktion IT-A… Mo., 25.03.2024 - 07:34
Telefonie ist zu einem IT-Thema geworden und dank ausgereifter Bereitstellungs- und Konfigurationsmöglichkeiten müssen sich auch Telefonie-unerfahrene Admins oder IT-Techniker vor deren Einsatz nicht sorgen. Telefonanlagen selbst haben nunmehr minimale Abmessungen erreicht, wie unser Blick auf die COMtrexx Next von Auerswald zeigt.

Netzwerkverwaltung an der Medizinischen Universität Wien

Die IT-Abteilung der Medizinischen Universität Wien betreibt das Netzwerk der Universität, wozu die Betreuung von rund 10.000 Anschlüssen sowie Hunderten Endgeräten und Servern gehört. Für diese Aufgabe wurde eine neue Informations- und Planungssoftware für Kabelmanagement und Netzwerkdokumentation implementiert. Das neue Werkzeug ist flexibel, skalierbar und deckt die steigenden Sicherheitsanforderungen voll ab.