我刚刚发现了vim的taglist插件,并阅读了如何将它与ctags一起使用.
然而,令人失望的是ctags是一个非常简单的解析器.
有没有更完整的替代方案?
具体来说,我正在寻找一些东西:
扩展#define(x, y) x ## y函数声明的样式宏
处理#include陈述
允许为依赖项指定包含路径
我看到clang提供了一个用于访问c AST的程序api,所以这肯定不是很难吗?
有人已经做过吗?
-
编辑:
这些不削减它:
clang_indexer - 不编译; 什么时候(黑客攻击后),不起作用(无休止的错误).
clang_complete - 似乎没有比ctags好.没有特定于上下文的建议,没有结构完成,没有函数参数,没有宏扩展; 只是一个符号列表和它们来自的文件.
ldo*_*dog 24
我花了很多时间自己挣扎.
我得到的最接近的是gccsense.不幸的是,该项目似乎已被放弃,而且很难设置它,因为英语不是作者的第一语言.
我最后从另一个角度来解决这个问题.我决定智能感知/自动完成对于我的编码比拥有vim的所有可用功能更重要,所以我选择了像Eclipse这样的IDE,然后找到了一个模拟Vim的Eclipse插件.到目前为止,我发现的最好的插件是Viable.
以下是我尝试过但发现不满意的完整选项列表:
如果您确实找到了您满意的解决方案,请在评论中分享,因为我会对此感兴趣.
我自己还没有尝试过,但clang_indexer似乎非常接近你所寻找的(来源).它仍然使用外部数据库(即本身不进行索引),但它似乎提供了通常只能找到的功能cscope(它不能很好地支持C++).
对于自动完成,我使用clang_complete.它不需要生成索引,并且大部分时间都可以正常工作.它还可以在vim中进行自动语法检查,以便警告可能出现的问题.它不会自动完成您提供的宏示例
#define blah(x) blah__ ## x
void blah_<TAB>
Run Code Online (Sandbox Code Playgroud)
因为bla__x虽然(只blah(x)).这可能是更好的配置,但我不会认为这也打破了.