vim无法跳转模板功能的定义导航

时间:2016-10-14 03:33:35

标签: vim ctags youcompleteme

我有一个包含以下代码的.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 

它有效,谢谢。

1 个答案:

答案 0 :(得分:1)

上次我查看过,YCM对源代码的理解仅限于一个翻译单元。它很难找到定义函数的位置,因为它可能在另一个翻译单元中。

换句话说,只要您想要跳转到与当前正在编辑的文件相同的.cpp文件中的定义,它就应该有效。 因此,它也应该在尝试从其调用站点访问模板函数定义时起作用 - 因为我们应该包含相关代码。如果没有,则可能与YCM正在使用的clang引擎对源代码的不正确理解有关,或者与YCM未配置为使用clang有关。

关于标签,它们可以完成这项工作,但实际上,在C ++中,您需要一种方法来缩小所呈现的标签。这就是我开始的lh-tags:它提供了所有匹配的标签,它允许根据各种标准(文件名,种类,范围......)过滤它们。