前回に引き続き今回も vim のプラグインの紹介です。循環補完というあやしいテクノロジーを編み出しました。
今回もソースは bitbucket に置いてあります。
https://bitbucket.org/anyakichi/vim-circomp
さて、vim で使用可能な補完には、いろいろなタイプがあります。編集中のバッファの中から単語を補完したり、オムニ補完で文脈にマッチした補完をしたり、ファイル名を補完したり、などなど。
これらの補完は便利は便利なのですが、欠点もあります。主要なものとしては以下のようなところでしょうか。
- C-x をプレフィックスとしたキーが押しづらい
- オムニ関数等が設定されているかどうかわからない
- 'complete' の項目を増やすと C-n の generic completion は重い
最近流行りの自動補完プラグインも上記に対する有効なアプローチで、これらを使用すれば、上位 2 つは解決されると思います。
その他、補完自体をもう少しカジュアルに、「とりあえずオムニで探してみて、なければ別のバッファから、それでもなければタグから補完候補が欲しい」みたいな探し方ができればいいと思っていました。というところで試作してみたのが、今回紹介するプラグインになります。
ということで使用例を説明しましょう。まず、.vimrc を編集するような状況を考えます。実際これは私の .vimrc の一部です。

ここで C-k をタイプすると補完が開始され、以下のように C-x C-v 補完が行われます。

次に C-i (Tab) をタイプすると、次の補完モードに遷移します。ここでは C-x C-o のオムニ補完(syntaxcompleteを使用)になります。

さらに C-i (Tab) をタイプすると、C-n による補完に遷移します。

ここで1つ前の補完モードに戻りたい場合には、C-a をタイプします。

と、機能はこれだけです。
ちなみに、デフォルトだと補完モードは C-x C-u → C-x C-o → C-n → C-x C-] → C-x C-i → C-x C-d → C-x C-k → C-x C-t → C-x C-f → C-x C-s と遷移します。最後まで行くと先頭に戻ります。この順序についてはユーザが変更可能です。また、補完候補のないモードについては自動的にスキップされるので、「何か出てくるまで探す」必要はありません。
この循環補完システムを使用すると、'complete' で include ファイルや tags の中まで補完させなくても、必要なときに補完を進めればいいだけなので、C-n による補完を必要最小限に抑えることができるようになります。
また、私自身は自動補完は使っていないのですが、自動補完を使用している場合でも出てきた候補が気に入らなければ別のモードに移すという使い方もできると思います。
最後に、デフォルトのマッピングはチュートリアル用で使いやすくはないと思うので、私の使用しているマッピング(画像 1 枚目)も参考にしてみてください。