2009-08-25 12 views
56

Voglio cercare in tutti i file dalla cartella corrente per la macro CODE_INIT_PARAMETERS. Posso fare M-x si verifica CODE_INIT_PARAMETERS ma questo mostra solo le voci da buffer aperti.Comando Emacs per la ricerca nei file

C'è un modo per cercare tutti i file dalla cartella corrente, da Emacs, senza passare alla shell M-x e quindi grep? Voglio evitare grep, perché per alcuni comandi (si verifica M-x) Emacs salta al codice offensivo, e lo voglio anch'io. Grazie.

risposta

105

Si può provare M-x rgrep.

Si chiederà:

  • la directory in cui si desidera effettuare la ricerca in modo ricorsivo
  • un modello di file per i file che si desidera includere nella ricerca
  • il modello che si desidera cercare

Come extra, esclude le directory private di controllo del codice sorgente dalla ricerca (come CVS, .svn o .git).

+1

M-x rgrep funziona anche molto bene. Grazie per la risposta. – grayasm

+7

non funziona su Windows: – avp

+5

Hai bisogno di grep e find (da GnuWin32), e GNU find deve essere prima di Windows find.exe nel PATH. Grep e find sono installati con EmacsW32. – Jazz

11

Emacs fornisce un built-in comando:

M-x grep RET CODE_INIT_PARAMETERS *.c 

(e 'grep-find per cercare gli indici secondari)

Anche se io preferisco l'interfaccia fornita da un pacchetto esterno igrep (che fornisce i comandi igrep e igrep-find).

+0

M-x-grep trovare permetterà anche per scorrere i risultati, allo stesso modo di verificarsi. – seth

+1

Non avresti bisogno di fare qualcosa del genere? Mx grep "CODE_INIT_PARAMETERS" * .c Vale la pena ricordare che l'utilizzo di un argomento prefisso imposterà automaticamente la ricerca fino a cercare ciò che il cursore si trova sopra e per il tipo di file che si sta in. CU Mx grep – justinhj

+0

@justinhj, così corretto. La mia mancanza di usare 'M-x grep' è visibile. –

5

se si apre una cartella in dired e si contrassegnano tutti i file (con 'm') è possibile eseguire 'dired-do-search (' A 'nei miei binding). Questo cercherà tutti i file contrassegnati. Per passare a quello successivo, eseguire tag-loop-continue (M-,)

Ho impostato diverse funzioni elisp per contrassegnare vari sottoinsiemi di file (file .h, file .cpp, ecc.) E per creare un dired ricorsivo per cercare un intero albero ...

+0

Devo fare qualcosa per i miei attacchi. Funziona ma non è a portata di mano per il momento. Grazie. – grayasm

1

Nei casi in cui

  1. potete cercare più volte; e
  2. etags volontà lavoro

si potrebbe considerare l'utilizzo di etags e invocando sia find-tag (legato a M-. per impostazione predefinita) o tags-search (vincolante non di default, ma può essere proseguita con M-,).

5

Questo è un miglioramento del suggerimento di Trey Jackson.

M-x grep

Vedrete il comando grep, per esempiogrep -nH -e

Add R per la prima serie di bandiere (per ricorsiva), e mettere il vostro termine di ricerca dopo -e

grep -nHR -e CODE_INIT_PARAMETERS 

Hit RET. I risultati saranno comprensibili da Emacs: potrai fare clic o altrimenti navigare verso di essi, come accade in M-x. Potrebbe essere necessario mettere la directory di ricerca alla fine del comando:

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

Yah, è per questo che mi piace' 'igrep', l'interfaccia è molto più intuitiva. –

+0

Beh, non mi dispiace aggiungere -R. Grazie. – grayasm

1

C'è così ack-grep mode per Emacs che utilizzano lo strumento ack-grep che è specificamente progettato per '' grep '' linguaggi di programmazione e IMHO sembra più bello rispetto all'output di Mx grep.

Ma come accennato in precedenza gli etags dovrebbero essere il modo corretto!

1

M-x-trovare grep-dired anche funziona in modo simile come rgrep

Problemi correlati