Next: , Previous: , Up: インクリメンタル検索   [Contents][Index]


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

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

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

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

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

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

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

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

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

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

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

同様に変数isearch-allow-motionを非nil値に変更するとキーボード移動コマンドM-<M->C-vM-vでカレント検索文字列のバッファー内での最初、最後、カレントウィンドウの後にある最初、カレントウィンドウの前の最後の出現箇所へと移動します。これらの移動コマンド使用時は検索方向は変化しません。変数isearch-motion-changes-directionを非nil値に変更した場合には、検索方向はM-<C-vの後は前方、M->M-vの後は後方になります。

isearch-yank-on-moveshiftにカスタマイズしている際には、カーソル移動コマンドをタイプ中にシフトキーを押下することにより検索文字列を拡張できます。これはポイント移動後にカレントバッファーの新たな位置で終了するテキストをyankします。

isearch-yank-on-movetの際にはカーソル移動コマンドにシフトキーを使用せずに検索文字列を拡張できますが、それはコマンドのシンボルにisearch-moveプロパティをもつ特定の移動コマンドだけに適用されます。