我正在尝试让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
对我来说不是可行的解决方案。
谢谢!
答案 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'
下的所有内容都已清楚解释。