как заставить работать grep в Emacs на Windows (EmacsW32) - PullRequest
9 голосов
/ 31 января 2010

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, но кажется, что работа по настройке для фактического использования grep Gnuwin32 оставлена ​​пользователям.

Как я могу настроить его для использования Gp Guuwin32 или Cygwin Grep? Оба хорошо?

Ответы [ 5 ]

5 голосов
/ 31 января 2010

Windows не поставляется с утилитой grep (на самом деле она имеет findstr, но это не совсем то же самое), поэтому вам нужно установить что-то вроде cygwin или утилиты Unix для Windows . После их установки вам нужно добавить их в %PATH%, чтобы окна знали, где их искать. Вы можете сделать это либо в командной строке, запустив cmd.exe и введя команду set PATH=<your_path>;%PATH%, либо в вдове некоторых настроек, щелкнув правой кнопкой мыши значок Мой компьютер (называемый что-то вроде переменные среды *) 1013 * здесь несколько его фотографий).

Обратите внимание, что в Windows есть утилита под названием find, и она также есть в системе %PATH%, которая может заставить некоторые команды (например, M-x grep-find) работать некорректно, поэтому важно, чтобы вы ставили unix-find первым в вашем %PATH%.

3 голосов
/ 31 января 2010

В этой статье есть несколько советов, как заставить это работать.

Я получил это на днях, вы можете установить переменную окружения PATH внутри emacs, и если у вас установлены 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 кажется рискованным предложением, вы рискуете испортить другие программы на вашем компьютере. Так что это был хороший компромисс.

1 голос
/ 07 февраля 2010

Я думаю, что пользователю EmacsW32 сначала нужно установить пользовательскую опцию w32shell-shell через меню Options > Customize EmacsW32, которая изначально не имеет значения, и пользователь должен установить ее либо на cmd, либо на cygwin. Установка его в cmd означает, что M-x grep будет использовать встроенный Gnuwin32 grep (и cmd.exe в качестве оболочки), и если настройка сохранена правильно, то dotemacs будет содержать строки, подобные следующим:

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

Форма пользовательских наборов переменных должна располагаться как можно ближе к началу дотемаков.

По какой-то причине в моей системе этого недостаточно, M-x grep будет настаивать на использовании «grep -n» в качестве шаблона вместо «grep -nH -e» и всегда добавляет «NUL». В этом случае добавьте следующую строку в файл dotemacs.

(grep-compute-defaults)
0 голосов
/ 22 августа 2011

Я использую Cygwin (старая версия). Для Emacs я использую библиотеки cygwin-mount.el и setup-cygwin.el , загруженные в указанном порядке. Работает просто отлично.

0 голосов
/ 27 февраля 2010

Вот такой нонсенс-ответ, который работает:

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

Наслаждайтесь!

...