Aqui está uma maneira de fazer isso que usa apenas a funcionalidade incorporada:
Com o ponto na linha que contém a primeira ocorrência de begin
, pressione C-SPC.
Mover para a próxima ocorrência de end
:
C-s end
RET
Substitua foo
por bar
:
M-% foo
RET bar
RET !
Isso utiliza o fato de que query-replace
funcionará na região ativa, em vez de no buffer inteiro, se houver um.
Obviamente, você também pode definir um 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 sempre procurará desde o início do buffer, portanto, o ponto pode ser posterior a begin
/ foo
/ end
quando você o chama.
Configure uma ligação de chave para ele via:
(global-set-key (kbd "C-c r") 'replace-from-to)