gpt4 book ai didi

vim - vim 中类型推断的 ctags 跳转可能吗?

转载 作者:行者123 更新时间:2023-12-02 14:58:02 24 4
gpt4 key购买 nike

给出以下代码:

// 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() 而不是给我提供一个选择列表?看来应该有这样的插件,只是我找不到它。

更新:目前看来这个问题还没有解决办法,所以我选择了下面exlipy的答案。如果出现解决方案并提供新答案,我将更新此问题的答案。

最佳答案

除非 Vim 能够像 C++ 编译器那样真正解析整个 C++ 翻译单元,否则您想要做的事情是不可能的。这远远超出了 ctags 的范围,它使用非常简单的启发式方法仅标记光标附近的区域。

所以显而易见的解决方案是...将 C++ 解析器插入 Vim!实际上有一个名为 clang_complete 的插件,它已经完成了 Hook Clang C++ 解析器的大部分繁重工作。在此基础上,扩展它以使用 Clang API 来实现跳转到定义应该是一件简单的事情。

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

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

关于vim - vim 中类型推断的 ctags 跳转可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com