有没有办法为isearch提供区域?
我想重载isearch以便:
C-s - > 1.如果没有选择任何地区,就像往常一样,或者 2. isearch with region as-be-used-for-search string
示例:我'选择'单词“no exit”,然后C-s应该在缓冲区中搜索“no exit”。 在某种程度上,当光标位于“否”的开头时,可以用C-s C-w C-w完成。 我想知道是否有办法扭转这种情况,所以首先选择(一些如何),然后使用选择进行搜索
答案 0 :(得分:2)
您可能会发现命令narrow-to-region
和widen
有用,请 Ch f narrow-to-region
RET 和 Ch f widen
RET 了解更多
<强>更新强>
这里有一些快速而又脏的代码可以做你想做的事情,我没有处理过一些简单的案例,但这应该给出一个想法
(add-hook 'isearch-mode-end-hook (lambda ()
(when (buffer-narrowed-p)
(widen))))
(defun my-isearch(&optional start end)
(interactive "r")
(when (region-active-p)
(narrow-to-region start end))
(call-interactively 'isearch-forward-regexp))
更新2
尝试以下功能,这应该做你想做的事情
(defun my-isearch(&optional start end)
(interactive "r")
(if (region-active-p)
(progn
(let ((string (buffer-substring-no-properties start end)))
(deactivate-mark)
(isearch-resume string nil nil t string nil)))
(call-interactively 'isearch-forward-regexp)))
答案 1 :(得分:2)
这正是Isearch+(isearch+.el
)提供的功能。搜索是否仅限于活动区域由布尔选项isearchp-restrict-to-region-flag
控制。
您可以使用C-x n
(命令
isearchp-toggle-region-restriction
)在搜索过程中切换此行为。
第二个布尔选项isearchp-deactivate-region-flag
控制是否在搜索期间停用该区域(例如,这样您可以更好地查看搜索区域)。
默认情况下,这两个选项均为true(搜索仅限于活动区域,搜索期间区域处于停用状态。)
(要将Isearch限制在 Info 中的有效区域,您还必须使用库Info+(info+.el
)。
的更新强> 的
嗯, 正是您最初描述的 。您之后对评论的回复表明,您实际上并不想 搜索区域中的文本 ;您希望搜索 区域中的文本,缓冲区中的其他位置。这是前者,而不是后者。