vim:如何获取路径以上下搜索目录树



我正在尝试让 vimgf来处理包含文件。如果路径是本地路径,则一切正常。但是,如果它必须向上搜索目录树并向下搜索指定的树,则找不到该文件。

我想要的很容易证明:

cd /some/src
mkdir -p a/long/path/down
mkdir -p a/long/path/again
touch a/long/path/down/util.h
echo '#include "a/long/path/down/util.h"' > a/long/path/again/file.cc
cd a/long/path/again
vim file.cc

在此示例中,当我编译时,我将使用-I/some/src,以便在编译 file.cc 时找到a/long/path/down/util.h

现在,在 vim 会话中,对于我在a/long/path/down/目录中的file.cc(请注意上面的cd(,我在a/long/path/down/util.h包含路径上做了一个gf。我需要path规范才能使其工作?我以为这就是我所需要的:

set path+=**

然而我得到:

E447: Can't find file "a/long/path/down/util.h" in path

**不应该让它向上搜索,向上,向上...对于a然后发现a/long/path/down/util.h在那里?

在我的项目中,我可能在/some有多个版本的src/,所以我希望搜索与pwd相对。也就是说,set path+=/some/src对我来说不是一个可行的解决方案。

谢谢!

您正在寻找;,而不是**

set pah+=**;

做你想要的,但它会很慢,因为 Vim 会"上下,递归",然后"上下,递归"等,在大量目录中查找您的文件。

一个可能的改进可能是使用"停止目录":

set path+=**;/path/to/a/long/path

这样 Vim 就不会在整个硬盘驱动器中搜索您的文件。停止目录越近,path就越有用。

更好的改进是将特定目录添加到path

set path+=/path/to/a/long/path/down

它与强制要求标准目录结构的项目/框架/语言非常有效。这可以基于每个文件类型或每个路径自动执行。

一切都在:help file-searching:help 'path'下解释得很清楚。

相关内容