2009-08-25 10 views
56

Deseo buscar en todos los archivos de la carpeta actual la macro CODE_INIT_PARAMETERS. Puedo hacer M-x ocurren CODE_INIT_PARAMETERS pero esto muestra solo entradas de búferes abiertos.Comando Emacs para buscar en archivos

¿Hay alguna manera de buscar todos los archivos de la carpeta actual, desde Emacs, sin cambiar a M-x shell y luego grep? Quiero evitar grep, porque para algunos comandos (M-x ocurre) Emacs hace saltos al código ofensivo, y yo también quiero eso. Gracias.

Respuesta

105

Puede intentar M-x rgrep.

En él se solicita:

  • el directorio en el que desea buscar de forma recursiva
  • un patrón de archivo para los archivos que desea incluir en la búsqueda
  • el patrón que desea buscar

Como extra, excluirá los directorios privados de control de origen de su búsqueda (como CVS, .svn o .git).

+1

M-x rgrep también funciona muy bien. Gracias por responder. – grayasm

+7

no funciona en Windows de fábrica :( – avp

+5

Necesita grep y find (de GnuWin32), y GNU find debe estar antes de Windows find.exe en la RUTA. Grep y find están instalados con EmacsW32. – Jazz

11

Emacs proporciona un comando integrado:

M-x grep RET CODE_INIT_PARAMETERS *.c 

(y 'grep-find para buscar subdirectorios)

Aunque yo prefiero la interfaz proporcionada por un paquete externo igrep (que proporciona los comandos igrep y igrep-find)

+0

M-x-grep encontrar también le permiten iterar a través de los resultados, del mismo modo que se produzca. – seth

+1

¿No necesitarías hacer algo como esto? Mx grep "CODE_INIT_PARAMETERS" * .c Vale la pena mencionar que el uso de un argumento prefijo ajustará automáticamente la búsqueda para buscar lo que el cursor se encuentra sobre y para el tipo de archivo que se encuentre. CU Mx grep – justinhj

+0

@justinhj, entonces correcto. Mi falta de uso de 'M-x grep' se muestra a través de. –

5

si abre una carpeta en dired y marca todos los archivos (con 'm') puede ejecutar 'dired-do-search (' A 'en mis enlaces). Esto buscará todos los archivos marcados. Para pasar al siguiente, ejecute tags-loop-continue (M-,)

He configurado varias funciones elisp para marcar varios subconjuntos de los archivos (archivos .h, .cpp, etc.) y para crear una dirección recursiva para buscar un árbol completo ...

+0

Debo hacer algo por mis ataduras. Funciona, pero no es útil por el momento. Gracias. – grayasm

1

En los casos en que

  1. puede que esté buscando en varias ocasiones; y
  2. eTags se trabajo

se podría considerar el uso de etags e invocando ya sea find-tag (ligado a M-. por defecto) o tags-search (unión sin defecto, pero se puede continuar con M-,).

5

Esto es una mejora en la sugerencia de Trey Jackson.

M-x grep

Usted verá el comando grep, por ejemplo,grep -nH -e

Agregar R para el primer conjunto de indicadores (por recursiva), y poner el término de búsqueda después de -e

grep -nHR -e CODE_INIT_PARAMETERS 

RET Hit. Los resultados serán comprensibles por Emacs: podrá hacer clic o navegar hacia ellos, como ocurre M-x. Es posible que tenga que poner el directorio de búsqueda en la parte final del comando:

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

Yah, es por eso que me gusta' 'igrep', la interfaz es mucho más intuitiva. –

+0

Bueno, no me importa agregar -R. Gracias. – grayasm

1

No es así ack-grep mode de emacs que utilizan la herramienta ack-grep que está diseñado específicamente para '' grepping '' lenguajes de programación y en mi humilde opinión se ve mejor que la salida de Mx grep.

¡Pero como se mencionó anteriormente, los etags deberían ser la manera correcta!

1

M-x find-grep-dired también funciona de manera similar como rgrep

Cuestiones relacionadas