Next: Replace, Previous: Regexp Example, Up: Search [Contents][Index]
あなたは通常、タイプした文字と、検索されるテキストの間にある、特定の瑣末な違いを、検索コマンドが無視することを望むでしょう。たとえば長さが異なる空白文字シーケンスは通常、等しいとみなされ、大文字小文字の違いは通常問題にならない、などです。これは等価文字(character equivalence)として知られています。
このセクションではEmacsのlax search(緩い検索)機能と、それを必要に応じて調整する方法について説明します。
デフォルトでは、検索コマンドはlax space
matching(緩いスペースマッチング)を行います。これはスペースおよび一連のスペースは、テキスト中の1つまたはそれ以上の空白文字にマッチします(インクリメンタルregexp検索は別のデフォルトをもちます。Regexp Searchを参照してください)。したがって‘foo bar’は‘foo bar’、‘foo bar’、‘foo bar’、...にマッチします(‘foobar’にはマッチしません)。正確にいうと、Emacsは検索文字列中の一連のスペースを、変数search-whitespace-regexp
で指定された正規表現にマッチさせます。たとえばスペースを一連の改行とスペースにマッチさせるには、変数に‘"[[:space:]\n]+"’をセットします。この変数のデフォルト値は、そのバッファーのメジャーモードに依存します。ほとんどのメジャーモードは、スペース、タブ、フォームフィード文字を空白文字としてクラス化します。
空白文字を正確にマッチさせたい場合は、インクリメンタル検索中にM-s SPC
(isearch-toggle-lax-whitespace
)とタイプすることにより、lax space
matchingをオフに切り替えることができます。もう1度M-s SPCとタイプすると、lax space
matchingふぁオンに切り替わります。すべての検索でlax space
matchingを無効にするには、search-whitespace-regexp
をnil
に変更します。これにより検索文字列の中のスペースは、正確に1つのスペースにマッチするようになります。
Emacsでの検索では、検索文字列を小文字で指定した場合、デフォルトでは検索するテキストの大文字小文字は区別されません。したがって‘foo’を検索すると、‘Foo’や‘fOO’もマッチします。regexp、特に文字集合でも同様に振る舞います。つまり‘[ab]’は、‘a’、‘A’、‘b’、‘B’もマッチします。この機能はcase foldingとして知られており、これはインクリメンタル検索と非インクリメンタル検索の両方でサポートされています。
検索文字列のどこかに大文字があると、検索はcase-sensitive(大文字小文字を区別する)になります。したがって‘Foo’を検索すると、‘foo’や‘FOO’は検索されません。これは正規表現検索でもリテラル文字列検索と同様に適用されます。検索文字列から大文字を削除すると、効果はなくなります。変数search-upper-case
がこれを制御します。この変数が非nil
の場合、検索文字列の中の大文字は検索をcase-sensitiveにします。これをnil
にセットすることにより、大文字によるこの効果は無効になります。この変数のデフォルト値は検索文字列中に大文字があれば検索をcase-sensitiveにして、検索文字列にyankするテキスト(Isearch Yankを参照)を小文字にする(そうすればデフォルトで検索がcase-insensitiveになる)not-yanks
です。
変数case-fold-search
にnil
をセットすると、すべての文字は大文字小文字を含めて、完全にマッチしなければなりません。これはバッファーごとの変数で、変数の変更はデフォルト値を変えない限り、通常はカレントバッファーだけが影響を受けます。Localsを参照してください。これは置換コマンド(Replaceを参照してください)や、ミニバッファーのヒストリー検索(Minibuffer Historyを参照してください)を処理する、非インクリメンタル検索にも適用されます。
インクリメンタル検索でM-c、またはM-s c
(isearch-toggle-case-fold
)とタイプすると、検索が大文字小文字を区別するかが、切り替わります。この効果は、現在の検索を超えて引き継がれませんが、カレントの検索にたいして大文字を追加・削除したときの効果をオーバーライドします.
特定のコマンドや操作にたいする検索やマッチングにおいて、大文字小文字の区別を制御する変数がいくつかあります。たとえばtags-case-fold-search
は、find-tag
での大文字小文字の区別を制御します。これらの変数を探すには、M-x
apropos-variable RET case-fold-search RETとタイプしてください。
case foldingでは、文字の大文字小文字の違いを無視するので、大文字は小文字にマッチし、その逆もマッチします。case
foldingを一般化したものがcharacter
foldingで、これは類似した文字間の違いの、より広いクラスを無視します。たとえばcharacter
foldingでは、文字a
はä
やá
のようなアクセント付きの類似文字にもマッチし、これらの変種を区別するための特殊記号も無視します。加えてa
は、a
に似ている他の文字や、U+249C
PARENTHESIZED LATIN SMALL LETTER Aや、U+2100 ACCOUNT
OF(これは小さいc
の上に小さいa
があるような外観をもちます)のような、文字のグラフィカルな外観の一部にa
をもつ文字にもマッチします。同様にASCIIのダブルクォート文字"
は、ダブルクォートの変種としてUnicode標準で定義されている、他のすべての変種にマッチします。最後に、character
foldingにより、1つ以上の文字シーケンスは違う長さの他の文字にもマッチするようになります。たとえば2つの文字ff
は、U+FB00
LATIN SMALL LIGATURE FFにマッチします。文字シーケンスはまったく同じではありませんが、character
foldingでのマッチはequivalent character sequences(等価文字シーケンス)として知られています。
一般的にEmacsの検索コマンドは、デフォルトでは等価な文字シーケンスのマッチのためにcharacter
foldingを行ないません。変数search-default-mode
をchar-fold-to-regexp
にカスタマイズすることにより、この振る舞いを有効にできます。Search Customizationsを参照してください。インクリメンタル検索では、M-s '
(isearch-toggle-char-fold
)とタイプすることによりcharacter
foldingが切り替わりますが、これはその検索だけです(置換コマンドは別のオプションによる異なるデフォルトをもちます。Replacement and Lax Matchesを参照してください)。
デフォルトではä
のような文字の明示的な変種を検索文字列の一部としてタイプしても、それはa
のようなベース文字とはマッチしません。しかし変数char-fold-symmetric
をt
にカスタマイズすれば、検索コマンドは等価な文字を同一に扱い、検索文字列内での等価な文字集合の使用により、検索するテキスト内の等価な文字を検索するので、アクセントつきの文字ä
は文字a
と同じようにá
のようなすべての変種にもマッチします。
カスタマイズ可能な変数char-fold-include
を使用して新たなfoldingを追加したり、カスタマイズ可能な変数char-fold-exclude
を使用して既存のfoldingを削除できます。