我如何使vim标签跳跃像OmniCppComplete一样智能

How can I make vim tag jumps as smart as OmniCppComplete?

本文关键字:智能 一样 OmniCppComplete 何使 vim 标签 跳跃      更新时间:2023-10-16

我像这样生成我的标签(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);
    }
};

(代码来自于quaria的开源版本)

如果我在offset上标记跳转(Ctrl-]),那么我在代码库中得到每个offset的列表。在我输入offset.shiftRight()的末尾后,OmniCppComplete开始提供仅针对InterpolatedVector的补全。

如何使我的标签跳跃像OmniCppComplete一样智能?

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

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

你可以在这里下载:

https://github.com/MarcWeber/SmartTag

要能够使用它与Ctrl-],你将需要使用一个Vim发布与标签函数补丁应用。在这里:

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