如何在Emacs中搜索/替换整个缓冲区的字符串而无需回到开头?


9

首先返回缓冲区顶部然后进行搜索/查询确实很不方便。好吧,对于搜索而言,您只需再按C-s一次即可结束操作,这相对简单,但是对于查询/替换而言,这很繁琐。

有什么简单的技巧可以做到而又不回到两个操作的缓冲区顶部?

Answers:


6

呵呵,看来你做不到(摘自这里,重点是我的):

为了与“酒吧”点之后取代“富”的每一个实例,用命令的Mx替换字符串用两个参数foobar替换仅在点之后发生,因此,如果要覆盖整个缓冲区,则必须先从头开始

就个人而言,我将缓冲区分为两个(C-x 2),转到顶部(C-Home),然后运行replace命令,切换回我的原始窗格(C-x o),然后杀死第二个(C-x 0)。不知道是否有使它更简单的窍门。


4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))

效果很好,但是在区域/选择上搞砸了查询替换(总是在整个缓冲区上做)。
Alex


0

我将以下用于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参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.