首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >omnicppcomplete不支持所有形式的const

omnicppcomplete不支持所有形式的const
EN

Stack Overflow用户
提问于 2011-04-29 02:31:10
回答 2查看 274关注 0票数 6

我的omnicppcomplete运行得很好,除了偶尔它不能完成一些变量、方法/成员。我最终被激怒了,深入挖掘原因,我相信原因是omnicppcomplete在函数参数中支持语法"Foo const & foo“。

例如,如果我有一个函数定义为:

代码语言:javascript
复制
int foo( Bar const & b ){
}

当我稍后输入“b”时,我将无法获得完成信息。但是,如果我将签名更改为:

代码语言:javascript
复制
int foo( const Bar & b ){
}

当我键入"b.“时,我将能够获得完成信息。它似乎只出现在函数参数列表中,因为我尝试使用签名"Bar const & bref“在函数中简单地定义一个变量,并且我能够获得bref的完成信息。

如果这是omnicppcomplete的一个实际限制,我会感到惊讶;有人知道这是否是一个bug和/或是否有解决方法?改变编码风格似乎不是一个合理的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-24 11:26:43

这似乎是omnicppcomplete中的一个限制,但我调出了vim调试器并找到了它。

打开autoload/omni/cpp/utils.vim,转到第518行,应该如下所示:

代码语言:javascript
复制
  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

并将该行更改为:

代码语言:javascript
复制
 elseif token.value != 'const' && index(['*', '&'], token.value)<0

或者,下面是执行此操作的vim命令=):

代码语言:javascript
复制
/index(\['\*', '&'],<CR>itoken.value != 'const' &&<ESC>:w

我会试着把这个提交给omnicppcomplete的维护者,但这有点老生常谈,不知道它是否会被接受。也许可以检查token.kind == 'cppKeyword',但我认为我的错误是更改得最少。

票数 4
EN

Stack Overflow用户

发布于 2011-05-18 21:57:19

在遇到omnicppcomplete的问题后,我搜索了一种替代方案,找到了使用clang的元数据输出的clang complete (这就是为了达到这样的目的)。我工作得非常好,只要你的代码编译好了,它就会理解一切。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5823317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档