上記で説明したabbrev機能は、テキストの挿入にしたがい自動的に処理されますが、すべてのabbrevを明示的に定義しなければなりません。対照的に、動的abbrev(dynamic abbrevs)は、バッファーの内容から略語の展開結果を自動的に決定することができます、しかし動的abbrevの展開は、明示的に要求したときだけ行なわれます。
バッファーのポイントの前の単語を動的abbrevとして、その略語で始まる単語を検索することにより展開します(dabbrev-expand
)。
ポイントの前の単語を動的abbrevとして補完します(dabbrev-completion
)。
たとえばバッファーが‘does this follow ’が含んでいて、f o
M-/とタイプすると、これは‘follow’を挿入します。なぜならそれが‘fo’で始まる、そのバッファーの最後の単語だからです。M-/に数引数を指定すると、それはポイントから後方に検索して2番目、3番目、...の異なる展開結果を検索します。M-/を繰り返すと他の展開結果を後方に検索します。ポイントの前のテキストをすべて検索した後は、ポイントの後のテキストを検索します。変数dabbrev-limit
が非nil
の場合、それはバッファーの中で展開結果を探す範囲を指定します。
カレントバッファーを検索した後、通常M-/は他のバッファーを検索します。dabbrev-check-all-buffers
とdabbrev-check-other-buffers
は、他のバッファー(もし存在するなら)のどれが検索されたか決定するのに使用できます。dabbrev-ignored-buffer-modes
のいずれかのモードから派生したメジャーモードをもつバッファーは無視されます。
どのバッファーを検索するかを制御するには、変数dabbrev-ignored-buffer-names
およびdabbrev-ignored-buffer-regexps
をカスタマイズします。前者の値は、スキップするバッファー名のリストです。後者の値は正規表現のリストで、バッファー名がこれらの正規表現のどれかにマッチした場合、動的abbrev展開はそのバッファーをスキップします。
C-u - M-/のようにM-/に負の引数を指定すると、これは最初にポイントの後ろの展開結果を検索し、その後は他のバッファーを検索し、ポイントの前の展開結果は最後に報告します。他の展開結果を探すためにM-/を繰り返す場合は、引数に何もしていしないでください。M-/を繰り返すことにより、ポイントの後、その後はポイントの前の展開結果を巡回します。
動的abbrevを展開した後、その展開結果の元のコンテキストで展開結果の後ろに続く、追加の単語をコピーすることができます。コピーしたい追加の単語ごとに、単にSPC M-/とタイプします。単語間のスペースおよび区切り文字は、単語とともにコピーされます。
M-/が展開する単語を決定する方法と、それを展開する方法を制御できます。動的abbrevのカスタマイズを参照してください。
コマンドC-M-/
(dabbrev-completion
)は、動的abbrevの補完を行ないます。利用可能な展開結果を1つずつ試すかわりに、これはすべてを検索して、それらがもつ共通のテキストを挿入します。共通部分がない場合、C-M-/は、通常の方法で選択することができる補完リストを表示します。補完を参照してください。
動的abbrev展開は、Abbrevモードとは完全に独立しています。M-/での単語の展開は、その単語が通常のabbrevとして定義されていることとは無関係です。