emacs rgrep在find命令中失败(Windows 7)

时间:2013-06-19 17:37:48

标签: emacs find gnuwin32

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

我在emacs for Windows中使用grep。我不得不使用grep-find vs rgrep,我更喜欢使用它,因为它清除了许多我不想grep的文件。不幸的是,rgrep似乎创建了一个“查找”命令,这个命令很长,以至于它会窒息而且会出错。

使用M-x 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 -name “ .obj”-o -name“ .map”-o -name“ .ico”-o -name“ .pif”-o -name“ .lnk“-o -name” .a“-o -name” .ln“-o -name” .blg“-o -name” .bbl“ - o -name“ .dll”-o -name“ .drv”-o -name“ .vxd”-o -name“ .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 -name“ .lx32fsl”-o -name“ .dx64fsl”-o -name“ .dx32fsl”-o -name“ .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 -name“ .kys”-o -name“ .pgs”-o -name“ .tps”-o -name“ .vrs“-o -name” .pyc“-o -name” .pyo“”​​)“ - pnene -o -type f”(“ - iname”* .py“ “)” - exec grep -i -nH -e“import”{} + find:路径必须在表达式之前 用法:找[-H] [-L] [-P] [路径...] [表达式]

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

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

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

2 个答案:

答案 0 :(得分:3)

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

Gnuwin32 find.exe expands wildcard before performing search

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

答案 1 :(得分:2)

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