Wie mache ich eine Suche und Ersetze über alle geöffneten Dateien in Vim?
- Einleitung
- Grundlagen: Suche und Ersetzen in der aktuellen Datei
- Ersetzen in allen geöffneten Buffern
- Wichtige Hinweise
- Alternative: Ersetzen in allen Dateien in der Argumentliste
- 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/gDieser 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 | updateHier 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 | updateDadurch 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 | updateDer 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.
