繁体   English   中英

.ycm_extra_conf.py和旺盛的Ctags有什么关系

[英]What is the relation between .ycm_extra_conf.py and Exuberant Ctags

我目前正在将基于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的生成是否需要存在标签?

我会说YCM不需要标签数据库。 如果您已经编译它依赖于clang解析器,那么您将获得非常聪明的完成。 没有标签,多亏了标签,您会得到比没有更好的东西。

否则,大多数其他插件都依赖标签数据库来完成各种工作。 例如,标签将显示系统中标签的结构化轮廓。 lh-cppvim-refactor中,我在最后一刻建立了一个标记库,以便推断出父母,孩子,成员,跳转/生成函数定义等。

您必须知道,使用标签无法实现像使用基于clang的插件所能实现的那样聪明。 生成标签的速度实际上要快得多(但是YCM在后台运行,以及标签生成的插件,例如easytags(IIRC),Gutentag和lh-tags v2(我维护))。 不幸的是,他们错过了可能的信息。 特别是当我们使用不太活跃的丰富的ctags时,我强烈建议使用通用ctags来解析C ++代码,它甚至可以理解C ++ 11的构造。

如果您的.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设置所需的clang标志。 您可以生成编译数据库,但是在添加新文件时,需要重新创建编译数据库。

注意.ycm_extra_conf.py是一个python文件,因此您也可以动态生成标志。 在我的开发中,大多数标志是相同的,但是包含标志会更改。 因此,我使用全局.ycm_extra_conf.py生成用于在项目中包括所有.h文件的标志。 这样,通常我不需要创建.ycm_extra_conf.py ,所有完成和goto函数都可以正常工作。

您可以下载我的全局.ycm_extra_conf.py ,并更改一些固定标志作为您的喜好,然后将其放置到项目根目录或将其设置为全局,这样您就可以完成工作了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM