Come faccio ad aprire tutti i file nella directory corrente e tutte le sottodirectory usando vim?


8

Finora ho usato quello vim */**che sembra aprire tutti i file nelle sottodirectory ma non quelli nella directory corrente e vim *che apre tutti i file nella currentdirectory. Ma come posso aprire tutti i file nella directory corrente e tutte le sottodirectory?

Risposte:


8

Con zsh:

vim ./**/*(.)

Altre conchiglie:

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

Per aprire solo i file regolari (non nascosti) (non directory, collegamenti simbolici, pipe, dispositivi, porte, socket ...).

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

Altre shell, GNU find:

find . -xtype f -exec vim {} +

Per aprire anche file nascosti (e attraversare directory nascoste) e collegamenti simbolici a file normali.

E:

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

altre conchiglie:

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

per attraversare anche i collegamenti simbolici quando si esaminano le sottodirectory.

Se si desidera un solo livello di sottodirectory:

vim ./* ./*/*

Nota che è una buona abitudine aggiungere il prefisso ai tuoi globs ./nel caso in cui alcuni nomi di file inizino con -o +.

(ovviamente findfunzionano anche quelli zsh. Nota che potrebbero eseguire diverse istanze vimse l'elenco dei file è grande).


1

In bash con shopt -s extglob:

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

Si noti che, secondo il commento di Stéphane , prima di Bash 4.3 questo avrebbe seguito qualsiasi collegamento simbolico nelle directory coperte.


1
Questo però ne esegue uno vimper file. Nota che bash prima della 4.3 era utilizzato per attraversare i symlink **. È stato risolto in 4.3.
Stéphane Chazelas il

@ StéphaneChazelas Una vim per file è di per sé negativa (supponendo che stiamo parlando di più file, piuttosto che di diverse centinaia)? Grazie per la nota sui
link
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.