¿Cómo abro todos los archivos en el directorio actual y todos los subdirectorios usando vim?

8

Hasta ahora he estado usando lo vim */**que parece abrir todos los archivos en subdirectorios pero no aquellos en el directorio actual, y vim *que abre todos los archivos en el currentdirectorio. Pero, ¿cómo abro todos los archivos en el directorio actual y todos los subdirectorios?

cuant
fuente

Respuestas:

8

Con zsh:

vim ./**/*(.)

Otras conchas:

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

Para abrir solo los archivos regulares (no ocultos) (no directorios, enlaces simbólicos, tuberías, dispositivos, puertas, enchufes ...).

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

Otros proyectiles, GNU find:

find . -xtype f -exec vim {} +

Para abrir también archivos ocultos (y atravesar directorios ocultos) y enlaces simbólicos a archivos normales.

Y:

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

otras conchas:

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

para atravesar también enlaces simbólicos cuando se busca en subdirectorios.

Si solo desea un nivel de subdirectorios:

vim ./* ./*/*

Tenga en cuenta que es una buena costumbre ponerle un prefijo a sus globos ./en caso de que algunos de los nombres de archivo comiencen con -o +.

(por supuesto, los findque también funcionan zsh. Tenga en cuenta que pueden ejecutar varias instancias de vimsi la lista de archivos es grande).

Stéphane Chazelas
fuente
1

En fiesta con shopt -s extglob:

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

Tenga en cuenta que, según el comentario de Stéphane , antes de Bash 4.3 esto seguiría cualquier enlace simbólico en los directorios cubiertos.

jasonwryan
fuente
1
Sin vimembargo, eso se ejecuta uno por archivo. Tenga en cuenta que bash antes de 4.3 solía atravesar enlaces simbólicos con **. Se ha solucionado en 4.3.
Stéphane Chazelas
@ StéphaneChazelas ¿Un vim por archivo es malo per se (suponiendo que estamos hablando de varios archivos, en lugar de varios cientos)? Gracias por la nota sobre los enlaces simbólicos: lo
editaré