如何让grep在Windows上的Emacs上工作(EmacsW32)

Mx grep,Mx lgrep,Mx rgrep不适用于EmacsW32。

我做Mx lgrep,它说grep不是一个命令:

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 

那又是什么东西? EmacsW32主页说它附带Gnuwin32实用程序,但似乎configuration实际使用Gnuwin32 grep的工作留给用户。

我如何configuration它使用运送的Gnuwin32 grep或cygwin grep? 都好吗?

这篇文章有一些关于如何得到这个工作的提示。

前些天我得到了这个工作,你可以在emacs中设置PATH环境变量,如果你安装了cygwin和/或gnuw32,只需设置路径即可。 这是我的.emacs中仅适用于Windows的片段。 我将变量(cygwin-bin,gnu-bin)设置为安装程序的路径。 然后建立这些路径。 一个缺点是它吹走了我的其余路径。 到目前为止,这并不是一个问题,但是如果我对LISP更聪明,我可能会想出一些东西。 无论如何,希望这有助于。

 ;;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)))) 

我应该补充一点,我到了这个解决方案,因为把qnuwin32放在windows的路径前面似乎是一个冒险的命题,你冒着在你的机器上搞乱其他程序的风险。 所以这似乎是一个很好的妥协。

Windows没有带有一个grep工具(事实上它有findstr ,但它不完全一样),所以你需要安装类似cygwin或unix utils for windows 。 安装完这些之后,需要将它们添加到%PATH% ,以便Windows知道在哪里查找它们。 您可以通过运行cmd.exe并发出命令set PATH=<your_path>;%PATH%或在某些设置窗口中通过右键单击“ 我的电脑”图标(称为“ 环境变量”它的图片)。

注意,windows有一个名为find的实用程序,它也在系统%PATH% ,可以使某些命令(如Mx grep-find )无法正确工作,所以重要的是将unix-find首先放入%PATH%

我认为EmacsW32用户首先需要通过菜单Options > Customize EmacsW32来设置用户选项w32shell-shell ,它最初设置为none,用户应该将其设置为cmd或者cygwin。 将其设置为cmd意味着Mx grep将使用内置的Gnuwin32 grep(和cmd.exe作为外壳程序),如果设置保存正确,dotemacs将包含以下行:

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

自定义变量表单应尽可能靠近dotemacs的开头。

出于某种原因,在我的系统中,这是不够的,Mx grep将坚持使用“grep -n”作为它的模板而不是“grep -nH -e”,它总是附加“NUL”。 在这种情况下,在dotemacs文件中添加以下行。

 (grep-compute-defaults) 

我使用Cygwin(旧版本)。 对于Emacs,我使用库cygwin-mount.el和setup-cygwin.el ,按照这个顺序加载。 工作得很好。