12

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

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

如何将其配置为使用随附的 Gnuwin32 grep 或 cygwin grep?两个都好吗?

4

5 回答 5

5

Windows 没有附带grep实用程序(实际上它确实有findstr,但并不完全相同),因此您需要为 windows 安装cygwinunix utils之类的东西。安装后,您需要将它们添加到%PATH%,以便 windows 知道在哪里寻找它们。您可以通过运行cmd.exe并发出命令在命令行中执行此操作,也set PATH=<your_path>;%PATH%可以通过右键单击“我的电脑”图标在某些设置窗口中执行此操作(此处称为环境变量 之类的东西是它的一些图片)。

请注意,windows 有一个名为的实用程序find,它也在 system 中%PATH%,它可以使某些命令(如M-x grep-find)无法正常工作,因此将 unix-find 放在您的%PATH%.

于 2010-01-31T13:29:51.087 回答
5

本文提供了一些有关如何使其正常工作的提示。

前几天我得到了这个工作,你可以在 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 中的路径前面似乎是一个冒险的提议,你冒着弄乱机器上其他程序的风险。所以这似乎是一个很好的妥协。

于 2010-01-31T16:32:38.190 回答
1

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

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

custom-set-variable 表单应尽可能靠近 dotmacs 的开头放置。

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

(grep-compute-defaults)
于 2010-02-07T18:52:07.300 回答
0

这是一个有效的严肃答案:

http://groups.google.com/group/gnu.emacs.help/browse_thread/thread/39cd9d63b07a9988#

享受!

于 2010-02-27T10:14:39.960 回答
0

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

于 2011-08-21T22:38:11.957 回答