Vim の omnicppcomplete に、引数を取らない関数またはメソッドの引数リストを自動的に閉じるようにすることは可能ですか?
たとえば、v
が STL ベクトルであると仮定するとv.clear()
、 をオートコンプリートすると、次のようになります。
v.clear(
閉じ括弧が自動的に追加されるとよいでしょう。これは可能ですか?
Vim の omnicppcomplete に、引数を取らない関数またはメソッドの引数リストを自動的に閉じるようにすることは可能ですか?
たとえば、v
が STL ベクトルであると仮定するとv.clear()
、 をオートコンプリートすると、次のようになります。
v.clear(
閉じ括弧が自動的に追加されるとよいでしょう。これは可能ですか?
可能なようです: 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 )
165行目を置き換えるだけです:
let szItemWord .= '('
と
let szItemWord .= tagItem['signature']
このようにして、関数名ではなくコード内のプロトタイプ全体を取得し、パラメーターを 1 つずつ置き換えます。