在vim中是否可以进行类型推断CTAG跳跃?

在vim中是否可以进行类型推断CTAG跳跃?,vim,syntax,Vim,Syntax,给定以下代码: // MyClass.h class A { void foo(); } class B { void foo(); } // MyClass.cpp void main() { A a(); a.foo(); } 考虑到我正在使用vim并生成CTAG,如果我将光标放在main()中的foo()上并点击ctrl+],我将得到foo的实现列表,因为有多个实现。如果只有一个,那么它将立即跳转到该实现 在vim中是否有一种方法可以推断a的类型,这样

给定以下代码:

// MyClass.h
class A {
    void foo();
}

class B {
    void foo();
}

// MyClass.cpp
void main() {
    A a();
    a.foo();
}
考虑到我正在使用vim并生成CTAG,如果我将光标放在
main()
中的
foo()
上并点击
ctrl+]
,我将得到
foo
的实现列表,因为有多个实现。如果只有一个,那么它将立即跳转到该实现

在vim中是否有一种方法可以推断
a
的类型,这样当我点击
ctrl+]
时,它会立即跳转到
a::foo()
的实现,而不是向我提供一个选择列表?这似乎是这样一个插件应该存在,我只是无法找到它


更新:目前似乎没有解决这个问题的方法,所以我选择了下面exclipy的答案。如果一个解决方案本身存在,并且可以提供一个新的答案,我将更新这个问题的答案。

除非你可以解析整个C++翻译单元,否则C++是一个C++编译器。这远远超出了ctags的范围,ctags使用非常简单的启发式方法来仅标记光标附近的区域

所以最明显的解决办法是。。。将C++解析器插入VIM!实际上有一个插件叫做CLANGONGONE,它已经完成了大部分钩子到CLAN C++解析器中的重启。在此基础上,扩展它以使用ClangAPI实现跳转到定义应该是一件简单的事情

事实上,我已经通过两个项目开始研究这样一个功能:,它爬网源树以在磁盘上构建索引,以及我的fork of,它添加了查询索引以了解光标下符号的用法的功能。这实际上比您想要的要多一些,因为我的目标是“查找所有引用”功能(可以选择将结果过滤为定义)


这是一个非常早期的阶段,我只是为自己做的,所以不要期望它是非常完美的解决方案。

我还没有看到任何允许这样做的东西。它可以通过python的基于脚本的插件实现。但是我不确定,所以我不会留下答案。我可能一直在想象一些事情,但是对于C代码,我有这样的印象(可能是因为本地标记文件比其他标记文件先搜索,可能是因为它可以根据邻近性选择标记)?无论如何,我仔细阅读了
:tnext
,并在导航时经常将其映射到一个键。我使用了Xavier Deguillard的clang_complete.vim。它工作得很完美,但我想要的是跳转到定义并找到所有引用。很高兴看到你正在做这件事。在某个地方如何使你的叮当索引器和叮当一起完成工作?听起来很有希望。谢谢