如何使用vim打开当前目录及其所有子目录中的所有文件?

如何使用vim打开当前目录及其所有子目录中的所有文件?

到目前为止,我一直在使用vim */**它似乎可以打开子目录中的所有文件,但是不是当前目录中的文件,并vim *打开该current目录中的所有文件。但是如何打开当前目录下的所有文件所有子目录?

答案1

zsh

vim ./**/*(.)

其他外壳:

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

仅打开(非隐藏)常规的任何级别子目录中的文件(不是目录、符号链接、管道、设备、门、套接字...)。


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

其他 shell,GNU find

find . -xtype f -exec vim {} +

还可以打开隐藏文件(并遍历隐藏目录)和常规文件的符号链接。


和:

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

其他外壳:

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

在查看子目录时也可以遍历符号链接。


如果您只想要一级子目录:

vim ./* ./*/*

请注意,在 glob 中添加前缀是一个好习惯,以防./某些文件名以-或开头+

(当然,这些find也可以在. 请注意,如果文件列表很大,并且至少对于 GNU ,zsh它们可能会运行多个实例,将无法跳过名称包含不形成的字节序列的隐藏文件/目录您所在区域中的有效字符)。vimfind

答案2

在 bash 中shopt -s extglob

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

请注意,根据斯蒂芬的评论,在 Bash 4.3 之前,这将遵循所覆盖目录中的任何符号链接。

相关内容