neocompleteでインテリセンスみたいなのをやりたかった
矢印キーの話。Vimなんだから矢印キーでカーソル移動するなよ、そんなにやりたきゃE○acs使えよって怒られそうですが。
初期状態だと、neocompleteは次のような場面で補完を開始しようとします。
- インサートモードに移行したとき
- インサートモードでカーソルが移動したとき(文字入力に由来するものも含む)
このため、インサートモード中にカーソルを移動すると、既存のコードを通り過ぎる時にも補完を開始してしまいます。おまけに上下キーは候補選択にも使うので、そこでカーソル移動できなくなってしまいます。結構うっとうしい。
で公式にもいくつかの方法が提示されています。
- 矢印キーをinoremapして、ポップアップ消したうえでカーソル移動するようにする
- カーソル移動ができない件は解決しますが、補完自体は発生しますし、候補を上下キーで選択できなくなります。
- カーソルが一定時間動かないときに発生するCursorHoldIイベントを使う
- 一度カーソルを止めてしまうと同じ状態になりますし、後述するバックスペース問題があります。文字入力による補完開始にもラグが発生しますが、これは好みですね。
- 文字入力時に発生するInsertCharPreイベントを使う
- カーソル移動で補完が始まらない、候補選択も上下キーでできる、となかなかいいことづくめですが、バックスペース問題があります。
バックスペース問題と言ったのは、バックスペースを押した時に補完続行できないこと。どうやらInsertCharPreではバックスペースを取得できず、カーソルの後退を検知しているみたいで。CursorHoldIは・・・なんでだろ。
https://github.com/Shougo/neocomplete.vim/issues/106
neocompleteの補完が消えた後に行補完モードになることがあるのも気になるなあ。。
https://github.com/Shougo/neocomplete.vim/issues/333 なるほど。