補完コマンドは、たくさんの可能性のある補完候補を、ミニバッファーに入力したものとマッチ(match)する、より少ないサブセットへと絞り込むことにより機能します。補完の例では、そのようなマッチングの簡単な例を紹介しました。どのような構成がマッチなのかを決定する手続きはとても複雑です。Emacsは多くの状況下でもっとも妥当と思われる補完を試みます。
Emacsは1つ以上の補完スタイル(completion styles)を使って補完をおこないます。これはミニバッファーのテキストを補完候補とマッチングするための条件のセットです。補完を行うとき、Emacsは補完スタイルを順番に試します。もしあるスタイルが1つ以上のマッチを獲得した場合、それらは補完候補リストのために使用されます。もしあるスタイルがマッチを獲得できなかった場合、Emacsは次のスタイルにフォールバックします。
リスト変数completion-styles
は、使用する補完スタイルを定義します。それぞれのリスト要素(list
element)は、補完スタイルの名前(Lispシンボル)です。利用できるスタイルシンボルは変数completion-styles-alist
に格納されています(Completion
Variables in The Emacs Lisp Reference Manualを参照)。デフォルトの補完スタイルは順番に:
basic
¶ミニバッファーのポイントより前のテキストと、補完候補の先頭が同じでなければなりません。さらにミニバッファーのポイントより後ろのテキストがある場合、補完候補の残りそれが含まれていなければなりません。
partial-completion
このアグレッシブな補完スタイルは、ミニバッファーのテキストをハイフンまたは空白で区切り、各単語ごとに補完をおこないます(たとえばコマンド名を補完する場合、‘em-l-m’は、‘emacs-lisp-mode’に補完されます)。
さらにミニバッファーのテキスト中の‘*’は、ワイルドカード(wildcard)として扱われます。これは補完候補の対応する位置にある文字列の、任意の文字とマッチします。
emacs22
¶この補完スタイルはbasic
とにていますが、ミニバッファーのポイントより後のテキストを無視します。この名前は補完の動作がEmacs
22と同じだからです。
以下の追加の補完スタイルが定義されており、completion-styles
に追加することもできます(カスタマイズを参照してください)。
substring
¶補完候補は、ミニバッファーのポイントより前のテキストと、ポイントより後のテキストが同じ順番で含まれていなければなりません。
したがって、ミニバッファーのテキストが‘foobar’で、ポイントが‘foo’と‘bar’の間にある場合、‘afoobbarc’にマッチします。この場合a、b、cは空文字列を含む任意の文字列です。
flex
¶このflx
、fuzzy
、またはscatter
のような補完としても知られるアグレッシブな補完は部分文字列を順に使用することにより補完を試みます。たとえば‘foo’は、‘frodo’や‘fbarbazoo’にマッチするとみなすことができます。
initials
¶このとてもアグレッシブな補完スタイルは、頭文字とイニシャルで補完を試みます。たとえばコマンド名の補完をする場合、‘lch’は‘list-command-history’とマッチします。
emacs21
と呼ばれる、とてもシンプルな補完スタイルもあります。このスタイルでは、ミニバッファーのテキストが‘foobar’の場合、‘foobar’で始まるものだけにマッチします。
変数completion-category-overrides
を設定することにより、状況に応じて異なる補完スタイルを使うことができます。たとえばバッファー名を補完するときは、デフォルトでbasic
とsubstring
だけを使うよう指定できます。