¿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?

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).


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.


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é
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.