2014-02-26 64 views
3

有没有办法给isearch提供一个区域?给区域搜索emacs

我想重载ISEARCH使得:

CS - > 1. ISEARCH照常如果没有选择任何区域,OR 2. ISEARCH与区域作为待使用的换搜索字符串

例如:我'选择'单词“没有退出”,然后Cs应该搜索缓冲区“无退出”。 通过某种方式,当光标位于“否”的开头时,可以用C-s C-w C-w完成。 我不知道是否有扭转这种方式,所以首先选择(一些如何),然后使用选择搜索

+0

也许首先是“狭义的区域”? –

+0

@Dave'狭窄的区域'听起来不错,但这可能是一个不错的功能。不幸的是,我不能仅仅在isearch的基础上进行攻击,因为它在该区域处于活动状态时已经有用。也许'isearch - * - region'会是一个很好的补充。 – pmr

+0

可能的重复[在Emacs中搜索标记(选定)的文本](http://stackoverflow.com/questions/202803/searching-for-marked-selected-text-in-emacs) –

回答

2

您可能会发现命令narrow-to-regionwiden有用的,做˚Fnarrow-to-regionRET˚FwidenRET了解更多

UPDAT Ë

下面是一些快速和肮脏的代码做你想要什么,我还没有处理某些情况下,为简单起见,但这应该给一个想法

(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))) 
+0

感谢您的快速回答。我认为我的观点没有很好解释。您的解决方案将在该可选区域内搜索。我想要做的就是使用该区域的内容作为一个字符串进行搜索。在伪代码它会是这样的:寻找当前“文件/缓冲区”字符串“地区”的出现 – tihu

+0

@tihu尝试更新的答案 – 2014-02-26 15:59:30

+0

太棒了!谢谢,那就是我一直在寻找的:) – tihu

2

这正是可与Isearch+isearch+.el)。搜索是否限制在活动区域​​由布尔选项isearchp-restrict-to-region-flag控制。

您可以在搜索期间使用C-x n(命令 isearchp-toggle-region-restriction)切换此行为。

第二个布尔选项isearchp-deactivate-region-flag控制在搜索过程中是否停用该区域(例如,以便您可以更好地查看搜索区域)。

默认情况下,这两个选项均为真(搜索仅限于活动区域,并且在搜索过程中该区域被禁用)。

(对于ISEARCH被限制到有源区信息,还必须使用库Info+info+.el)。


UPDATE

嗯,这正是你所描述的最初是。您以后回复评论显示,您实际上不想搜索区域中的文字;你想要搜索对于该地区的文字,在其他地方的缓冲区。这是前者,而不是后者。