Wie mache ich eine Suche und Ersetze über alle geöffneten Dateien in Vim?

Melden
  1. Einleitung
  2. Grundlagen: Suche und Ersetzen in der aktuellen Datei
  3. Ersetzen in allen geöffneten Buffern
  4. Wichtige Hinweise
  5. Alternative: Ersetzen in allen Dateien in der Argumentliste
  6. Zusammenfassung

Einleitung

In Vim besteht oft die Notwendigkeit, eine bestimmte Zeichenkette in mehreren Dateien gleichzeitig zu suchen und zu ersetzen. Wenn du mehrere Dateien geöffnet hast (beispielsweise in Bufferform oder als Argumentliste), kannst du die Ersetzung nicht nur in der aktuellen Datei, sondern in allen geöffneten Dateien durchführen. Dies spart Zeit und erhöht die Effizienz bei der Bearbeitung großer Projekte.

Grundlagen: Suche und Ersetzen in der aktuellen Datei

Um eine Ersetzung in der aktuellen Datei durchzuführen, benutzt man den Befehl:

:%s/alterText/neuerText/g

Dieser Befehl ersetzt im gesamten Puffer alle Vorkommen von alterText durch neuerText. Das % steht für alle Zeilen des aktuellen Puffers, das s ist der Ersatzbefehl, und das g sorgt dafür, dass alle Vorkommen innerhalb einer Zeile ersetzt werden.

Ersetzen in allen geöffneten Buffern

Wenn mehrere Dateien als separate Buffer innerhalb von Vim geöffnet sind, kannst du die Ersetzung auf alle diese Buffer anwenden, indem du den folgenden Befehl verwendest:

:bufdo %s/alterText/neuerText/g | update

Hier bewirkt bufdo, dass der Befehl für jeden geöffneten Buffer ausgeführt wird. Der Teil %s/alterText/neuerText/g ist die Ersetzung innerhalb des jeweiligen Buffers.

Das | dient als Trennzeichen, um mehrere Befehle in einer Zeile auszuführen, und update speichert die Datei nur, falls Änderungen vorgenommen wurden. Damit vermeidest du unnötiges Überschreiben von unveränderten Dateien.

Wichtige Hinweise

Bevor du den Befehl ausführst, solltest du sicherstellen, dass die Such- und Ersetzungsmuster korrekt sind, um ungewollte Änderungen zu vermeiden. Es kann auch sinnvoll sein, vor dem automatischen Speichern eine Sicherung oder ein Commit (bei Versionskontrolle) zu machen.

Wenn du die Ersetzungen manuell kontrollieren möchtest, kannst du das c-Flag hinzufügen, also :%s/alterText/neuerText/gc oder entsprechend bei bufdo:

:bufdo %s/alterText/neuerText/gc | update

Dadurch wirst du für jedes Vorkommen gefragt, ob es ersetzt werden soll.

Alternative: Ersetzen in allen Dateien in der Argumentliste

Wenn du mehrere Dateien mit vim datei1 datei2 datei3 öffnest, sind diese in der Argumentliste gespeichert. Um in allen diesen Dateien zu suchen und zu ersetzen, kannst du:

:argdo %s/alterText/neuerText/g | update

Der Unterschied zu bufdo ist, dass argdo nur auf die Dateien der Argumentliste wirkt, während bufdo auf alle geladenen Buffer.

Zusammenfassung

Um also eine Suche und Ersetzung über alle geöffneten Dateien in Vim durchzuführen, ist der Befehl :bufdo %s/alterText/neuerText/g | update die gebräuchlichste Methode. Dabei kannst du je nach Bedarf noch zusätzliche Flags wie c für Bestätigung hinzufügen. Für Dateien in der Argumentliste ist :argdo die passende Wahl.

0

Kommentare