windows emacs grep emacsw32

cómo hacer que grep trabaje en Emacs en Windows(EmacsW32)



(5)

Mx grep, Mx lgrep, Mx rgrep no funcionan en EmacsW32 para mí.

Hago Mx lgrep y dice que grep no es un comando:

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

Además, ¿qué es eso de 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?


Windows no viene con una utilidad grep (de hecho, tiene findstr , pero no es exactamente el mismo), por lo que debe instalar algo como cygwin o Unix utils para Windows . Después de instalarlos, debe agregarlos a %PATH% , para que windows sepa dónde buscarlos. Puede hacer eso en la línea de comandos ejecutando cmd.exe y emitiendo un comando set PATH=<your_path>;%PATH% o en algunos ajustes viuda que obtiene haciendo clic derecho en el ícono Mi PC (llamado algo así como variables de entorno aquí hay algunos fotos de ella).

Tenga en cuenta que Windows tiene una utilidad llamada find y también está en el sistema %PATH% , que puede hacer que ciertos comandos (como Mx grep-find ) no funcionen correctamente, por lo que es importante que coloque unix-find primero en su %PATH% .


Este artículo tiene algunos consejos sobre cómo hacer que esto funcione.

Lo hice el otro día, puedes configurar la variable de entorno PATH dentro de emacs, y si tienes cygwin y / o gnuw32 instalados, simplemente establece la ruta a esos. 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, llegué a esta solución porque poner qnuwin32 en la parte delantera de la ruta en Windows parece ser una propuesta arriesgada, usted corre el riesgo de estropear otros programas en su máquina. Entonces este parecía ser un buen compromiso.


Creo que el usuario de EmacsW32 primero debe establecer la opción de usuario w32shell-shell través del menú Options > Customize EmacsW32 , que está configurado como none originalmente, y el usuario debe establecerlo en cmd o cygwin. Establecerlo en cmd significa que Mx grep usará el grep Gnuwin32 incorporado (y cmd.exe como un shell) y si la configuración se guarda correctamente, los dotemacs contendrán líneas como las siguientes:

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

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

Por alguna razón en mi sistema, esto no es suficiente, Mx grep insistirá en usar "grep -n" como su 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)