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

时间:2010-01-30 21:29:55

标签: windows emacs grep emacsw32

M-x grep,M-x lgrep,M-x rgrep对我来说在EmacsW32中不起作用。

我做M-x 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

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

如何配置它以使用随附的Gnuwin32 grep或cygwin grep?两者都很好吗?

5 个答案:

答案 0 :(得分:5)

Windows没有grep实用程序(事实上它确实有findstr,但它不完全相同),因此您需要安装类似cygwin或{的内容{3}}。安装完成后,您需要将它们添加到%PATH%,以便Windows知道在哪里查找它们。您可以通过运行cmd.exe并发出命令set PATH=<your_path>;%PATH%在命令行中执行此操作,或者在某些设置中通过右键单击我的计算机图标(称为< em>环境变量 unix utils for windows是它的一些图片。)

注意,windows有一个名为find的实用程序,它也在系统%PATH%中,可以使某些命令(如M-x grep-find)无法正常工作,所以你放置它很重要unix - 首先在%PATH%中找到。

答案 1 :(得分:3)

This article有一些关于如何使其正常工作的提示。

我前几天工作了,你可以在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)))) 

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

答案 2 :(得分:1)

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

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

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

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

(grep-compute-defaults)

答案 3 :(得分:0)

答案 4 :(得分:0)

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