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