2011-02-11 34 views
3

我通常做find-grep-dired在項目目錄中查找表達式。這給了我一個很好的包含該表達式的所有文件的dired視圖。但是我的下一步總是打開其中一個文件,並使用相同的搜索表達式執行isearch-forward。我怎樣才能讓自己不用每次輸入兩次搜索詞(或者如果有多個文件需要編輯,可以輸入兩次以上)?Emacs find-grep-dired然後在給定的正則表達式自動isearch-forward

回答

5

這應該爲你工作:

  1. 運行find-grep-dired像往常一樣
  2. * T(dired-切換的標誌),以紀念所有文件。
  3. A開始dired-do-search。當出現提示時,而不是打字,請按M-p,這將調出您的find-grep正則表達式,因爲這兩個函數使用相同的提示歷史列表
  4. 您將被帶到第一個文件中的第一個匹配。這裏有趣的部分,只需按下M-,即可轉到下一個匹配項,跨越所有匹配的文件。
  5. 贏利? (抱歉,無法抗拒)

如果你想這一切在一杆,在這裏你去:

(defun find-grep-dired-do-search (dir regexp) 
    "First perform `find-grep-dired', and wait for it to finish. 
Then, using the same REGEXP as provided to `find-grep-dired', 
perform `dired-do-search' on all files in the *Find* buffer." 
    (interactive "DFind-grep (directory): \nsFind-grep (grep regexp): ") 
    (find-grep-dired dir regexp) 
    (while (get-buffer-process (get-buffer "*Find*")) 
    (sit-for 1)) 
    (with-current-buffer "*Find*" 
    (dired-toggle-marks) 
    (dired-do-search regexp))) 
+1

`dired-do-search`在dired緩衝區中綁定到`A`。 – ataylor 2011-02-11 19:05:07

+0

謝謝,我做了編輯。 – 2011-02-13 02:09:47

3

您可以將您在find-grep-dired中使用的搜索字符串存儲在殺戒(C-SPACE C-a M-w)中。然後,您使用殺戒中的字符串(C-s M-y)在文件中進行搜索。 M-y會抽出最後一串殺死的文本。

您可以使用C-h k C-s顯示isearch-forward的其他(有用)綁定。

+0

謝謝,這是一種方式,當然。我希望能少一些牽涉其中的東西,比如單個綁定到最後一個搜索字符串的isearch。 – 2011-02-11 15:35:25

2

怎麼樣不同的方法?嘗試使用igrep.el包中的M-x igrep-find

默認情況下,它會搜索所有出現的格局,但你可以改變行爲,只要找到第一個事故發生有:

(setq igrep-options "-i -m 1") ;; I like -i for case-insensitivity 

這將導致編譯風格緩衝(命名爲*igrep*),每個文件都有一行,當你點擊該行(或者執行Cx`)時,你將自動被放在匹配的行上。另外,您可以在*igrep*緩衝區中看到匹配的行。

顯然,如果您想要查看每個文件的多個匹配項,請更改-m之後的數字,或者完全忽略該部分。