auto-complete.elが曖昧マッチに対応

auto-complete.elを曖昧マッチに対応させるため、今回からfuzzy.elという拡張が同封されるようになりました。この拡張は必須ではありませんが、曖昧マッチを使う場合は必要になります。

曖昧マッチで補完を行うにはac-fuzzy-completeコマンドを実行します。このときカーソルが赤色になりますが、これが曖昧マッチで補完を行っていることを表わしています。

曖昧マッチによる補完はauto-completeコマンドからでも行うことができます。このとき曖昧マッチを使うかどうかのフラグであるac-use-fuzzy変数がtである必要があります。デフォルトはtなので、曖昧マッチを使いたくない人のみ適宜nilにしてください。auto-completeコマンドが実行されると、従来のマッチで補完候補の生成を試みますが、このときに一つも補完候補を生成できない場合のみマッチの方法を曖昧マッチに変更して補完候補の生成を仕直します。ac-fuzzy-completeコマンドと同様、カーソルが赤色になります。

曖昧マッチによる補完では文字入力によるパターンの更新が無効になります。パフォーマンスに問題があるからです。

以下にスクリーンショットを示します。このスクリーンショットが示すストーリーは、defaultを間違ってdefualtと入力し、補完が一つも表示されないからauto-completeコマンドで曖昧マッチによる補完を行って、無事目的の補完を行うことができた、というところでしょうか。

補足としてfuzzy.elの簡単な使いかたを説明しておきます。

fuzzy.elは曖昧マッチ用の関数と曖昧isearchの機能とで構成されています。主に使う関数は以下のようになります。

fuzzy-match関数は二つの文字列を引数にとり、ある程度同じであればtを返します。

fuzzy-edit-distance関数は二つの文字列を引数にとり、それらの編集距離を返します。

fuzzy-search-forward関数は引数の文字列でバッファを曖昧に前向き検索を行い、マッチしたポイントを返します。

fuzzy-search-backward関数は引数の文字列でバッファを曖昧に後ろ向き検索を行い、マッチしたポイントを返します。

fuzzy.elの曖昧isearchの機能を利用すれば、標準のisearchが一定関数フェイルしたときに、自動的に曖昧にisearchを行うようになります。この機能を有効にするにはturn-on-fuzzy-isearch関数を呼びだします。この機能を無効にするにはturn-off-fuzzy-isearch関数を呼びだします。曖昧isearchはうまくキャッシュを利用しているので、かなり大きなバッファでも快適に検索することができます。