2008-10-14 71 views
37

我使用emacs查看和編輯代碼和其他文本文件。我想知道是否有方法向前或向後搜索當前緩衝區中標記的文本。類似於我可以在記事本或寫字板中做的事情。像我一樣,我可以在緩衝區中標記一些文本並執行C-s或C-r,並且能夠使用標記的文本進行搜索,而無需實際輸入整個搜索文本?在Emacs中搜索標記(選定)的文本

謝謝

羅希特

回答

30

是。 M-W(獲取所選文本的副本)C-s <RET> C-y <RET>。然後根據需要重複C-s。同樣爲C-r

+0

很高興我能幫到你。順便提一下,本手冊的相關部分是「20.1增量搜索基礎知識」。 Ch idm emacs g基本Isearch http://www.manpagez.com/info/emacs/emacs_95.php – 2008-10-14 21:20:25

+0

這就是我已經做到了這一點......我有點驚訝沒有一個內置的命令爲了這。 – fbmd 2014-11-07 15:38:50

+8

這不解釋如何搜索標記的文本。這解釋瞭如何搜索複製的文本。 – Jackson 2015-08-14 02:02:46

81

@Alex釘釘子。

我經常使用的另一個選項是C-s C-w來搜索當前標記之後的單詞。擊中C-w反覆增加搜索和其他單詞(例如,C-s C-w C-w C-w搜索當前標記之後的3個單詞)。

同樣,C-s C-y在當前標記和C-s C-M-y後搜索該行的其餘部分,搜索標記後面的字符。這些都以相同的方式可重複使用。

+1

確實是一個方便的提示。 – Rohit 2008-10-15 00:15:00

+0

同樣,`C-r C-w`向後搜索(「r」=反向)標記後的單詞。並且`C-r C-w C-w`向後搜索標記後面的兩個單詞。 – dougkramer 2015-02-05 07:44:48

6

最短的按鍵順序做,這是中號 - 瓦特Ç - 小號中號 - ÿ

12

我使用不具有不必鍵入多於1個的連續Cs的問題,下面找到後出現次數:

(defun search-selection (beg end) 
     "search for selected text" 
     (interactive "r") 
     (kill-ring-save beg end) 
     (isearch-mode t nil nil nil) 
     (isearch-yank-pop) 
    ) 
    (define-key global-map (kbd "<C-f3>") 'search-selection) 

以前的代碼的缺點是,所選擇的文本複製到拉伸。下面的代碼沒有這個問題:

(defun search-selection (beg end) 
     "search for selected text" 
     (interactive "r") 
     (let (
      (selection (buffer-substring-no-properties beg end)) 
      ) 
     (deactivate-mark) 
     (isearch-mode t nil nil nil) 
     (isearch-yank-string selection) 
    ) 
    ) 
    (define-key global-map (kbd "<C-f3>") 'search-selection) 
3

其他答案描述瞭如何搜索複製的文本,或者如何尋找在點字。但是他們都沒有描述如何「用標記文本搜索」。

添加下面的鉤子將讓這個當前選定的文本是用於一個ISEARCH文本:

(defun jrh-isearch-with-region() 
    "Use region as the isearch text." 
    (when mark-active 
    (let ((region (funcall region-extract-function nil))) 
     (deactivate-mark) 
     (isearch-push-state) 
     (isearch-yank-string region)))) 

(add-hook 'isearch-mode-hook #'jrh-isearch-with-region) 

提示:這對很好地與expand-region

3

有一個很好的功能:isearch-forward-symbol-at-point。它會突出顯示所有出現的單詞所在的位置 - 無需將單詞放在單詞的開頭。然後用C-s或C-r移動到下一個或上一個。

請注意,它完全匹配:如果您在hi上使用它,則不會匹配chill

我映射如果到command-f(mac OSX):(global-set-key (kbd "s-f") 'isearch-forward-symbol-at-point)在init文件中。