51 Stimmen

Wie kann ich in einem Verzeichnis in Vim rekursiv suchen und ersetzen?

Ich habe den Ersatzbefehl von Vim kennengelernt...

:%s/replaceme/replacement/gi

Und vimgrep...

:vimgrep  /findme/gj  project/**/*.rb

Gibt es eine Möglichkeit, sie zu kombinieren, um eine Ersetzung für alle Dateien in einem Verzeichnis vorzunehmen?

4voto

Michał Marczyk Punkte 82196

Es gibt ein Plugin, das genau das tun will: Vimgrep Ersetzen .

Oh, warten Sie... es gibt noch andere: Global Ersetzen , EasyGrep .

Für eine Lösung ohne Plugin, vielleicht argdo wäre es hilfreich, wenn Sie die vimgrep auf die Argumentliste (die mit args ), aber ich kann die Details nicht herausfinden. Ich würde mich freuen, wenn jemand die Idee aufgreift und sie verbessert... hier ist sie also.

Die Grundidee hinter dem ersten Plugin (ich nehme an, die anderen auch...) ist die Verwendung von vimgrep und durchlaufen dann die Treffer mit :cnext und wenden Sie den Ersetzungsbefehl auf jede Zeile an. Eine Funktion, die dies bewerkstelligt, könnte klein genug sein, um sie in .vimrc unterzubringen. (Vielleicht können Sie eine aus den Quellen der Plugins übernehmen?)

(Ich vermute, dass hgimenez eine Lösung gefunden hat, aber ob diese geeignet ist, hängt wahrscheinlich von der Anzahl der zu verarbeitenden Dateien ab... Die Plugins sollten trotzdem in Ordnung sein.)

1voto

rado Punkte 3896

Dies funktioniert bei einer kleinen Anzahl von Dateien.

vim ` find . -type f `

bufdo %s/pattern/replacement/gec | update

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X