我正在尝试让 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'
下解释得很清楚。