Vim script で明示的に補完ウィンドウを呼び出す
昨日、Lingr の Vim 部屋で出てきてたのですが Vim script の組み込み関数に complete() というのがあります。
:help complete() complete({startcol}, {matches}) *complete()* *E785* 挿入モード補完の候補を設定する。 挿入モードでのみ使用できる。CTRL-R = |i_CTRL-R|と組み合わせて マッピングを作る必要がある。CTRL-Oの後や、<expr>マッピングの中 では正しく動作しない。 {startcol}は補完すべき単語の開始位置を示す、行内のバイトオフセッ トである。その位置からカーソルまでのテキストが補完すべき単語と なる。 {matches}はリスト|List|でなければならない。リストの各要素が1つ の候補となる。この要素として許される値については |complete-items|を参照。 Note この関数を呼んだ後は補完を停止させるようなテキストの挿入 をしないように注意しなければならない。 この関数で設定した候補は普通の挿入モード補完と同じ様にCTRL-Nと CTRL-Pで選択できる。設定されていればポップアップメニューが表示 される。|ins-completion-menu|を参照。 例: > inoremap <F5> <C-R>=ListMonths()<CR> func! ListMonths() call complete(col('.'), ['January', 'February', 'March', \ 'April', 'May', 'June', 'July', 'August', 'September', \ 'October', 'November', 'December']) return '' endfunc < この例はそれほど役には立たないが、使い方を示している。Note 0が 挿入されてしまわないように空文字列を返していることに注意。
これを利用すれば明示的に任意の候補の補完ウィンドウを呼び出す事ができます。
使い方は上のヘルプに載っている通り補完位置と補完候補のリストを渡して呼び出します。
コード補完とか 'omnifunc' に設定しないでこれで呼び出してしまった方が楽なのではないだろうか。