Ось один із способів зробити це, який використовує лише вбудований функціонал:
begin
Натисніть на точку в рядку, який містить перший випадок , натисніть C-SPC.
Перейти до наступного виникнення end
:
C-s end
RET
Замінити foo
на bar
:
M-% foo
RET bar
RET !
Це використовує той факт, що він query-replace
буде працювати на активній області замість всього буфера, якщо такий є.
Звичайно, ви також можете визначити спеціальну команду:
(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))))
Ця команда завжди шукатиме з початку буфера, тому точка може бути після begin
/ foo
/ end
коли ви викликаєте її.
Встановіть прив'язку ключів до нього за допомогою:
(global-set-key (kbd "C-c r") 'replace-from-to)