Wie kann ich einen bestimmten Text in Vim ersetzen?

Melden
  1. Grundlegendes: Bedienungsmodi und Such-/Ersetzungsbefehl
  2. Ersetzen in der aktuellen Zeile
  3. Ersetzen im gesamten Dokument
  4. Bestätigung bei jedem Treffer
  5. Groß-/Kleinschreibung steuern
  6. Spezialzeichen und Reguläre Ausdrücke
  7. Ersatz mit Rückverweisen (Substitutionsgruppen)
  8. Bereichsbegrenzung und Zeilenbereiche
  9. Sicherheitskopie und Rückgängig machen
  10. Praktische Hinweise

Grundlegendes: Bedienungsmodi und Such-/Ersetzungsbefehl

Vim hat verschiedene Modi; für Suchen und Ersetzen nutzen Sie den Kommandomodus (Esc, um dorthin zu gelangen). Der grundlegende Ersetzungsbefehl hat die Form :s/alt/neu/flags. Er wirkt standardmäßig nur in der aktuellen Zeile. In diesem Ausdruck steht "alt" für den zu findenden Text (ein regulärer Ausdruck), "neu" für den Ersatztext. Flags steuern Verhalten, z. B. g für alle Treffer in der Zeile oder c für Bestätigung.

Ersetzen in der aktuellen Zeile

Um in der aktuellen Zeile das erste Vorkommen von "foo" durch "bar" zu ersetzen, geben Sie ein:

:s/foo/bar/

Sollten alle Vorkommen in dieser Zeile ersetzt werden, verwenden Sie:

:s/foo/bar/g

Ersetzen im gesamten Dokument

Für das gesamte Dokument verwenden Sie % als Bereichsangabe:

:%s/alt/neu/g

Dies ersetzt alle Vorkommen von "alt" durch "neu" in der gesamten Datei. Ohne g wird nur das erste Vorkommen jeder Zeile geändert.

Bestätigung bei jedem Treffer

Möchten Sie vor jedem Ersetzen gefragt werden, fügen Sie das Flag c hinzu:

:%s/alt/neu/gc

Vim fragt für jeden Treffer: y (ja), n (nein), a (alle), q (abbrechen), l (ersetze diesen und dann abbrechen), usw.

Groß-/Kleinschreibung steuern

Standardmäßig beachtet Vim Groß-/Kleinschreibung. Mit c im Muster machen Sie die Suche case-insensitive, mit C erzwingen Sie case-sensitive:

:%s/calt/neu/g

Alternativ können Sie die Option ignorecase oder smartcase setzen, aber die Inline-Flagge ist oft praktischer.

Spezialzeichen und Reguläre Ausdrücke

Der Suchteil ist ein regulärer Ausdruck. Punkte, Sternchen, Klammern usw. haben besondere Bedeutung. Möchten Sie einen wörtlichen Text suchen, escapen Sie Sonderzeichen mit einem Backslash: . * ? usw. Sie können das "very magic"-Muster v an den Anfang setzen, damit weniger Escapes nötig sind, z. B. :%s/v(foo|bar)/baz/g

Ersatz mit Rückverweisen (Substitutionsgruppen)

Gruppierungen im Muster mit ( ) bzw. v(... ) lassen sich im Ersatz mit 1, 2, ... referenzieren. Beispiel: Um "Nachname, Vorname" in "Vorname Nachname" zu verwandeln:

:%s/v( +),s*(.+)/2 1/g

Bereichsbegrenzung und Zeilenbereiche

Sie können den Ersetzungsbereich auf bestimmte Zeilen beschränken, z. B. :10,20s/alt/neu/g für Zeilen 10–20. Weitere Möglichkeiten sind . (aktuelle Zeile), $ (letzte Zeile) oder "/pattern/ (bis zur nächsten Zeile mit pattern).

Sicherheitskopie und Rückgängig machen

Vor umfangreichen Ersetzungen empfiehlt es sich, eine Sicherungskopie zu speichern (:w Datei.bak) oder mit :set und Dateiversionierung zu arbeiten. Vim erlaubt Rückgängig mit u (ein Schritt) und CTRL-R zum Wiederherstellen. Für mehrere Änderungen können Sie ebenfalls u mehrfach drücken.

Praktische Hinweise

Achten Sie auf Regex-Grenzen, Escapen und die Verwendung von Flags. Testen Sie größere Ersetzungen zuerst mit gc, oder auf einer Kopie der Datei. Wenn Ersatztext Sonderzeichen wie & enthält: & steht im Ersatz für das gesamte gefundene Muster; um ein literales & zu verwenden, escapen Sie es mit &.

0

Kommentare