2014-02-26 61 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

嗯,這正是你所描述的最初是。您以後回覆評論顯示,您實際上不想搜索區域中的文字;你想要搜索對於該地區的文字,在其他地方的緩衝區。這是前者,而不是後者。