2010-01-30 14 views
8

M-x grep, M-x lgrep, M-x rgrep no funcionan en EmacsW32 para mí.cómo obtener grep trabajando en Emacs en Windows (EmacsW32)

hago M-x lgrep y dice grep no es una orden:

grep -i -n "hello" * NUL 
'grep' is not recognized as an internal or external command, 
operable program or batch file. 

Grep finished with no matches found at Sun Jan 31 05:59:06 

también lo es que lo NUL? La página de inicio de EmacsW32 dice que se envía con las utilidades Gnuwin32, pero parece que el trabajo de configuración para usar realmente el grep Gnuwin32 queda en manos de los usuarios.

¿Cómo puedo configurarlo para usar Gnuwin32 grep o cygwin grep? ¿Están ambos bien?

+2

Sí, ambas greps deberían estar bien. 'NUL' es un archivo falso, el equivalente de'/dev/null' en Unix, que se comporta como un archivo vacío. Creo que la intención es que si olvidas poner una lista de archivos en la línea de comando, 'grep' no fallará con un mensaje de error (ya que hay un archivo NUL), pero si piensas en proporcionar archivos, NUL ser ignorado (ya que nunca coincide). Si ese es el motivo, los creadores de Emacs se están peinando un poco. –

+0

¿Ha establecido su variable PATH para contener un directorio que tenía un comando 'grep'? Si 'grep' se proporciona con EmacsW32, debe estar en una ubicación destacada. –

+0

Si tiene 'git-bash' instalado, puede incluir' ... \ Git \ usr \ bin' en su variable PATH de Windows donde ... es la ruta a su instalación de git-bash. –

Respuesta

3

This article tiene algunos consejos sobre cómo hacerlo funcionar.

Lo tengo trabajando el otro día, puede establecer la variable de entorno PATH en emacs, y si tiene cygwin y/o gnuw32 instalados, simplemente establezca la ruta a aquellos. Este es un fragmento de mis .emacs que solo se aplica en Windows. Establecí las variables (cygwin-bin, gnu-bin) en la ruta donde están instalados los programas. Luego construye el camino hacia ellos. Una desventaja es que se lleva el resto de mi camino. Lo cual no ha sido un problema hasta ahora, pero si fuera más inteligente con LISP probablemente podría resolver algo. De todos modos, espero que esto ayude.

;;windows only stuff 

(when (string-equal system-type "windows-nt") 

(progn 

(setq cygwin-bin "c:\\apps\\cygwin\\bin") 

(setq gnu-bin "C:\\apps\\GnuWin32\\gnuwin32\\bin") 

(setenv "PATH" 

(concat cygwin-bin ";" gnu-bin ";")) 

(setq exec-path 

'(cygwin-bin gnu-bin)))) 

debo añadir, que llegó a esta solución porque poner qnuwin32 delante de la trayectoria de las ventanas parece ser una propuesta arriesgada, se corre el riesgo de echar a perder otros programas en su máquina. Entonces este parecía ser un buen compromiso.

5

de Windows no viene con una utilidad grep (de hecho sí tiene findstr, pero no es exactamente lo mismo), por lo que necesita para instalar algo así como cygwin o unix utils for windows. Después de instalarlos, debe agregarlos al %PATH%, para que Windows sepa dónde buscarlos. Usted puede hacer que sea en la línea de comandos ejecutando cmd.exe y la emisión de una orden set PATH=<your_path>;%PATH% o en alguna configuración de la viuda se obtiene haciendo clic derecho en un icono Mi PC (llamado algo así como variables de entorno here son algunas fotos de ella).

Nota, Windows tiene una utilidad llamada find y es también en el sistema de %PATH%, que puede hacer que ciertos comandos (como M-x grep-find) no funciona correctamente, por lo que es importante poner Unix encontró por primera vez en su %PATH%.

+1

Si ya tiene instalado Git para Windows, agregue lo siguiente al final de su RUTA: C: \ Archivos de programa \ Git \ usr \ bin – Patrick

1

Creo que el usuario de EmacsW32 primero debe establecer la opción de usuario w32shell-shell a través del menú Options > Customize EmacsW32, que está configurado originalmente como none, y el usuario debe establecerlo en cmd o cygwin. Si se establece en cmd significa Mx grep utilizará las líneas incorporado en GnuWin32 grep (y cmd.exe como una concha) y si el ajuste se guarda correctamente, los dotemacs contendrán como la siguiente:

(custom-set-variables 
... 
'(w32shell-shell (quote cmd)) 
...) 

La costumbre -la forma de variable de ajuste debe colocarse lo más cerca posible del comienzo de los dotemacs.

Por alguna razón en mi sistema, esto no es suficiente, M-x grep insistirá en usar "grep -n" como plantilla en lugar de "grep -nH-e" y siempre agrega "NUL". En ese caso, agregue la siguiente línea en el archivo dotemacs.

(grep-compute-defaults) 
Cuestiones relacionadas