我有omnicppcomplete工作正常,除了偶尔它不会完成一些变量方法/成员.我终于厌倦了深入研究为什么,我相信原因是omnicppcomplete确实支持函数参数中的语法"Foo const&foo".
例如,如果我将函数定义为:
int foo( Bar const & b ){
}
Run Code Online (Sandbox Code Playgroud)
当我稍后输入"b."时,我将无法获得完成信息.但是,如果我将签名更改为:
int foo( const Bar & b ){
}
Run Code Online (Sandbox Code Playgroud)
当我输入"b."时,我将能够获得完成信息.它似乎只是在函数参数列表中,因为我尝试使用签名"Bar const&bref"在函数中定义一个变量,并且我能够获得bref的完成信息.
如果这是omnicppcomplete的实际限制,我会感到惊讶; 任何人都不知道这是否是一个错误和/或是否有解决方法?改变编码风格似乎不是一个合理的解决方案.
我生成我的标签(Exuberant Ctags 5.9~svn20110310),如下所示:
ctags --c++-kinds=+p --fields=+iaS --extra=+q -L ctags.files
Run Code Online (Sandbox Code Playgroud)
我大致有这个类结构:
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);
}
};
Run Code Online (Sandbox Code Playgroud)
(代码来自Aquaria的开源版本.)
如果我标记跳转offset(Ctrl- ]),那么我offset在代码库中得到一个列表.输入offset.结束后shiftRight(),OmniCppComplete仅开始提供完成InterpolatedVector.
如何让我的标签像OmniCppComplete一样聪明?
只是标签跳转不使用任何上下文,所以他们只知道符号名称?(它是否完全相同:tag <C-r><C-w><CR>?)是否存在使其具有上下文感知能力的vim替代方案?