¿Cómo puedo hacer saltos de tags vim tan inteligentes como OmniCppComplete?

Generé mis tags (Exuberant Ctags 5.9 ~ svn20110310) de esta manera:

ctags --c++-kinds=+p --fields=+iaS --extra=+q -L ctags.files 

Tengo aproximadamente esta estructura de clase:

 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); } }; 

(El código es de la versión de código abierto de Aquaria ).

Si etiqueto saltar en offset ( Ctrl] ), obtengo una lista de cada offset en mi base de código. Después escribo offset. hasta el final de shiftRight() , OmniCppComplete comienza a ofrecer terminaciones solo para InterpolatedVector .

¿Cómo puedo hacer que mi etiqueta salte tan inteligente como OmniCppComplete ?

¿Es solo que los saltos de etiqueta no usan ningún contexto, por lo que solo conocen los nombres de los símbolos? (¿Es exactamente el mismo que :tag ?) ¿Existe una alternativa de vim que los haga conscientes del contexto?

Recientemente comencé a usar el complemento SmartTag para Vim y encuentro muy bueno el uso de información contextual del código C ++ circundante para encontrar la etiqueta correcta.

Puedes descargarlo aquí:

https://github.com/MarcWeber/SmartTag

Para poder usarlo con Ctrl-] necesitará usar una versión de Vim con el parche tagfunc aplicado. Esta aquí:

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