Next: , Previous: , Up: Incremental Search   [Contents][Index]


15.1.6 インクリメンタル検索を終了させない

このサブセクションでは、検索で特別な意味をもたないコマンドが、そのコマンドを実行する前に、検索をexitするかどうかを制御する方法を説明します。また、(たとえそれらがインクリメンタル検索の一部ではなくても)カレントのインクリメンタル検索をexitせずにタイプできる、2つのカテゴリーに属するコマンドを説明します。

インクリメンタル検索によりバインドされていないコマンドをタイプすると通常、そのコマンドを実行する前に検索をexitします。したがって、そのコマンドは検索を呼び出したときのバッファーにたいして処理を行なうことになります。しかし、変数search-exit-optionnilにカスタマイズした場合、(インクリメンタル検索により解釈されないような)タイプした文字は、単に検索文字列に追加されます。これにより、通常は検索をexitして、その文字にバインドされているコマンドをそのバッファーにたいして呼び出す、C-aのような制御文字を検索文字列に含めることができるようになります。

プレフィクス引数

インクリメンタル検索でプレフィクス引数を指定したコマンドをタイプすると、デフォルトではその引数は次の検索アクションに適用されるか、検索をexitするコマンドに渡されます。他の言い方をすると、プレフィクス引数の入力自体は、検索を終了させません。

以前のバージョンのEmacsでは、プレフィクス引数の入力は常に検索を終了させていました。この振る舞いに戻すには、変数isearch-allow-prefixnilをセットしてください。

isearch-allow-scrollが非nilのとき(以下を参照)、プレフィクス引数は上で説明したようなデフォルト動作をします。つまり、たとえisearch-allow-prefixnilでも、プレフィクス引数は検索を終了させません。

スクロールコマンド

通常スクロールコマンドは、インクリメンタル検索を終了させます。変数isearch-allow-scrollを非nil値に変更すると、スクロールバーやC-vM-vC-lのようなスクロールコマンド(Scrollingを参照してください)が利用可能になります。これは、これらのコマンドをバウンドされたキーシーケンスで呼び出したときだけ適用されます。つまりM-xは依然として検索を終了させます。これらのコマンドには、通常の方法でプレフィクス引数を与えることができます。この機能ではカレントマッチが表示されない位置にスクロールすることはできません。

isearch-allow-scrollの機能は、正確にはスクロールではないが、テキストが表示されるスクリーン位置に影響する、C-x 2 (split-window-below)やC-x ^ (enlarge-window)のような、コマンドにも効果を及ぼします。これはコマンド名のisearch-scrollプロパティが非nilのコマンドに適用されます。そのため、どのコマンドが影響を受けるかは、それらのプロパティを変更して制御できます。

たとえば将来のEmacsセッションも含めて、インクリメンタル検索中にC-h lを使えれば便利だと思ったら、まずC-h cで何のコマンドが実行されるか調べて(Key Helpを参照してください)、それがview-lossageだとわかります。その後はinitファイルに以下を追加します(Init Fileを参照してください)。

(put 'view-lossage 'isearch-scroll t)

この機能はポイント、バッファー内容、マッチデータ、カレントバッファーや選択されているウィンドウ・フレームを変更しない任意のコマンドに適用できます。そして、そのコマンド自体がインクリメンタル検索を行ってはなりません。この機能は、isearch-allow-scrollnil(デフォルト)の場合は無効です。