6

omn​​icppcomplete は正常に動作していますが、変数のメソッド/メンバーの一部が完了しない場合があります。私は最終的にその理由を掘り下げるのに十分なほどイライラしました。その理由は、omnicppcomplete が関数の引数で構文「Foo const & foo」をサポートしているためだと思います。

たとえば、次のように定義された関数があるとします。

int foo( Bar const & b ){
}

後で「b.」と入力しても、完了情報を取得できません。ただし、署名を次のように変更すると:

int foo( const Bar & b ){
}

「b.」と入力すると、完了情報を取得できます。「Bar const & bref」というシグネチャを使用して関数内で単純に変数を定義しようとしたところ、bref の補完情報を取得できたため、関数の引数リストにのみあるようです。

これが omnicppcomplete の実際の制限であるとしたら、私は驚くでしょう。これがバグであるかどうか、および/または回避策があるかどうかについて、誰か考えがありますか? コーディング スタイルを変更することは、合理的な解決策とは思えません。

4

2 に答える 2

4

omn​​icppcompleteの制限のようですが、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-06-24T03:26:43.237 に答える
2

omn​​icppcomplete で問題が発生したので、代替案を探したところ、clang のメタデータ出力 (このような目的を意図したもの) を使用するclang completeが見つかりました。私は非常にうまく機能し、コードがコンパイルされれば、すべてを理解します。

于 2011-05-18T13:57:19.360 に答える