Next: , Previous: , Up: 置換コマンド   [Contents][Index]


16.10.3 置換コマンドとLaxマッチ

このサブセクションではlaxマッチに関する置換コマンドの振る舞いと、それをカスタマイズする方法を説明します。一般的には、ほとんどの置換は、それと同等な検索コマンドに比べて、デフォルトではより厳密なマッチを行ないます。

インクリメンタル検索とは異なり、置換コマンドはデフォルトではlax space matching(緩いスペースマッチング)を行いません(lax space matchingを参照してください)。置換でlax space matchingを有効にするには、変数replace-lax-whitespaceを非nilに変更してください(これはEmacsが置換文字列ではなく、置換するテキストを検索する方法だけに影響を与えます)。

query-replace-regexpがパターンを検索するときlax whitespace matchingを使うかどうかを制御するのは、それに対応する変数replace-regexp-lax-whitespaceです。

置換コマンドの最初の引数がすべて小文字の場合、置換のための検索において大文字小文字の違いを無視します。これはcase-fold-searchsearch-upper-caseがいずれも非nilの場合です。search-upper-case (search-upper-caseを参照)がnilなら、検索が大文字小文字を無視するかどうかは、コマンドの1つ目の引数が小文字かどうかと無関係にcase-fold-search単独で決定されます。case-fold-searchnilにセットすると、すべての検索において常に大文字小文字の違いが有効になります。

さらに置換コマンドの2つ目の引数のすべて、または一部が小文字の場合には、置換コマンドは大文字小文字が出現するパターンを維持しようと試みます。したがって以下のコマンド、

M-x replace-string RET foo RET bar RET

は小文字の‘foo’を小文字の‘bar’で置換し、すべて大文字の‘FOO’を‘BAR’、そして最初が大文字の‘Foo’を‘Bar’に置換します。(これら3つの候補、すなわち小文字、すべて大文字、先頭が大文字は、replace-stringが認識できる唯一のパターンです)。

置換文字列に大文字が使われている場合、テキストが挿入されるときは、常に大文字のままとなります。大文字が最初の引数で使用されている場合、大文字小文字の変換なしで、2番目の引数に与えられたとおりに置換されます。同様にcase-replacecase-fold-searchの両方がnilにセットされている場合、大文字小文字の変換なしで置換されます。

デフォルトでは置換コマンドは、置換するテキストを探すとき、character folding(character foldingを参照してください)を使用しません。query-replacereplace-stringでのマッチングでcharacter foldingを有効にするには、変数replace-char-foldに非nil値をセットします(このセッティングは、Emacsが置換するテキストを探す方法だけに影響し、置換するテキストには影響を与えません。また、replace-regexpにも影響を与えません)。