vim:如何获取在目录树中上下搜索的路径

时间:2018-08-31 22:43:07

标签: vim

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

我想要的东西很容易证明:

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

现在,在file.cc目录中的a/long/path/down/的vim会话中(请注意上面的cd),我在{{1 }}包含路径。我需要什么gf规范才能使它起作用?我以为这就是我所需要的:

a/long/path/down/util.h

但是我得到了

path

set path+=** 是否应该向上,向上,向上搜索E447: Can't find file "a/long/path/down/util.h" in path ,然后发现**在那儿?

在我的项目中,我可能在a中有多个版本的a/long/path/down/util.h,所以我希望搜索相对于src/。也就是说,/some对我来说不是可行的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:3)

您要查找的是;,而不是**

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'下的所有内容都已清楚解释。