Đây là một cách để làm điều đó chỉ sử dụng chức năng tích hợp:
Với điểm trong dòng chứa lần xuất hiện đầu tiên begin
, nhấn C-SPC.
Di chuyển đến lần xuất hiện tiếp theo của end
:
C-s end
RET
Thay thế foo
bằng bar
:
M-% foo
RET bar
RET !
Điều này sử dụng thực tế query-replace
sẽ hoạt động trên vùng hoạt động thay vì toàn bộ bộ đệm nếu có.
Tất nhiên, bạn cũng có thể xác định một lệnh tùy chỉnh:
(defun replace-from-to (beg end str repl)
(interactive "sBegin: \nsEnd: \nsString: \nsReplacement: ")
(save-excursion
(goto-char (point-min))
(let ((start-pos (search-forward beg))
(end-pos (search-forward end)))
(replace-string str repl nil start-pos end-pos))))
Lệnh này sẽ luôn tìm kiếm từ đầu bộ đệm, vì vậy điểm có thể là sau begin
/ foo
/ end
khi bạn gọi nó.
Thiết lập một ràng buộc chính cho nó thông qua:
(global-set-key (kbd "C-c r") 'replace-from-to)