一个`query-replace`,它要求每次出现一个新的替换字符串

ele*_*kil 3 emacs elisp

我正在寻找一个类似的功能,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
        )))
Run Code Online (Sandbox Code Playgroud)

此外,如果函数完成后函数可以输出总替换次数,那将是很好的.

abo*_*abo 6

此功能已经是其中的一部分query-replace.你可以用它来调用它E.要查看所有选项,请?在更换时按.