How do I open all files in the current directory and all subdirectories using vim?
Solution 1
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).
Solution 2
In bash with shopt -s extglob
:
for file in **/**; do [[ -f "$file" ]] && vim "$file"; done
Note that, as per Stéphane's comment, prior to Bash 4.3 this would follow any symlinks in the directories covered.
Related videos on Youtube
quant
I'm here to learn programming and *nix mostly, and am immensely indebted to this community for always being there when I get stuck. The help and support I've received on SE sites has allowed me to develop my understanding in a range of disciplines much faster than I could ever have hoped for. I try to give back once in a while as well; it's the least I could do. I'm the owner and maintainer of www.portnovel.com
Updated on September 18, 2022Comments
-
quant over 1 year
So far I've been using
vim */**
which seems to open all files in subdirectories but not those in the current directory, andvim *
which opens all files in thecurrent
directory. But how do I open all files in the current directory and all subdirectories? -
Stéphane Chazelas over 9 yearsThat runs one
vim
per file though. Note that bash before 4.3 used to traverse symlinks with**
. It's been fixed in 4.3. -
jasonwryan over 9 years@StéphaneChazelas Is one vim per file bad per se (assuming we are talking about several files, rather than several hundred)? Thanks for the note about the symlinks: I'll edit that in.