Emacs:如何让查询-替换循环通过缓冲区



如果我从缓冲区中的某个位置开始,我只能在一次运行中对缓冲区的其余部分执行查询替换。有没有办法让查询替换循环通过缓冲区?

使用

M-< 转到缓冲区的开头,然后再使用 M-% 进行查询替换。

如果你想要一个命令来做到这一点,请编写它:

(defun my-qr ()
  "..."
  (interactive)
  (goto-char (point-min))
  (call-interactively #'query-replace))

如果您想在完成后返回到开始的位置,请将代码包装在 save-excursion 中。

(defun my-qr ()
  "..."
  (save-excursion
   (interactive)
   (goto-char (point-min))
   (call-interactively #'query-replace)))

我在下面使用Emacs 24+

;; query replace all from buffer start
(fset 'my-query-replace-all 'query-replace)
(advice-add 'my-query-replace-all
            :around
            #'(lambda(oldfun &rest args)
               "Query replace the whole buffer."
               ;; set start pos
               (unless (nth 3 args)
                 (setf (nth 3 args)
                       (if (region-active-p)
                           (region-beginning)
                         (point-min))))
               (unless (nth 4 args)
                 (setf (nth 4 args)
                       (if (region-active-p)
                           (region-end)
                         (point-max))))
               (apply oldfun args)))
(global-set-key "C-cr" 'my-query-replace-all)

考虑区域替换大小写,并且传递了任何开始和结束参数。

最新更新