给区域搜索emacs

时间:2014-02-26 10:58:16

标签: emacs isearch

有没有办法为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完成。 我想知道是否有办法扭转这种情况,所以首先选择(一些如何),然后使用选择进行搜索

2 个答案:

答案 0 :(得分:2)

您可能会发现命令narrow-to-regionwiden有用,请 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)。


更新

嗯, 正是您最初描述的 。您之后对评论的回复表明,您实际上并不想 搜索区域中的文本 ;您希望搜索 区域中的文本,缓冲区中的其他位置。这是前者,而不是后者。