How do I open all files in the current directory and all subdirectories using vim?

With zsh:

vim ./**/*(.)

Other shells:

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

To open only the (non-hidden) regular files (not directories, symlinks, pipes, devices, doors, sockets...) in any level of subdirectories.


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

Other shells, GNU find:

find . -xtype f -exec vim {} +

To also open hidden files (and traversing hidden directories) and symlinks to regular files.


And:

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

other shells:

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

to also traverse symlinks when looking into subdirectories.


If you only want one level of subdirectories:

vim ./* ./*/*

Note that it's a good habit to prefix your globs with ./ in case some of the file names start with - or +.

(of course the find ones also work in zsh. Note that they may run several instances of vim if the list of files is big, and at least with GNU find, will fail to skip hidden files/dirs whose name contains sequences of bytes that don't form valid characters in your locale).

Tags:

Vim