GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Not-Exiting-Isearch.html ・ emacs-doc.conao3.com

本節では、検索において特に意味を持たないコマンドを入力した際、そのコマンドを実行する前に検索を終了させるかどうかを制御する方法について説明します。また、それ自体はインクリメンタル検索の一部ではないものの、現在のインクリメンタル検索を終了させずに入力できる3つのカテゴリのコマンドについても説明します。

通常、インクリメンタル検索にバインドされていないコマンドを入力すると、コマンドが実行される前に検索が終了します。そのため、コマンドは検索を呼び出した元のバッファに対して動作します。しかし、変数 search-exit-option を append にカスタマイズすると、インクリメンタル検索で解釈されなかった入力文字は、そのまま検索文字列に追加されます。これにより、通常は検索を終了させ、バッファ上でそれにバインドされたコマンドを呼び出すような C-a などの制御文字を、検索文字列に含めることが可能になります。

接頭辞引数

インクリメンタル検索において、プレフィックス引数(数値引数を参照)を指定するコマンドを入力した場合、デフォルトでは、その引数は検索の次のアクション、または検索を終了させるコマンドのいずれかに適用されます。言い換えれば、プレフィックス引数を入力しただけでは、検索は終了しません。

以前のバージョンのEmacsでは、プレフィックス引数を入力すると必ず検索が終了していました。変数 isearch-allow-prefix を nil に設定することで、この動作に戻すことができます。

isearch-allow-scroll が nil ではない場合(後述)、接頭辞引数は常に上述のデフォルトの動作に従います。つまり、isearch-allow-prefix が nil であっても、探索を終了することはありません。

スクロールコマンド

通常、スクロールコマンドを実行するとインクリメンタル検索が終了します。しかし、変数 isearch-allow-scroll を nil 以外の値に変更すると、検索を終了することなく、スクロールバーのほか、C-v、M-v、C-l といったキーボードスクロールコマンド(スクロール を参照)も使用可能になります。これらのコマンドは nil 以外の scroll-command プロパティを持っています。これは、バインドされたキーシーケンス経由でこれらのコマンドを呼び出す場合にのみ適用され、M-x と入力した場合は引き続き検索が終了します。これらのコマンドには、通常通りプレフィックス引数を指定できます。通常、この機能では現在のマッチ箇所を画面外までスクロールさせることはできませんが、isearch-allow-scroll を特殊な値 unlimited にカスタマイズすると、その制限が解除されます。

isearch-allow-scroll 機能は、C-x 2 (split-window-below) や C-x ^ (enlarge-window) といった他のいくつかのコマンドにも影響を与えます。これらは厳密にはスクロールではありませんが、画面上のテキストの表示位置には影響を及ぼします。実際、nil や isearch-scroll 以外のプロパティを持つあらゆるコマンドに影響します。したがって、これらのプロパティを変更することで、どのコマンドに影響が出るかを制御できます。

例えば、今後のすべてのEmacsセッションにおいて、インクリメンタル検索内でC-h lを使えるようにするには、C-h cを使用してそれがどのコマンドを実行するかを確認し(キーのドキュメントを参照)、それがview-lossageであることを調べます。その後、initファイルに以下の行を記述します(Emacs初期化ファイルを参照):

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

この機能は、ポイント、バッファの内容、マッチデータ、現在のバッファ、または選択中のウィンドウやフレームを恒久的に変更しないあらゆるコマンドに適用できます。コマンド自体がインクリメンタル検索を試みてはなりません。isearch-allow-scroll が nil である場合(デフォルトではそうなります)、この機能は無効になります。

同様に、変数 isearch-allow-motion を nil 以外の値に変更すると、キーボードの移動コマンド M-<、M->、C-v、M-v が使用可能になり、それぞれバッファ内の現在の検索文字列の最初の出現箇所、最後の出現箇所、現在のウィンドウ以降の最初の出現箇所、および現在のウィンドウより前の最後の出現箇所へ移動できます。これらの移動コマンドを使用しても検索方向は変わりませんが、変数 isearch-motion-changes-direction を nil 以外の値に変更した場合は例外となり、その場合の検索方向は、M-< および C-v の後は前方へ、M-> および M-v の後は後方となります。

モーションコマンド

isearch-yank-on-move を shift にカスタマイズすると、Shiftキーを押しながらカーソル移動コマンドを入力することで、検索文字列を拡張できます。これにより、現在のバッファ内でポイントを移動させた後、新しい位置で終わるテキストがヤンクされます。

isearch-yank-on-move が t の場合、カーソル移動コマンドでシフトキーを使わずに検索文字列を拡張できますが、これはシンボルに isearch-move プロパティを持つ特定の移動コマンドにのみ適用されます。