Comment puis-je ouvrir tous les fichiers du répertoire actuel et tous les sous-répertoires à l'aide de vim?

8

Jusqu'à présent, j'ai utilisé vim */**ce qui semble ouvrir tous les fichiers dans les sous-répertoires mais pas ceux du répertoire courant, et vim *qui ouvre tous les fichiers du currentrépertoire. Mais comment puis-je ouvrir tous les fichiers du répertoire actuel et de tous les sous-répertoires?

quant
la source

Réponses:

8

Avec zsh:

vim ./**/*(.)

Autres coquilles:

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

Pour ouvrir uniquement les fichiers réguliers (non cachés) (pas les répertoires, les liens symboliques, les tuyaux, les périphériques, les portes, les sockets ...).

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

Autres coques, GNU find:

find . -xtype f -exec vim {} +

Pour ouvrir également des fichiers cachés (et traversant des répertoires cachés) et des liens symboliques vers des fichiers normaux.

Et:

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

autres coquilles:

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

pour également parcourir les liens symboliques lors de la recherche dans les sous-répertoires.

Si vous ne voulez qu'un seul niveau de sous-répertoires:

vim ./* ./*/*

Notez que c'est une bonne habitude de préfixer vos globes ./au cas où certains des noms de fichiers commencent par -ou +.

(bien sûr, findceux-ci fonctionnent également zsh. Notez qu'ils peuvent exécuter plusieurs instances vimsi la liste des fichiers est grande).

Stéphane Chazelas
la source
1

En bash avec shopt -s extglob:

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

Notez que, selon le commentaire de Stéphane , avant Bash 4.3, cela suivrait tous les liens symboliques dans les répertoires couverts.

jasonwryan
la source
1
Cela fonctionne cependant un vimpar fichier. Notez que bash avant 4.3 utilisé pour parcourir les liens symboliques avec **. Il a été corrigé dans 4.3.
Stéphane Chazelas
@ StéphaneChazelas Un vim par fichier est-il mauvais en soi (en supposant qu'il s'agit de plusieurs fichiers, plutôt que de plusieurs centaines)? Merci pour la note sur les liens symboliques: je vais l'éditer dans.
jasonwryan