2016年12月19日月曜日

[Vim] あいまい補完プラグイン

いい加減な単語のつづりでも適当に補完してくれるプラグインを作っています。

作成したのはかなり前になりますが、私自身、今現在でも便利に使っていますので紹介します。

AmbiCompletion : Ambiguous completion



概要

バッファの中にある、補完対象の単語と「近い」単語を候補とします。

主に英単語や、プログラムの関数・変数の補完を目的としています。
長い名前の単語を入力する場合、単語の一部を入力して、このプラグインを使って補完するのがユースケースです。

補完前: ng_wd_tb_cpleted
→ 補完後: long_word_tobe_completed 
※補完後の単語が編集中のバッファに存在することが前提です。
気づかずに単語の途中をミスタイプしていて、思うように補完できずにイライラした経験があるのではないでしょうか?
AmbiCompletion を使う場合、上の例にあるように、多少文字が欠けていても補完がされます。
また、単語の先頭文字が一致している必要もありません。

日本語も補完対象になります。
その場合、Vim が単語を区切る単位(wやeといった移動で、その区切りが分かります)での補完になります。
おおよそ、ひらがな・カタカナ・漢字といった単位での補完になります。

補完のされ方

このプラグインのアイディアの元は、「Word Fuzzy Completion」という補完プラグインです。

レーベンシュタイン距離の考え方に沿って、同じバッファの中にある単語の中からある程度近いものを補完候補とします。

差異:

  • 評価方法を変更し、単語の先頭が一致していなくても候補とできる
  • また、連続して一致する文字が多い(似通った単語)ほど高い評価になる
  • +python が不要(全て Vim Script で実装)
  • 速度改善

補完する際のバッファ中にある単語を候補として保管をするため、どうしても速度が犠牲になります。
そのため、単語の集合をキャッシングしたり、単語の収集をカーソル周辺の行に限定したりできるような機能を設けています。

また、最近では、指定したバッファも補完候補の単語の収集対象とできるようになってきています。

まとめ

プログラミングで長い変数名・関数名をタイピングするのが面倒な方は、ぜひどうぞ。

AmbiCompletion : Ambiguous completion