本節では、他で説明されていない検索関連の各種カスタマイズについて記述します。
インクリメンタル検索のデフォルト検索モードは、変数 search-default-mode
で指定されます。この値は nil、t、または関数のいずれかになります。nil
の場合、デフォルトモードは文字フォールディングを行わないリテラル検索となりますが、case-fold-search および search-whitespace-regexp
でそれぞれ指定される通り、大文字小文字の区別および緩い空白文字マッチングが適用されます(検索時の緩いマッチング を参照)。値が t
の場合、インクリメンタル検索はデフォルトで正規表現検索となります。このデフォルト値は、大文字小文字の区別と緩い空白文字マッチングのみを行う関数を指定します。
進行中のインクリメンタル検索における現在のマッチ箇所は、isearchフェイスを用いてハイライトされます。このハイライトは、変数search-highlightにnilを設定することで無効にできます。
正規表現(例えば C-M-s など)を検索する際、部分式は search-highlight-submatches
変数に応じて特別なハイライト表示が適用されます。この変数の値が nil
の場合は特別なハイライトは行われませんが、値が nil 以外の場合は、正規表現内の「\( …
\)」構造(いわゆる「部分式」)に一致するテキストが、それぞれ異なるフェイスでハイライトされます。デフォルトでは、isearch-group-1 と isearch-group-2
という2つの異なるフェイスが定義されています。これら2つのフェイスにより、奇数番目の部分式は isearch-group-1 フェイスで、偶数番目の部分式は isearch-group-2 フェイスでハイライトされます。例えば、「foo-\([0-9]+\)\([a-z]+\)」を検索する場合、「[0-9]+」に一致する部分は isearch-group-1 フェイスで、「[a-z]+」に一致する部分は isearch-group-2 フェイスでハイライトされます。同じ番号体系を用いて isearch-group-3、isearch-group-4 といった追加のフェイスを定義した場合、isearch-group-M フェイスが M 番目、N+M 番目、2N+M
番目……の部分式のハイライトに使用されます。ここで N は、isearch-group-M 形式のフェイスの総数を表します。
ディスプレイ上に表示されている検索文字列に一致するその他のマッチは、lazy-highlight
フェイスを用いてハイライトされます。変数 isearch-lazy-highlight に
nil
を設定すると、このハイライトが無効になります。以下に、レイジーハイライトをカスタマイズするその他の変数を挙げます。
lazy-highlight-initial-delay ¶表示されているマッチをハイライトするまで待機する時間(秒)。検索文字列が lazy-highlight-no-delay-length 文字未満の場合にのみ適用されます。
lazy-highlight-no-delay-length
¶検索文字列がこの変数の値以上の長さである場合、マッチ箇所の遅延ハイライトが即座に開始されます。
lazy-highlight-interval ¶連続するマッチをハイライトする間隔(秒)。
lazy-highlight-max-at-a-time
¶入力を確認する前にハイライトする最大マッチ数。数値が大きいとハイライトに時間がかかるため、その間に検索を続け、C-s や C-r と入力した場合、Emacs はそれらすべてのマッチのハイライトが完了するまで応答しません。したがって、値を小さく設定するほど、Emacs のレスポンスが向上します。
isearch-lazy-count ¶検索プロンプトに現在のマッチ番号と全マッチ数を表示してください。
lazy-count-prefix-format ¶lazy-count-suffix-format ¶これら2つの変数によって、isearch-lazy-countの現在値および全マッチ数の表示形式が決まります。
lazy-highlight-buffer ¶non-nil
の場合、レイジーハイライトは現在のウィンドウの表示領域内にある箇所だけでなく、バッファ全体の一致箇所をハイライトします(そのため、例えば同じバッファを表示している他のウィンドウでも表示されるようになります)。
lazy-highlight-buffer-max-at-a-time
¶lazy-highlight-max-at-a-time と同様ですが、lazy-highlight-buffer が nil
以外の場合、ウィンドウ内に現在表示されていないマッチ箇所を強調表示するために使用されます。デフォルトは 200 です。nil に設定すると、入力を確認せずにバッファ内のすべてのマッチ箇所を強調表示します。警告: 大規模なバッファを検索する際、Emacs が応答しなくなる可能性があります。
通常、検索文字列が空の状態でインクリメンタル検索中に RET
を入力すると、非インクリメンタル検索が開始されます。(実際には、検索文字列を編集でき、次の RET
で検索が行われます。)ただし、変数 search-nonincremental-instead を
nil にカスタマイズすると、検索文字列が空であっても、RET と入力すれば常にインクリメンタル検索を終了します。
デフォルトでは、インクリメンタル検索およびクエリ置換コマンドは不可視テキストにマッチしますが、現在のマッチ箇所が不可視テキストから外れるとすぐに、そうしたマッチ箇所は非表示になります。変数
isearch-hide-immediately を nil
にカスタマイズすると、マッチが見つかった不可視テキストは、検索または置換コマンドが終了するまで表示され続けます。
低速な接続でリモートマシンに接続されたディスプレイなど、低速な端末でインクリメンタル検索を行うと、検索の進行に伴いディスプレイの広範囲を再描画する必要があるため、煩わしく感じることがあります。Emacsでは低速端末向けの特別な表示モードが用意されており、検索時に別途小さなウィンドウがポップアップし、そのウィンドウにマッチ箇所周辺のテキストが表示されます。小さなウィンドウは表示速度が速いため、低速による煩わしさが軽減されます。変数
search-slow-speed
は、Emacsがこの表示モードを使用する基準となるボーレートの閾値を決定します。変数 search-slow-window-lines
は、検索結果の表示用にEmacsがポップアップするウィンドウの行数を制御し、デフォルトは1行です。通常、このウィンドウは検索を開始するバッファを表示しているウィンドウの下部にポップアップしますが、search-slow-window-lines の値が負の場合は、ウィンドウを上部に配置し、search-slow-window-lines の絶対値に等しい行数で表示することを意味します。