2

Vim の omnicppcomplete に、引数を取らない関数またはメソッドの引数リストを自動的に閉じるようにすることは可能ですか?

たとえば、vが STL ベクトルであると仮定するとv.clear()、 をオートコンプリートすると、次のようになります。

v.clear(

閉じ括弧が自動的に追加されるとよいでしょう。これは可能ですか?

4

2 に答える 2

3

可能なようです: omnicppcomplete スクリプトの最新バージョンを持っているかどうかはわかりませんが、私autoload/omni/cpp/complete.vimの には という関数がありますs:ExtendTagItemToPopupItem。この関数には、次のものがあります。

" Formating information for the preview window
if index(['f', 'p'], tagItem.kind[0])>=0
    let szItemWord .= '('
    if g:OmniCpp_ShowPrototypeInAbbr && has_key(tagItem, 'signature')
        let szAbbr .= tagItem.signature
    else
        let szAbbr .= '('
    endif
endif

行 (私のバージョンでは #165) のlet szItemWord .= '('後に、次を追加します。

    if (has_key(tagItem, 'signature') == 0) || (tagItem['signature'] =~ '()')
        let szItemWord .= ')'
    endif

これでうまくいくはずです (ただし、私は C++ をあまり使用しないため、広範囲にテストしていません)。基本的に、関数の「署名」に「()」ではなく「」が含まれているかどうかをチェックします(int *major, int *minor)。括弧が空の場合、閉じ括弧が追加されます。

'()'完全を期すために に変更することでおそらく改善される可能性があります。これにより、「 」、 「」、「」、「」など'(\s*\(void\)\?\s*)'がチェックされます。()( )(void)( void )

于 2009-11-30T17:46:40.433 に答える
1

165行目を置き換えるだけです:

let szItemWord .= '('

let szItemWord .= tagItem['signature']

このようにして、関数名ではなくコード内のプロトタイプ全体を取得し、パラメーターを 1 つずつ置き換えます。

于 2011-05-24T11:42:57.860 に答える