バッファーのある部分で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-prefix
exit
と似ているが、unread-command-events
にたいして押下されたキーを追加する(その他のイベント入力の機能を参照)。
act-and-exit
この問いにたいして“yes”を答えて、さらに一連の問いすべてにたいして後続の問いに“no”が応答されるとみなして問い合わせをあきらめる。
act-and-show
この問いに“yes”を答えるが、結果を表示してまだ次の問いへ進まない。
automatic
これ以上のユーザーとの対話を行わず、この問いと後続の問いにたいして“yes”を答える。
backup
前に問い合わせた以前の場所に戻る。
undo
最後の置換をアンドゥして置換が行われた位置に戻る。
undo-all
すべての置換をアンドゥして最初に置換が行われた位置に戻る。
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”を答えてカレントバッファーにたいする一連の問いすべてをあきらめる。そしてシーケンス内の次のバッファーへ問いを継続する。