c++ - 如何使 vim 标签跳转与 OmniCppComplete 一样智能?

标签 c++ vim ctags exuberant-ctags omnicppcomplete

我像这样生成我的标签(Exuberant Ctags 5.9~svn20110310):

 ctags --c++-kinds=+p --fields=+iaS --extra=+q -L ctags.files

我大致有这样的类结构:

class RenderObject
{
    InterpolatedVector offset;
};

class Quad : public RenderObject
{
};

class KeyframeWidget : public Quad
{
    void shiftRight()
    {
        if (!offset.isInterpolating())
            offset.interpolateTo(Vector(offset.x+80, 0), 0.1, 0, 0, 0);
    }
};

(代码来自Aquaria's open source release。)

如果我在 offset 上标记跳转(Ctrl-]),然后我每 offset 得到一个列表在我的代码库中。在我输入 offset. 之后到 shiftRight() 结束, OmniCppComplete 开始只为 InterpolatedVector 提供补全.

如何让我的标签跳转像OmniCppComplete一样智能? ?

难道只是标签跳转不使用任何上下文,所以它们只知道符号名称? (它与 :tag <C-r><C-w><CR> 完全相同吗?)是否有 vim 替代方案使它们具有上下文感知能力?

最佳答案

我最近开始使用 Vim 的 SmartTag 插件,发现它非常擅长使用来自周围 C++ 代码的上下文信息来找到正确的标签。

你可以在这里下载:

https://github.com/MarcWeber/SmartTag

为了能够通过 Ctrl-] 使用它,你需要使用带有 tagfunc 的 Vim 版本 补丁应用。它在这里:

http://llorens.visualserver.org/vim73-tagfunc.zip

关于c++ - 如何使 vim 标签跳转与 OmniCppComplete 一样智能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8272458/

相关文章:

shell - 谁调用这个函数?

c++ - 使用空字符串 ""创建 std::locale

c++ - 可以在 C++ 代码而非 C 代码上完成 'easily' 的编译器优化示例

c++ - 在 C++ Qt 中坚持使用 prepare() 和 bindvalue()

ios - 通过 applescript(osascript) 运行 Xcode

go - 配置 ctags 以显示 go 源文件中的导入

C++设计,如何用对象表示协议(protocol)的不同阶段

vim - 文本编辑器-缩小到多个页面

c++ - 在 Mac OS 中使用 vim 单键编译和运行 C++ 代码

c++ - 为 libstdc++ 生成 CTAGS(来自当前的 GCC)