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 weitern- Überspringena- Alle verbleibenden ersetzenq- Abbrechenl- 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
| Befehl | Wirkung |
|---|---|
:s/alt/neu/ | Erstes Vorkommen in aktueller Zeile |
:s/alt/neu/g | Alle Vorkommen in aktueller Zeile |
:%s/alt/neu/g | Alle Vorkommen in der Datei |
:%s/alt/neu/gc | Mit Bestätigung |
:%s/alt/neu/gi | Groß-/Kleinschreibung ignorieren |
:5,20s/alt/neu/g | Nur 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.