Como abro todos os arquivos no diretório atual e todos os subdiretórios usando o vim?

8

Até agora, estou usando o vim */**que parece abrir todos os arquivos nos subdiretórios, mas não os do diretório atual, e vim *que abre todos os arquivos no currentdiretório. Mas como abro todos os arquivos no diretório atual e todos os subdiretórios?

quant
fonte

Respostas:

8

Com zsh:

vim ./**/*(.)

Outras conchas:

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

Para abrir apenas os arquivos regulares (não ocultos) (não diretórios, links simbólicos, tubos, dispositivos, portas, soquetes ...).

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

Outras conchas, GNU find:

find . -xtype f -exec vim {} +

Para também abrir arquivos ocultos (e percorrer diretórios ocultos) e links simbólicos para arquivos regulares.

E:

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

outras conchas:

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

também percorrer links simbólicos ao procurar em subdiretórios.

Se você deseja apenas um nível de subdiretórios:

vim ./* ./*/*

Observe que é um bom hábito prefixar seus globs ./caso alguns nomes de arquivos comecem com -ou +.

(é claro que findeles também funcionam zsh. Observe que eles podem executar várias instâncias vimse a lista de arquivos for grande).

Stéphane Chazelas
fonte
1

Na festança com shopt -s extglob:

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

Observe que, conforme o comentário de Stéphane , antes do Bash 4.3, isso seguiria quaisquer links simbólicos nos diretórios abordados.

jasonwryan
fonte
1
Isso executa um vimpor arquivo. Observe que o bash anterior ao 4.3 costumava atravessar links simbólicos com **. Foi corrigido no 4.3.
Stéphane Chazelas
@ StéphaneChazelas Um vim por arquivo é ruim por si só (supondo que estamos falando de vários arquivos, em vez de várias centenas)? Obrigado pela nota sobre os links simbólicos: Vou editar que no.
jasonwryan