我有一个包含以下代码的.h文件:
template<BLA>
func1() {}
// something
template<BLA>
func2() {
func1();
}
当我输入命令GoToDefinition时,出现错误:“YCM:'RuntimeError:无法跳转到定义。'”。 我错过了什么吗?以及如何找到定义?
顺便说一句,我在.vimrc中有这个:
let g:ycm_global_ycm_extra_conf = ' ~/ycm_extra_conf.py'
**************第二次编辑*******************
我重新安装了我的YCM,并通过此命令尝试了用于YCM的ctags:
ctags -R --fields=+l
它有效,谢谢。
答案 0 :(得分:1)
上次我查看过,YCM对源代码的理解仅限于一个翻译单元。它很难找到定义函数的位置,因为它可能在另一个翻译单元中。
换句话说,只要您想要跳转到与当前正在编辑的文件相同的.cpp文件中的定义,它就应该有效。 因此,它也应该在尝试从其调用站点访问模板函数定义时起作用 - 因为我们应该包含相关代码。如果没有,则可能与YCM正在使用的clang引擎对源代码的不正确理解有关,或者与YCM未配置为使用clang有关。
关于标签,它们可以完成这项工作,但实际上,在C ++中,您需要一种方法来缩小所呈现的标签。这就是我开始的lh-tags:它提供了所有匹配的标签,它允许根据各种标准(文件名,种类,范围......)过滤它们。