Wie öffne ich alle Dateien im aktuellen Verzeichnis und alle Unterverzeichnisse mit vim?

8

Bisher Ich habe mit vim */**der alle Dateien in einem Unterverzeichnis zu öffnen , scheint aber nicht diejenigen , die in dem aktuellen Verzeichnis, und vim *das sich öffnet , um alle Dateien im currentVerzeichnis. Aber wie öffne ich alle Dateien im aktuellen Verzeichnis und in allen Unterverzeichnissen?

quant
quelle

Antworten:

8

Mit zsh:

vim ./**/*(.)

Andere Muscheln:

find . \( -name '.?*' -prune \) -o -type f -exec vim {} +

Zum Öffnen nur der (nicht ausgeblendeten) regulären Dateien (keine Verzeichnisse, Symlinks, Pipes, Geräte, Türen, Sockets ...).

vim ./**/*(D-.)

Andere Muscheln, GNU find:

find . -xtype f -exec vim {} +

Zum Öffnen von versteckten Dateien (und zum Durchsuchen versteckter Verzeichnisse) und zum Verknüpfen mit regulären Dateien.

Und:

vim ./***/*(D-.)

andere Muscheln:

find -L . -type f -exec vim {} +

um auch Symlinks zu durchlaufen, wenn Sie in Unterverzeichnisse schauen.

Wenn Sie nur eine Ebene von Unterverzeichnissen möchten:

vim ./* ./*/*

Beachten Sie, dass es eine gute Angewohnheit ist, Ihren Globs ein Präfix voranzustellen, ./falls einige der Dateinamen mit -oder beginnen +.

(Natürlich findfunktionieren auch diese zsh. Beachten Sie, dass sie möglicherweise mehrere Instanzen ausführen, vimwenn die Liste der Dateien groß ist.)

Stéphane Chazelas
quelle
1

In Bash mit shopt -s extglob:

for file in **/**; do [[ -f "$file" ]] && vim "$file"; done

Beachten Sie, dass gemäß Stéphanes Kommentar vor Bash 4.3 alle Symlinks in den behandelten Verzeichnissen folgen würden.

Jasonwryan
quelle
1
Das läuft allerdings eine vimpro Datei. Beachten Sie, dass bash vor 4.3 zum Durchlaufen von Symlinks mit verwendet wurde **. Es wurde in 4.3 behoben.
Stéphane Chazelas
@ StéphaneChazelas Ist ein vim pro Datei per se schlecht (vorausgesetzt, es handelt sich um mehrere Dateien anstatt um mehrere hundert)? Vielen Dank für den Hinweis zu den Symlinks: Ich werde das in bearbeiten.
Jasonwryan