私は次のように入力します。私はキーボードマクロを定義してみましょうC-x (、それから始まるに行きM-<、その後、入力M-%のいくつかの出現-置き換えるクエリにFOOをすることによってバー。見つかった3つのオカレンスのうち、最後の2つだけを置き換えてから保存しC-x C-s、kbd-macroをで終了しC-x )ます。よくやった!!
ここで別のバッファーでkbd-macroを実行すると、fooをbarで置き換えるかどうかは尋ねられず、以前のいいえはい答えを正確に再現し、2番目と3番目の結果を置き換えます!4番目または5番目のオカレンスは要求されません(この2番目のバッファーにはさらにfooが含まれます)!! これは、マクロを定義したときに期待したものではありません。私はそれを呼び出してquery-replace
、その質問に答えさせたいと思いました...
脇の質問:これは間違っていると思いませんか?[ M-x edit-last-kbd-macro
記録されている内容を確認して、そのロジックをすべて理解できますが、それでもまだ間違っていると思います。]
本当の質問:query-replace
私のkbd-macroを期待どおりに動作させる代わりに何を使用できたでしょうか?
start-kbd-macro-dwim
ます。
M-%
正確に再生します。インタラクティブな部分を持つマクロを見たことがなく、期待もしていません。この時点で、通常のインタラクティブなelisp関数を作成する方がよいでしょう。