我正在寻找一个与 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
        )))

此外,如果函数可以在函数完成后输出总替换次数,那就太好了。

最佳答案

此功能已经是 query-replace 的一部分。
您可以使用 E 调用它。要查看所有选项,请按 ?更换时。

关于emacs - `query-replace` 每次出现都要求一个新的替换字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18163162/

10-15 17:18