neocomplcacheでclang_completeを使うときに関数も補完するための設定

neocomplcacheとclang_completeを使って,純粋なC言語(*.c)で関数の補完をしたい.

つまり,"pri"と入力したら"printf f int printf(const char *restrict __format, ...)"と候補を表示して欲しい.

 

まず,neocomplcacheのvimrc設定サンプルに書いてあるneocomplcache_omni_patterns.cの設定をそのまま使うと,"."もしくは"->"の後でしか候補表示してくれないっぽい.重いからわざとこうしてる?

設定:

let g:neocomplcache_omni_patterns.c = '[^.[:digit:] *\t]\%(\.\|->\)'

 

これを次の設定にするとめでたく関数の候補表示ができるようになる.

設定:

let g:neocomplcache_force_omni_patterns.c = '[:alpha:]*'

 

でも,やっぱり表示がけっこう重かったり,意図しないところで候補表示が出てしまうので,"("が出てきた以降はclang_completeの候補表示(検索?)をしないような方針で設定する.

例えば,"read"までは候補を表示して欲しいけど"read("を入力して以降は候補表示しない.

 

が!!正規表現難しくて,なかなかうまくいかない.

とりあえず,

設定:

let g:neocomplcache_force_omni_patterns.c = '[:alpha:]*[^(]'

 

と設定すると,"read("を入力した時点で候補表示は消えてくれるのですが,"read(f"のように引数を入力し始めるとまた候補が表示され始めて,一文字入力するごとにかなり重くて困る.

引数入力時は,clang_compleの候補はいらないのに!

どうやって設定すればいいものか...

 

ついでに,次の設定だとサジェストが全くでなくなっちゃうのはなんでだー!(*_*)

let g:neocomplcache_force_omni_patterns.c = '[:alpha:]\+'