同様に機能する関数を探していますquery-replace
が、同じ置換文字列を何度も使用する代わりに、一致が見つかるたびに置換文字列を要求します。つまり、一致が見つかったら、この一致をスキップするか、置換モードに入り、一致を置換するために使用する文字列を指定できます (以前の置換の履歴を使用)。
さらに便利なquery-replace-regexp
のは、検索文字列のグループ化を使用できるバリアントです。
非正規表現バージョンに使用するコードをいくつか書きましたが、実際に何かを置き換えて、置換が行われた後/一致がスキップされた後に検索全体を繰り返す部分で立ち往生しています。これまでのコードは次のとおりです。
(defun query-replace-ask (search)
(interactive "sQuery replace: ")
(if (search-forward search nil t)
(let ((beg (match-beginning 0))
(end (match-end 0))
(if (y-or-n-p "Replace?")
(replacement (read-string "Replacement: "))
(
;; Do the next search
)))
;; Replace from beg to end with replacement
;; do the next search
)))
また、関数が終了したら、関数が総置換数を出力できるとよいでしょう。