先回到缓冲区顶部然后再进行搜索/查询确实很不方便。好吧,对于搜索来说,这相对简单,您只需再按C-s
一次即可绕回,但对于查询/替换来说,这很繁琐。
有没有什么简单的办法可以做到这一点,而不需要返回缓冲区顶部进行这两项操作?
答案1
嗯,看来你不能(摘自这里(重点是我的):
要将 point 之后的每个 'foo' 实例替换为 'bar',请使用命令 Mx replace-string 和两个参数
foo
和bar
。替换仅在点之后发生,因此如果要覆盖整个缓冲区,必须先转到开头。
就我个人而言,我会将缓冲区分成两部分 ( C-x 2
),转到顶部 ( C-Home
),然后运行替换命令,切换回原始窗格 ( C-x o
),然后关闭第二个窗格 ( C-x 0
)。不知道是否有技巧可以使它更简单。
答案2
(defun my-replace-string ()
(interactive)
(save-excursion
(beginning-of-buffer)
(call-interactively 'replace-string)))
答案3
我用编辑为此。非常有用。
答案4
我在 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)
考虑区域替换情况以及传递的任何 START 和 END 参数。