2009-08-25 57 views
56

我想從當前文件夾的所有文件中搜索宏CODE_INIT_PARAMETERS。 我可以做 M-x發生CODE_INIT_PARAMETERS 但這隻顯示來自開放緩衝區的條目。用於搜索文件的Emacs命令

有什麼方法可以從Emacs當前文件夾中搜索所有文件,而無需切換到M-x shell然後grep?我想避免grep,因爲對於某些命令(M-x發生),Emacs會跳轉到有問題的代碼,我也想這樣做。 謝謝。

回答

105

你可以試試M-x rgrep

它會詢問:

  • 要遞歸搜索目錄
  • 爲您希望在搜索
  • 您要搜索
  • 模式中包含的文件一個文件模式

作爲一個額外的,它將排除您的搜索源代碼管理私人目錄(如CVS,.svn或.git)。

+1

M-x rgrep的作品也很好。謝謝你的回答。 – grayasm 2009-08-27 19:16:50

+7

不能在Windows工作開箱:( – avp 2011-05-06 07:08:46

+5

你需要grep和發現(來自的GnuWin32),以及GNU發現必須在PATH的Windows FIND.EXE之前,grep和發現都安裝了EmacsW32。 – Jazz 2011-05-06 14:47:48

11

的Emacs提供了一個內置的命令:

M-x grep RET CODE_INIT_PARAMETERS *.c 

(和'grep-find搜索子目錄)

雖然我更喜歡由外部包igrep(其提供命令提供的接口igrepigrep-find )。

+0

M-X的grep,發現也可以讓你通過的結果,同樣的方式進行迭代。 – seth 2009-08-26 03:14:27

+1

你不需要做這樣的事嗎? 的Mx的grep「CODE_INIT_PARAMETERS」的* .c 值得一提的是,使用前綴參數會自動設置搜索了尋求光標在什麼和你是什麼樣的文件。 CU的Mx的grep – justinhj 2009-08-27 04:00:45

+0

@justinhj,如此正確。我沒有使用'M-x grep'顯示。 – 2009-08-27 05:59:32

5

如果你在dired中打開一個文件夾,並標記所有文件(用'm'),你可以在我的綁定中運行'dired-do-search('A')。這將搜索所有標記的文件。要進入下一個,運行tags-loop-continue(M-,)

我已經設置了幾個elisp函數來標記文件的各種子集(.h文件,.cpp文件等)和創建一個遞歸直接搜索整棵樹...

+0

我必須爲我的綁定做些事情。它可以工作,但暫時不方便。謝謝。 – grayasm 2009-08-27 19:40:56

1

  1. 可能會反覆搜索的情況;
  2. 的ETag 工作

你可以考慮使用etags和調用或者find-tag(默認綁定到M-.)或tags-search(沒有默認的約束力,但可以用M-,繼續)。

5

這是對Trey Jackson的建議的改進。

M-x grep

您將看到grep命令,例如,grep -nH -e

加上R的第一套標誌(遞歸),並把你的搜索詞後-e

grep -nHR -e CODE_INIT_PARAMETERS 

命中RET。 Emacs可以理解結果 - 您將能夠點擊或以其他方式導航到它們,例如M-x發生。你可能需要把搜索目錄在命令的末尾:

grep -nHR -e CODE_INIT_PARAMETERS /path/to/root/of/search 
+0

Yah,這就是爲什麼我喜歡''igrep',界面更直觀。 – 2009-08-26 03:20:16

+0

嗯,我不介意加-R。謝謝。 – grayasm 2009-08-27 19:24:26

1

有以及ack-grep mode對於使用該ack-grep工具,它是專門針對「設計Emacs的grepping「」編程語言和恕我直言看起來更好比Mx grep的輸出要低。

但正如前面提到的,etags應該是正確的方法!

1

M-X找到 - grep的-dired也適用同樣的rgrep