5

我像这样生成我的标签(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 的开源版本。)

如果我标记跳转offsetCtrl- ]),那么我会在我的代码库中得到一个列表offset。在我输入offset.到结尾之后shiftRight(),OmniCppComplete 开始只为InterpolatedVector.

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

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

4

1 回答 1

2

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

你可以在这里下载:

https://github.com/MarcWeber/SmartTag

为了能够与 Ctrl-] 一起使用,您需要使用应用了 tagfunc 补丁的 Vim 版本。它在这里:

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

于 2011-12-01T22:58:53.803 回答