4

这似乎是一个愚蠢的问题,也许应该将它定向到 gnuwin32 的论坛,但我会在这里尝试一下。

我在 Windows 的 emacs 中使用 grep。我不得不使用 grep-find vs rgrep,我更喜欢使用它,因为它清除了许多我不想 grep 的文件。不幸的是,rgrep 似乎创建了一个“查找”命令,该命令太长以至于阻塞并给出错误。

使用 Mx rgrep 在我的 python 文件中搜索“import”(愚蠢的例子,我知道)给出以下输出:

寻找 。-type d "(" -path " /SCCS" -o -path " /RCS" -o -path " /CVS" -o -path " /MCVS" -o -path " /.svn" -o -path " /.git" -o -path " /.hg" -o -path " /.bzr" -o -path "*/_MTN" -o -path "*/_darcs" -o -path " /{arch}" ")" -prune -o "(" -name ".# " -o -name " .o" -o -name " ~" -o -name " .bin" -o -name " .bak" -o -名称“ .obj”-o-名称“ .map”-o-名称“ .ico”-o-名称“ .pif”-o-名称“ .lnk”-o-名称“.386" -o -name " .elc" -o -name " .lof" -o -name " .glo" -o -name " .idx" -o -name " .lot" -o -name " .fmt " -o -name " .tfm" -o -name " .class" -o -name " .fas" -o -name " .lib" -o -name " .mem " -o -name " .x86f" - o -name " .sparcf" -o -name " .dfsl" -o -name " .pfsl" -o -name " .d64fsl" -o -name " .p64fsl" -o -name " .lx64fsl" -o -名称“ .lx32fsl”-o-名称“ .dx64fsl ”-o-名称“.dx32fsl”-o-名称“.fx64fsl" -o -name " .fx32fsl" -o -name " .sx64fsl" -o -name " .sx32fsl" -o -name " .wx64fsl" -o -name ".wx32fsl" -o -name " .fasl" -o -name " .ufsl" -o -name " .fsl" -o -name ".dxl" -o -name " .lo" -o -name " .la " -o -name " .gmo" -o -name " .mo" -o -name " .toc" -o -name " .aux" -o -name " .cp" -o -name " .fn" - o -name " .ky" -o -name " .pg" -o -name " .tp" -o -name " .vr" -o -name " .cps" -o -name " .fns" -o -名称“ .kys”-o -name“ .pgs”-o -name“.tps”-o -name .vrs”-o-name“.pyc" -o -name".pyo" ")" -prune -o -type f "(" -iname "*.py" ")" -exec grep -i -nH -e "import" {} + find:路径必须在表达式之前 用法:find [-H] [-L] [-P] [路径...] [表达式]

如果我将此命令剪切并粘贴到 cygwin 窗口中,该窗口从 /usr/bin 中提取 find,它可以正常工作并找到几个实例。如果我将相同的命令粘贴到然后使用 gnuwin32/bin/find.exe 的 cmd 窗口中,我会得到与上面相同的错误(查找:路径必须在表达式之前)。我还在 mingw shell 中尝试了该命令,它在那里工作(使用 /msys/1.0/bin/find.exe)。更复杂的是,将 find 的 mingw 版本复制到 /gnuwin32/bin/ 没有帮助。没有错误,但 grep 从来没有真正找到任何东西。更糟糕的是,这样做会以同样的方式破坏“grep-find”;什么都找不到。

我猜在使用 gnuwin32 版本的“find”时,我在这里遇到的整个命令的长度是有限制的。

我想我可以放弃 gnuwin32 并将我的路径更改为指向 /msys/1.0/bin 以获取我使用的命令,但是这些命令将不再在 cmd 窗口中运行,至少在没有访问 mingw 的情况下不会DLL。我的一部分想知道为什么 gnuwin32 版本的 find 令人窒息。有任何想法吗?很抱歉这个冗长的问题。

4

2 回答 2

3

emacs 知道可执行文件在哪里吗?

我有类似的东西.emacs 你可能想根据你的文件路径采用

 ;;; excutable paths (for unix commands from MSYS and git from msysgit)
 (setq exec-path (append exec-path
                         '("C:/MinGW/msys/1.0/bin/"
                           "C:/MinGW/bin/"
                           "c:/MinGW/mingw32/bin"

                           "C:/Program Files (x86)/Git/bin")))
于 2013-06-21T18:47:58.617 回答
3

对我来说,这个问题的正确答案在这里找到:

Gnuwin32 find.exe 在执行搜索之前扩展通配符

我下载了上面答案中列出的unxutils.zip并将 find.exe 从那里提取到我的 emacs bin 文件夹中。我不建议将复制到 emacs bin 文件夹作为最佳实践,但它可以避免大量配置开销,并且可以让您立即启动并运行。

于 2013-09-24T21:44:34.713 回答