So suchen und ersetzen Sie mehrere Dateien in Vim

In diesem Artikel erfahren Sie, wie Sie dank Vim mit nur zwei Befehlen interaktiv in vielen Dateien suchen und diese ersetzen können.

Es gibt zwar eine Vielzahl von Methoden zum Suchen und Ersetzen von Wörtern in einer einzelnen Datei. Was tun Sie jedoch, wenn Sie eine Zeichenfolge für mehrere nicht verwandte Dateien mit unterschiedlichen Namen aktualisieren müssen? Sie nutzen natürlich die Leistung von Befehlszeilen-Tools!

Zunächst müssen Sie findalle Dateien ändern, die Sie ändern möchten. Das Aneinanderreihen von Suchanfragen findist wirklich nur durch Ihre Vorstellungskraft begrenzt.

Hier ist ein einfaches Beispiel, das Python-Dateien findet:

find . -name '*.py' 

Der -nameTest sucht nach einem Muster, z. B. nach allen Dateien, die auf enden .py. Aber findkann viel mehr mit anderen Testbedingungen tun, einschließlich -regexTests. Führen Sie aus find --help, um die Vielzahl der Optionen anzuzeigen.

Optimieren Sie Ihre Suche weiter, indem grepSie nur die Dateien abrufen, die die zu ändernde Zeichenfolge enthalten, z. B. indem Sie Folgendes hinzufügen:

grep -le '\' 

Die -lOption gibt Ihnen nur die Dateinamen für alle Dateien an, die ein Muster (gekennzeichnet mit -e) enthalten, das mit „einem Wal“ übereinstimmt.

Sie können auch Vims eindrucksvolles verwenden, mit :bufdodem Sie denselben Befehl über mehrere Puffer hinweg ausführen können. Es funktioniert interaktiv mit all diesen Dateien, ohne dass es mühsam ist, jede Datei einzeln zu öffnen, zu speichern und zu schließen.

Lassen Sie uns Ihre leistungsstarken find+ grepErgebnisse in Vim einbinden mit:

vim `find . -name '*.py' \ -exec grep -le '\' {} \;` 

Durch die Verwendung der Backtick-Erweiterung, um unsere Suche an Vim weiterzuleiten, werden mehrere Puffer geöffnet. (Machen Sie :h backtick-expansionin Vim für mehr.)

Jetzt können Sie den Befehl Vim :bufdoauf alle diese Dateien anwenden und Aktionen wie das interaktive Suchen und Ersetzen ausführen:

:bufdo %s/a whale/a bowl of petunias/gce 

Das gfür "global" ändert das Auftreten des Musters in allen Zeilen. Das lässt eFehler aus, wenn das Muster nicht gefunden wird. Die cOption macht dies interaktiv. Wenn Sie sich sicher fühlen, können Sie es weglassen, um die Änderungen vorzunehmen, ohne sie zu überprüfen.

Wenn Sie alle Puffer durchlaufen haben, speichern Sie alle Arbeiten, die Sie ausgeführt haben:

:bufdo wq! 

Dann genießen Sie die Herrlichkeit Ihrer gesparten Zeit und Mühe.