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?两者都很好吗?
答案 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)
这是一个非常有用的答案:
http://groups.google.com/group/gnu.emacs.help/browse_thread/thread/39cd9d63b07a9988#
享受!
答案 4 :(得分:0)
我使用Cygwin(旧版本)。对于Emacs,我使用按顺序加载的库cygwin-mount.el和setup-cygwin.el。工作得很好。