Как заставить работать grep в Emacs на Windows (EmacsW32)

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

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

5 ответов

Решение

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

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

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

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

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

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

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

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

(grep-compute-defaults)

Вот хороший ответ, который работает:

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

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

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

Другие вопросы по тегам