如何在Vim的vimgrep中指定路径以搜索当前目录外的文件夹?
解决Vim vimgrep跨目录搜索的问题
解决方案
以下几种方法可以让你在子目录中执行vimgrep时,指定搜索范围包含其他目录:
1. 使用绝对路径直接指定根目录
直接写出Home目录的绝对路径,不管当前处于哪个子目录,都能覆盖整个项目的所有.c文件:
:vimgrep /Pattern/ /完整路径/Home/**/*.c
比如你的Home路径是/Users/xxx/Home,就写成:
:vimgrep /Pattern/ /Users/xxx/Home/**/*.c
2. 使用相对路径回溯到上级目录
根据当前所在目录与Home的层级关系,用../回溯到目标根目录:
- 如果你在
Src目录下,Home是它的上级目录,执行::vimgrep /Pattern/ ../**/*.c - 如果你在
module 1目录下,需要回溯两级到Home::vimgrep /Pattern/ ../../**/*.c
3. 定义Vim变量简化路径输入
可以把项目根目录路径存为Vim变量,避免每次输入长路径:
" 先定义变量(可以把这行加到~/.vimrc里,下次打开Vim自动生效) let g:project_home = '/完整路径/Home' " 搜索时直接引用变量 :vimgrep /Pattern/ g:project_home/**/*.c
4. 配合find命令实现更灵活的路径筛选
如果需要指定特定子目录(比如只搜Shared Library和Src),可以用find命令生成文件列表,再传给vimgrep:
:vimgrep /Pattern/ `find /完整路径/Home -name "*.c"`
注意这里的反引号是Vim的表达式引用,会先执行find命令获取所有.c文件的路径,再进行搜索。
内容的提问来源于stack exchange,提问作者hariudkmr
相关产品推荐
相关产品推荐

