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を参照してください。
特定のリージョンに置換を限定すれば、より便利かもしれません。関数replace-regexp-in-regionはこれを行います。
この関数はバッファーのstartからendのテキストリージョンにあるすべてのregexpをreplacementに置換する。startのデフォルトはポイント位置、endのデフォルトはバッファーのアクセス可能範囲の終端。regexpにたいする検索はcase(大文字小文字)を区別し、replacementは文字のcaseを変更せずに挿入される。replacement文字列にはreplace-matchで使用するような、同じ‘\’で始まる特殊要素を使用できる。この関数は置換した個数、regexpが見つからなければnilをリターンする。この関数はポイント位置を維持する。
(replace-regexp-in-region "foo[ \t]+bar" "foobar")
この関数はreplace-regexp-in-regionと同様に機能するが、正規表現のかわりにリテラルのstringの検索と置換を行う。
Emacsには文字列内でマッチを置換する特別な関数もあります。
この関数はstringをコピーしてregexpにたいするマッチを検索、それらをrepに置き換える。これは変更されたコピーをリターンする。startが非nilならマッチにたいする検索はstring内のそのインデックスから開始されて、リターン値にはstringの最初のstart文字は含まれない。置き換え後の文字列全体を取得するには、stringの最初のstart文字とリターン値を結合すること。
この関数は置換を行うためにオプション引数fixedcase、literal、subexpを渡してreplace-matchを使用する。
repは文字列のかわりに関数でもよい。この場合にはreplace-regexp-in-stringはそれぞれのマッチにたいして、そのテキストを単一の引数としてrepを呼び出す。これはrepがリターンする値を収集して、それを置換文字列としてreplace-matchに渡す。この時点でのマッチデータはstringの部分文字列にたいするregexpのマッチ結果。
この関数はin-string内に出現するすべてのfrom-stringをto-stringに置換して、その結果をリターンする。引数のいずれかを変更せずに、文字列定数が新たな文字列をリターンするかもしれない。case(大文字小文字)には意味があるが、テキストプロパティは無視する。
query-replaceの行に関するコマンドを記述したい場合には、perform-replaceを使用してこれを行うことができます。
これはquery-replaceおよび関連するコマンドの根幹となる関数である。これは位置startとendの間にあるテキスト内に出現するfrom-stringの一部またはすべてを置換する。startがnil
(または省略)ならかわりにポイントを、endにはそのバッファーのアクセス可能範囲の終端が使用される(オピション引数backwardが非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のかわりに使用するキーマップを指定する。
region-noncontiguous-pが非nilなら、startとendの間のリージョンは非連続部分から構成されることを意味する。これのもっとも一般的な例は部分が開業文字で区切られた矩形リージョンである。
この関数は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-prefixexitと似ているが、unread-command-eventsにたいして押下されたキーを追加する(Event Input Miscを参照)。
act-and-exitこの問いにたいして“yes”を答えて、さらに一連の問いすべてにたいして後続の問いに“no”が応答されるとみなして問い合わせをあきらめる。
act-and-showこの問いに“yes”を答えるが、結果を表示してまだ次の問いへ進まない。
automaticこれ以上のユーザーとの対話を行わず、この問いと後続の問いにたいして“yes”を答える。
backup前に問い合わせた以前の場所に戻る。
undo最後の置換をアンドゥして置換が行われた位置に戻る。
undo-allすべての置換をアンドゥして最初に置換が行われた位置に戻る。
editこの問いに対処するために、通常とられるアクションのかわりに再帰編集にエンターする。
edit-replacementミニバッファー内で、この問いにたいする置換を編集する。
delete-and-edit検討中のテキストを削除して、それを置換するために再帰編集にエンターする。
recenterscroll-upscroll-downscroll-other-windowscroll-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を参照)。