2010-01-27 12 views
7

A menudo utilizo el comando grep-find en emacs para buscar a través de mis archivos fuente, pero me parece que siempre encuentra coincidencias en archivos temporales y de respaldo, y así sucesivamente. El comando por defecto para grep-hallazgo es:Cadena predeterminada para grep-find en emacs

find . -type f -print0 | xargs -0 -e grep -nH -e 

Sé que puedo modificarlo antes de correr para que coincida con mis necesidades, pero ¿Cómo cambio es tal que es correcta en el arranque?

Respuesta

8

El paquete grep calcula una serie de valores predeterminados por adelantado (pero no necesariamente en la carga del paquete). Así que querrá que eso suceda, y luego redefinirá el comando find. Algo así como:

(grep-compute-defaults) 
(setq grep-find-command "find . ! -name \"*~\" ! -name \"#*#\" -type f -print0 | xargs -0 -e grep -nH -e ") 
+0

Gracias esto funciona bien (solo necesita un espacio al final). – Zitrax

+4

Tuve que usar 'grep-apply-setting' en Emacs 24:' (grep-apply-setting 'grep-find-command' ¡buscar.! -name \ "* ~ \"! -name \ "# * # \ "-type f -print0 | xargs -0 -e grep -nH -e") ' – sandinmyjoints

0

Tome un vistazo a cómo la versión de desarrollo actual de Emacs maneja - que suministra una enorme lista de patrones de exclusión.

+0

Si la lista es enorme ¿evitan enumerar el comando completo en el mini buffer? Realmente no necesito verlo cada vez que hago una búsqueda. – Zitrax

+0

a) pruébelo y vea; b) sí, evitan incluirlo en el minibúfer. Sin embargo, aparece en la parte superior del búfer '* grep *' (es decir, donde va la salida), y es bastante grande. – offby1

7

Si utiliza lgrep o rgrep en lugar de grep hallar Puede configurar los archivos/directorios ignorados por adelantado:

(eval-after-load "grep" 
    '(progn 
    (add-to-list 'grep-find-ignored-files "*.tmp") 
    (add-to-list 'grep-find-ignored-directories "_darcs"))) 
+0

Agregué '" .min.js "' a 'grep-find-ignored-files', pero rgrep no lo respeta. Todavía obtengo resultados con los archivos * .min.js. – mcandre

+0

Ah, '" * .min.js "' hace el truco. – mcandre

+0

¡Gracias por esto! También es útil para 'helm-ag', que también usa la configuración de las variables' grep-find-ignored * '. En lugar de agregar a la lista existente, he elegido conectarla como '(personalizar-establecer-variable 'grep-find-ignored-directories (lista" SCCS "" RCS "" CVS "" MCVS "" .svn "" .git "" .hg "" .bzr "" _MTN "" _darcs "" {arch} "" objetos "" build "" bin "" out "" lib "))' – Rob

2

Si usa GNU grep otra buena solución es poner algo como esto en su .bashrc

export GREP_OPTIONS="--exclude=*#* --exclude=*.svn* --exclude=entries --exclude=all-wcprops --exclude=*.xcuserstate --exclude=project.pbxproj --exclude=*.svn-base --exclude=*.tmp" 

y simplemente dile a grep que ignore ciertos archivos. Luego obtienes el mismo comportamiento desde la línea de comandos también.

Cuestiones relacionadas