Aquí hay una forma de hacerlo que usa solo la funcionalidad incorporada:
Con el punto en la línea que contiene la primera aparición de begin
, presione C-SPC.
Pasar a la siguiente aparición de end
:
C-s end
RET
Reemplazar foo
con bar
:
M-% foo
RET bar
RET !
Esto hace uso del hecho de que query-replace
funcionará en la región activa en lugar de todo el búfer si hay uno.
Por supuesto, también puede definir un comando personalizado:
(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))))
Este comando siempre buscará desde el principio del búfer, por lo que el punto puede estar después begin
/ foo
/ end
cuando lo invocas.
Configure una combinación de teclas para ello a través de:
(global-set-key (kbd "C-c r") 'replace-from-to)