有没有替代ctags更好的?

Dou*_*oug 38 vim ctags

我刚刚发现了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 - 要求你从gcc切换到另一个"更好"的编译器.问题是gcc更成熟[ 编辑显然你不需要切换编译器看下面的评论,我可能会在将来再试一次.]
  • gccsense - 很棒的主意(使用gcc为你提供代码完成)然而,该项目的工作被放弃了:(而且版本是beta版本
  • vref中的外部参照 - 外部参照是一个很好的独立工具,非常适合解析C.它可以在vim中使用vxref工作,但是从我的经验来看,xref缺乏解析当前C++代码并且它的开发已经停止(以及开发)在vxref上.)
  • eclim - 使用eclipse似乎非常适合Java支持,在解析C++或C代码时非常慢且完全不可靠.通常发生的事情是一切都工作了很长一段时间,但突然间,解析器停止解析你编写的任何新代码,并且没有任何东西加载eclipse本身并迫使eclipse重新解析项目似乎有所帮助.此外,不是一个重要的事实,但更令人烦恼的是eclim接管处理错误,所以它搞砸了vim通常从gcc解析错误的方式,这意味着你无法访问令人讨厌的quickfix列表.
  • netbeans + jvi - 很多人发誓,但我有各种各样的jvi问题.我遇到的一个主要问题是jvi会说我处于正常模式,但实际上处于插入模式,没有任何重启会有所帮助.
  • eclipse + viplugin/vrapper - 这开始看起来是最好的选择; 每个都有自己的一组错误+缺乏功能,但仍然是最有吸引力的,直到我发现可行,这似乎是最稳定和最具特色.

如果您确实找到了您满意的解决方案,请在评论中分享,因为我会对此感兴趣.

  • `clang_complete`使用libclang来解析C++或C代码,即不调用clang.clang还支持我遇到的所有为g ++编写的代码(可能在禁用某些警告之后).但就像我写的那样,clang不是由clang_complete调用的. (3认同)
  • @Doug:我知道这已经很晚了,但是我很确定你可以通过gcc从手册中完成宏扩展:"-E在预处理阶段之后停止;不要正确运行编译器.输出是在表单中预处理源代码,发送到标准输出." (2认同)

Ben*_*ier 7

我自己还没有尝试过,但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)).这可能是更好的配置,但我不会认为这也打破了.