Next: Standard Regexps, Previous: Match Data, Up: Searching and Matching [Contents][Index]
バッファーのある部分でregexpにたいするすべてのマッチを見つけてそれらを置換したい場合には、以下のようにre-search-forward
とreplace-match
を使用して明示的なループを記述するのが最良の方法です:
(while (re-search-forward "foo[ \t]+bar" nil t) (replace-match "foobar"))
replace-match
の説明はReplacing the Text that
Matchedを参照してください。
しかし文字列内のマッチの置換、特に置換を効果的に行いたい場合には、より複雑になります。そのためにEmacsはこれを行うための関数を提供します。
この関数はstringをコピーしてregexpにたいするマッチを検索、それらをrepに置き換える。これは変更されたコピーをリターンする。startが非nil
ならマッチにたいする検索はstring内のそのインデックスから開始されて、そのインデックスより前で始まるマッチは変更されない。
この関数は置換を行うためにオプション引数fixedcase、literal、subexpを渡してreplace-match
を使用する。
repは文字列のかわりに関数でもよい。この場合にはreplace-regexp-in-string
はそれぞれのマッチにたいして、そのテキストを単一の引数としてrepを呼び出す。これはrepがリターンする値を収集して、それを置換文字列としてreplace-match
に渡す。この時点でのマッチデータはstringの部分文字列にたいするregexpのマッチ結果。
query-replace
の行に関するコマンドを記述したい場合には、perform-replace
を使用してこれを行うことができます。
これはquery-replace
と関連するコマンドの根幹となる関数。これは位置startとendの間にあるテキスト内に出現するfrom-stringの一部またはすべてを置換する。startがnil
(または省略)ならかわりにポイント、endにはそのバッファーのアクセス可能範囲の終端が使用される。
query-flagがnil
ならすべてのマッチを置換する。それ以外なら、それぞれにたいしてユーザーにたいして何をすべきか問い合わせる。
regexp-flagが非nil
ならfrom-stringは正規表現、それ以外はリテラルとしてマッチしなければならない。delimited-flagが非nil
なら単語境界に囲まれた置換だけが考慮される。
引数replacementsはマッチを何で置き換えるかを指定する。文字列ならその文字列を使用する。サイクル順に使用される文字列リストでもよい。
replacementsがコンスセル(function . data)
なら、置換テキストを取得するためにそれぞれのマッチ後にfunctionを呼び出すことを意味する。この関数はdataとすでに置換された個数という、2つの引数で呼び出される。
repeat-countが非nil
なら、それは整数であること。その場合にはサイクルを次に進める前に、replacementsリスト内の各文字列を何度使用するかを指定する。
from-stringが大文字アルファベットを含む場合には、perform-replace
はcase-fold-search
をnil
にバインドして大文字小文字を変換せずにreplacementsを使用する。
キーマップquery-replace-map
は通常は問い合わせにたいして可能なユーザー応答を定義する。引数mapが非nil
なら、それはquery-replace-map
のかわりに使用するキーマップを指定する。
この関数はfrom-stringの次のマッチを検索するために2つの関数のうちいずれか1つを使用する。これらの関数は2つの変数replace-re-search-function
とreplace-search-function
により指定される。引数regexp-flagが非nil
なら前者、nil
なら後者が呼び出される。
この変数はperform-replace
にたいする有効なユーザー応答を定義するスペシャルキーマップを保持して、コマンドはy-or-n-p
やmap-y-or-n-p
と同様にそれを使用する。このマップは2つの点において普通のマップと異なる。
read-key-sequence
を使用しないからである。
query-replace-map
にたいして意味をもつバインディングがあります。それらのうちいくつかはquery-replace
とその同族にたいしてのみ意味をもちます。
act
判断している対象にたいしてアクションを起こす(言い換えると“yes”)。
skip
この問いにたいしてアクションを起こさない(言い換えると“no”)。
exit
この問いにたいして“no”を答えて、さらに一連の問いすべてにたいして“no”が応答されたとみなして問い合わせをあきらめる。
exit-prefix
exit
と似ているが、unread-command-events
にたいして押下されたキーを追加する(Event Input Miscを参照)。
act-and-exit
この問いにたいして“yes”を答えて、さらに一連の問いすべてにたいして後続の問いに“no”が応答されるとみなして問い合わせをあきらめる。
act-and-show
この問いに“yes”を答えるが、結果を表示してまだ次の問いへ進まない。
automatic
これ以上のユーザーとの対話を行わず、この問いと後続の問いにたいして“yes”を答える。
backup
前に問い合わせた以前の場所に戻る。
edit
この問いに対処するために、通常とられるアクションのかわりに再帰編集にエンターする。
edit-replacement
ミニバッファー内で、この問いにたいする置換を編集する。
delete-and-edit
検討中のテキストを削除して、それを置換するために再帰編集にエンターする。
recenter
scroll-up
scroll-down
scroll-other-window
scroll-other-window-down
指定されたウィンドウスクロール操作を行って同じ問いを再度尋ねる。この問いにはy-or-n-p
と関連する関数だけが使用される。
quit
即座にquitを行う。この問いにはy-or-n-p
と関連する関数だけが使用される。
help
ヘルプを表示して再度尋ねる。
この変数はマルチバッファー置換で有用な追加キーバインディングを提供することによりquery-replace-map
を拡張するキーマップを保持する。追加されるバインディングは以下のとおり:
automatic-all
残りすべてのバッファーにたいして、それ以上の対話をせずその問いと後続のすべての問いに“yes”を答える。
exit-current
この問いに“no”を答えてカレントバッファーにたいする一連の問いすべてをあきらめる。そしてシーケンス内の次のバッファーへ問いを継続する。
この変数は置換する次の文字列を検索するためにperform-replace
が呼び出す関数を指定する。デフォルト値はsearch-forward
。それ以外の値の場合にはsearch-forward
の最初の3つの引数を引数とする関数を指定すること(String Searchを参照)。
この変数は置換する次のregexpを検索するためにperform-replace
が呼び出す関数を指定する。デフォルト値はre-search-forward
。それ以外の値の場合にはre-search-forward
の最初の3つの引数を引数とする関数を指定すること(Regexp Searchを参照)。