如果我从缓冲区中的某个位置开始,我只能在一次运行中对缓冲区的其余部分执行查询替换。有没有办法让查询替换循环通过缓冲区?
使用
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)
考虑区域替换大小写,并且传递了任何开始和结束参数。