Answers:
这是仅使用内置功能的一种实现方法:
在包含第一个出现的线的点上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)
通常,这是您要使用的东西narrow-to-region
。
您将光标移动到(例如,通过搜索)区域的开头并按C-SPC
,然后移动到区域的结尾并键入M-x narrow-to-region
。现在,您可以发出所需的任何搜索和替换命令,它们仅适用于缓冲区的狭窄部分。完成后,键入M-x widen
以恢复缓冲区内容。
begin
/ end
是一种编程语言中的分隔符,则您很可能可以使用C-M-Space
来运行mark-sexp
以在一个命令中选择区域。
C-x n n
(narrow-to-region
)和C-x n w
(widen
)。