我目前正在将基于C ++的IDE从XCode切换到Vim。 我一直在阅读关于Vim插件" YCM"并且它需要在源目录中存在.ycm_extra_conf.py。我正在使用YCM Generator生成.ycm_extra_conf.py和Ctags来生成标签。我的问题是什么使用标签? YCM是否可以用于Ctags(它收集有关代码的所有定义和重要信息)? YCM是否使用CTags生成的标签? .ycm_extra_conf.py的生成是否需要存在标签?
答案 0 :(得分:2)
我说YCM不需要标签数据库。如果你已经编译它依赖于clang解析器,那么,你将获得非常聪明的完成。没有它,感谢标签,你会得到比没有好的东西。
否则,大多数其他插件依赖于标签数据库来完成各种事情。例如,tagbar将在系统中显示标签的结构化轮廓。在lh-cpp和vim-refactor中,我在最后一刻构建了一个标记库,以便推导父母,孩子,成员,跳转/生成函数定义等。
你必须知道,我们无法通过标签实现智能,就像我们能够通过基于clang的插件实现的那样。生成标签实际上要快得多(但是YCM在后台工作,以及生成插件的标签,如easytags(IIRC),Gutentag和lh-tags v2(我维护))。不幸的是他们错过了可能的信息特别是当我们使用不活跃的exhuberant ctags时 - 我强烈建议universal ctags代替解析C ++代码,它甚至可以理解C ++ 11构造。
答案 1 :(得分:1)
如果.ycm_extra_conf.py
设置正确,则不需要ctags。
如果你let g:ycm_collect_identifiers_from_tags_files = 1
,并使用选项--fields=+l
生成ctags,那么YCM会识别ctags并将所有标记作为标识符完成,它不准确为语义完成。和大ctags文件使用大量内存。所以不建议使用ctags。
修改强>
YCM使用clang作为语义后端。并且.ycm_extra_conf.py
设置了所需的标志。您可以生成编译数据库,但是当您添加新文件时,您需要重新创建编译数据库。
注意.ycm_extra_conf.py
是一个python文件,因此您也可以动态生成标志。在我的开发中,大多数标志都是相同的,但include标志会发生变化。所以我使用全局.ycm_extra_conf.py
生成标志,以便在我的项目中包含所有.h
文件。这种方式通常我不需要创建.ycm_extra_conf.py
,所有的完成和goto函数都可以工作。
您可以下载我的全局.ycm_extra_conf.py,并更改一些固定标记作为您的帮助,并将其放到您的项目根目录或将其设置为全局,然后您应该完成该工作。