Der substitute-Befehl (:s) ist das zentrale Werkzeug zum Suchen und Ersetzen in Vim. Er arbeitet zeilenbasiert, unterstützt reguläre Ausdrücke und bietet volle Kontrolle über den Ersetzungsvorgang.

Syntax

Die allgemeine Syntax lautet:

:[Bereich]s/{Suchmuster}/{Ersetzung}/[Flags]
  • Bereich - Welche Zeilen durchsucht werden (optional)
  • Suchmuster - Der Text oder das Muster, das gefunden werden soll
  • Ersetzung - Der neue Text
  • Flags - Optionen zur Steuerung des Verhaltens (optional)

Ohne Bereichsangabe arbeitet der Befehl nur in der aktuellen Zeile.

Grundlegende Ersetzung

Ersetze das erste Vorkommen von “alt” durch “neu” in der aktuellen Zeile:

:s/alt/neu/

Mit dem Flag g (global) ersetzt du alle Vorkommen in der Zeile:

:s/alt/neu/g

Das Prozentzeichen % erweitert den Bereich auf die gesamte Datei:

:%s/alt/neu/g

Dieser Befehl ist der Klassiker - er ersetzt jedes Vorkommen von “alt” durch “neu” in der gesamten Datei.

Ersetzung bestätigen

Mit dem Flag c (confirm) fragt Vim bei jedem Treffer nach:

:%s/alt/neu/gc

Vim zeigt jeden Treffer an und wartet auf deine Eingabe:

  • y - Ersetzen und weiter
  • n - Überspringen
  • a - Alle verbleibenden ersetzen
  • q - Abbrechen
  • l - Ersetzen und beenden

Das ist besonders nützlich, wenn du nicht sicher bist, ob jeder Treffer ersetzt werden soll.

Text löschen

Lass die Ersetzung leer, um Text zu löschen:

:%s/unerwuenscht//g

Dieser Befehl entfernt alle Vorkommen von “unerwuenscht” aus der Datei.

Bereich festlegen

Zeilenbereich mit Nummern

Ersetze nur in den Zeilen 5 bis 20:

:5,20s/alt/neu/g

Aktuelle Zeile bis zum Ende

Der Punkt . steht für die aktuelle Zeile, $ für die letzte:

:.,$s/alt/neu/g

Relative Bereiche

Ersetze in der aktuellen Zeile und den nächsten 4 Zeilen:

:.,+4s/alt/neu/g

Groß- und Kleinschreibung

Standardmäßig unterscheidet Vim zwischen Groß- und Kleinschreibung. Das Flag i ignoriert sie:

:%s/fehler/Fehler/gi

Findet “fehler”, “FEHLER”, “Fehler” und ersetzt alle durch “Fehler”.

Alternativ hängst du \c an das Suchmuster an:

:%s/fehler\c/Fehler/g

Mit \C erzwingst du die Beachtung der Groß-/Kleinschreibung, falls du sie global deaktiviert hast.

Ganze Wörter ersetzen

Ohne Wortgrenzen findet :s/or/und/g auch “or” in “Wort” oder “Operator”. Verwende \< und \> für Wortgrenzen:

:%s/\<or\>/und/g

Jetzt wird nur das eigenständige Wort “or” ersetzt.

Reguläre Ausdrücke

Vim unterstützt reguläre Ausdrücke im Suchmuster. Einige nützliche Beispiele:

Zeilenanfang

Das Caret ^ steht für den Zeilenanfang. Füge am Anfang jeder Zeile ein # ein:

:%s/^/#/

Zeilenende

Das Dollarzeichen $ steht für das Zeilenende. Entferne Leerzeichen am Ende jeder Zeile:

:%s/\s\+$//

\s\+ bedeutet “ein oder mehr Leerzeichen”.

Beliebige Zeichen

Der Punkt . steht für ein beliebiges Zeichen, .* für beliebig viele:

:%s/^foo.*/ersetzt/g

Ersetzt alle Zeilen, die mit “foo” beginnen, komplett durch “ersetzt”.

Alternative Trennzeichen

Der Schrägstrich / ist nicht zwingend. Bei Pfaden oder URLs ist ein anderes Trennzeichen übersichtlicher:

:%s|/usr/local|/opt|g

Jedes nicht-alphanumerische Zeichen funktioniert: #, |, @ oder _.

Mehrere Begriffe gleichzeitig

Mit \| verbindest du mehrere Suchmuster:

:%s/rot\|gruen\|blau/farbe/g

Ersetzt “rot”, “gruen” und “blau” durch “farbe”.

Praktische Beispiele

Zeilen auskommentieren

Kommentiere die Zeilen 10 bis 25 aus (fügt # am Zeilenanfang ein):

:10,25s/^/#/

Kommentare entfernen

Entferne das führende # in den Zeilen 10 bis 25:

:10,25s/^#//

Einrückung anpassen

Ersetze Tabs durch 4 Leerzeichen:

:%s/\t/    /g

Doppelte Leerzeilen entfernen

Ersetze mehrere Leerzeilen durch eine:

:%s/\n\n\+/\r\r/g

Befehlshistorie

Vim speichert alle Befehle der aktuellen Sitzung. Gib :s ein und navigiere mit den Pfeiltasten durch frühere substitute-Befehle. Drücke Enter, um den Befehl auszuführen, oder bearbeite ihn vorher.

Zusammenfassung

BefehlWirkung
:s/alt/neu/Erstes Vorkommen in aktueller Zeile
:s/alt/neu/gAlle Vorkommen in aktueller Zeile
:%s/alt/neu/gAlle Vorkommen in der Datei
:%s/alt/neu/gcMit Bestätigung
:%s/alt/neu/giGroß-/Kleinschreibung ignorieren
:5,20s/alt/neu/gNur Zeilen 5 bis 20

Der substitute-Befehl ist eines der mächtigsten Werkzeuge in Vim. Mit regulären Ausdrücken und Bereichen lassen sich komplexe Änderungen in Sekunden durchführen.

Verwandte Artikel