我的omnicppcomplete运行得很好,除了偶尔它不能完成一些变量、方法/成员。我最终被激怒了,深入挖掘原因,我相信原因是omnicppcomplete在函数参数中支持语法"Foo const & foo“。
例如,如果我有一个函数定义为:
int foo( Bar const & b ){
}当我稍后输入“b”时,我将无法获得完成信息。但是,如果我将签名更改为:
int foo( const Bar & b ){
}当我键入"b.“时,我将能够获得完成信息。它似乎只出现在函数参数列表中,因为我尝试使用签名"Bar const & bref“在函数中简单地定义一个变量,并且我能够获得bref的完成信息。
如果这是omnicppcomplete的一个实际限制,我会感到惊讶;有人知道这是否是一个bug和/或是否有解决方法?改变编码风格似乎不是一个合理的解决方案。
发布于 2011-06-24 11:26:43
这似乎是omnicppcomplete中的一个限制,但我调出了vim调试器并找到了它。
打开autoload/omni/cpp/utils.vim,转到第518行,应该如下所示:
for token in tokens
if state==0
if token.value=='>'
let parenGroup = token.group
let state=1
elseif token.kind == 'cppWord'
let szResult = token.value.szResult
let state=2
elseif index(['*', '&'], token.value)<0 "This is line 518
break
endif并将该行更改为:
elseif token.value != 'const' && index(['*', '&'], token.value)<0或者,下面是执行此操作的vim命令=):
/index(\['\*', '&'],<CR>itoken.value != 'const' &&<ESC>:w我会试着把这个提交给omnicppcomplete的维护者,但这有点老生常谈,不知道它是否会被接受。也许可以检查token.kind == 'cppKeyword',但我认为我的错误是更改得最少。
发布于 2011-05-18 21:57:19
在遇到omnicppcomplete的问题后,我搜索了一种替代方案,找到了使用clang的元数据输出的clang complete (这就是为了达到这样的目的)。我工作得非常好,只要你的代码编译好了,它就会理解一切。
https://stackoverflow.com/questions/5823317
复制相似问题