Как сделать прыжки с тегов vim такими же умными, как OmniCppComplete? - PullRequest
5 голосов
/ 25 ноября 2011

Я генерирую свои теги (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релиз с открытым исходным кодом .)

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

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

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

1 Ответ

2 голосов
/ 02 декабря 2011

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

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

https://github.com/MarcWeber/SmartTag

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

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

...