Как я могу сделать переходы тегов vim такими же умными, как 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 с открытым исходным кодом.)

Если я помечаю переход на offset (Ctrl-]), то я получаю список каждые offset в моей кодовой базе. После того, как я наберу offset. в конце shiftRight(), OmniCppComplete начнет предлагать завершения только для InterpolatedVector.

Как сделать так, чтобы мои теги переходили так же умно, как OmniCppComplete?

Просто переходы по тегам не используют никакого контекста, поэтому они знают только имена символов? (Это то же самое, что и :tag <C-r><C-w><CR>?) Есть ли альтернатива vim, которая делает их контекстно-зависимыми?


person idbrii    schedule 25.11.2011    source источник


Ответы (1)


Недавно я начал использовать подключаемый модуль SmartTag для Vim и обнаружил, что он очень хорошо использует контекстную информацию из окружающего кода C++ для поиска нужного тега.

Вы можете скачать это здесь:

https://github.com/MarcWeber/SmartTag

Чтобы иметь возможность использовать его с Ctrl-], вам нужно будет использовать выпуск Vim с примененным патчем tagfunc. Это здесь:

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

person Scott Smedley    schedule 01.12.2011