Làm cách nào để tìm kiếm / thay thế chuỗi cho toàn bộ bộ đệm trong Emacs mà không quay lại từ đầu?


9

Nó thực sự bất tiện khi đầu tiên quay trở lại đầu đệm và sau đó thực hiện tìm kiếm / truy vấn. Chà, đối với tìm kiếm, tương đối đơn giản là bạn chỉ cần nhấn C-smột lần nữa để tìm hiểu, nhưng đối với truy vấn / thay thế, thật tẻ nhạt.

Bất kỳ hack đơn giản để làm điều đó mà không quay trở lại bộ đệm hàng đầu cho cả hai hoạt động?

Câu trả lời:


6

Huh, có vẻ như bạn không thể (lấy từ đây , nhấn mạnh của tôi):

Để thay thế mọi trường hợp của 'foo' sau điểm bằng 'bar', hãy sử dụng lệnh Mx thay thế chuỗi bằng hai đối số foobar. Thay thế chỉ xảy ra sau điểm, vì vậy nếu bạn muốn bao phủ toàn bộ bộ đệm, bạn phải đi đến điểm bắt đầu trước .

Cá nhân, tôi chia bộ đệm thành hai ( C-x 2), đi đến đỉnh ( C-Home) và sau đó chạy lệnh thay thế, chuyển trở lại khung ban đầu của tôi ( C-x o) và sau đó giết thứ hai ( C-x 0). Không biết có một mẹo để làm cho nó đơn giản hơn.


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

Hoạt động độc đáo, nhưng bắt vít thay thế truy vấn trên vùng / lựa chọn (luôn luôn thực hiện trên toàn bộ bộ đệm).
Alex


0

Tôi đã sử dụng bên dưới để làm việc với 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)

Bất kể trường hợp thay thế khu vực, và bất kỳ đối số START và END nào được thông qua.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.