Vim、C++、YCM和Syntastic包含路径问题

12

我觉得我用Vim进行C++编程的设置很棒,但我找不到一种方法来告诉Vim、YCM和Syntastic在哪里搜索头文件。如果每次想要开展项目时都要手动设置包含路径变量对于Vim、YCM和Syntastic来说会非常烦人,因为这些信息已经存在于Makefile中。是否有自动化解决方案来设置全局包含路径?

编辑: 如果我像这样设置路径“:set path =“.,/usr/include,include,../include,/home/steven/ovgl/include,,””,它甚至无法找到头文件。


我想你可以创建一个Makefile目标,从Makefile变量生成YCM配置...虽然我没有测试过,但是一个简单的脚本就可以解决问题。然后对于每个新项目,您将在Makefile中包含该目标,运行make ycm_setup,然后您就可以开始编码了。 - David Rodríguez - dribeas
2
如果您发布插件链接或至少提供完整名称(YouCompleteMe而不是YCM),那就太好了。 - mMontu
3个回答

3

您的标头应该出现在您的标签文件中(如果您不知道是什么,请参见:h tags)。

然后,如插件 faq所述,YouCompleteMe可以从标签文件中读取关于您的标头的信息:

YCM无法读取我的tags文件中的标识符

首先,在您的vimrc中添加 let g:ycm_collect_identifiers_from_tags_files = 1

请确保使用Exuberant Ctags生成您的标记文件,因为唯一支持的标记格式是Exuberant Ctags格式。“plain”ctags的格式不受支持。 ctags --version的输出应列出“Exuberant Ctags”。

Ctags需要使用--fields=+l选项(这是小写字母L,而不是数字1),因为YCM需要标记输出中的language:<lang>字段。

注意:Mac OS X默认安装了“plain” ctags。 brew install ctags将为您提供Exuberant Ctags版本。

还要确保正确设置了Vim标签选项。有关详细信息,请参见:h 'tags'。如果要查看YCM将为给定的缓冲区读取哪些标记文件,请使用相关缓冲区运行 :echo tagfiles()。请注意,该函数仅列出已经存在的标记文件。


我将变量添加到了我的vimrc文件中,然后尝试了"ctags -R * --fields=+l"和"etags -R * --fields=+l"两种方法,但是YCM似乎没有使用这些标签。 - SteveDeFacto
1
我其实不明白为什么它不能工作,所以如果我打开一个问题,我将无法解释这个问题。我已经尝试了几周让YCM正常工作,所以我只好回到clang_complete和supertab。唉... - SteveDeFacto
哇,两年后!仅仅两年就提供了任何反馈,@acgtyrant - mMontu
1
@acgtyrant 请尝试查看ctags文档以及有关此主题的vim帮助(:help tags)。 - mMontu
很高兴你解决了这个问题,@acgtyrant。 - mMontu
显示剩余5条评论

1
你应该寻找 YCM-Generator。它是一个脚本,通过运行 make 并查找所有使用的标志生成 ycm_extra_conf.py 文件。你只需要为项目运行一次,并仅在 make 文件更改时重新运行。

0

我曾经遇到过类似的问题。我需要在使用llvm进行开发时使用它。

我通过以下步骤解决了这个问题:

  1. 在您的项目/代码库中运行Ctags -R --fields=+l *
  2. 在您的用户.vimrc文件中添加let g:ycm_collect_identifiers_from_tags_files = 1
  3. cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/
  4. 在.vimrc中添加另一行let g:ycm_global_ycm_extra_conf = '/home/<user>/ycm_extra_conf.py'
  5. 重置终端或按bash

注意:您应该在包含标签的目录中启动vim。否则,您可能需要显式指定标签所在的目录。


2
YCM手册明确指出,您应更改配置文件而不仅仅使用提供的示例。 - Max Yankov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接