如何使vim标签跳转像OmniCppComplete一样智能?

时间:2011-11-25 17:30:03

标签: 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>完全相同?)是否存在使其具有上下文感知能力的替代方案?

1 个答案:

答案 0 :(得分:2)

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

您可以在此处下载:

https://github.com/MarcWeber/SmartTag

为了能够使用Ctrl-],您需要使用带有tagfunc的Vim版本 补丁已应用。就在这里:

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