Neg*_*_EV 6 c++ vim omnicppcomplete
我有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的实际限制,我会感到惊讶; 任何人都不知道这是否是一个错误和/或是否有解决方法?改变编码风格似乎不是一个合理的解决方案.
小智 4
似乎是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
Run Code Online (Sandbox Code Playgroud)
并将该行更改为:
elseif token.value != 'const' && index(['*', '&'], token.value)<0
Run Code Online (Sandbox Code Playgroud)
或者,这是执行此操作的 vim 命令 =):
/index(\['\*', '&'],<CR>itoken.value != 'const' &&<ESC>:w
Run Code Online (Sandbox Code Playgroud)
我会尝试将其提交给omnicppcomplete的维护者,但这有点黑客,不知道它是否会进入。也许能够检查token.kind =='cppKeyword',但我想我会犯错站在改变最少的一边。