como fazer o grep funcionar no Emacs no Windows (EmacsW32)
Pergunta
Mx grep, Mx lgrep, Mx rgrep não funcionam no EmacsW32 para mim.
Eu faço M-x lgrep e diz que grep não é um comando:
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
Além disso, o que é essa coisa NUL?A página inicial do EmacsW32 diz que vem com utilitários Gnuwin32, mas parece que o trabalho de configuração para realmente usar o grep Gnuwin32 é deixado para os usuários.
Como posso configurá-lo para usar o grep Gnuwin32 fornecido ou o grep cygwin?Ambos estão bem?
Solução
Este artigo tem algumas dicas sobre como fazer isso funcionar.
Eu fiz isso funcionar outro dia, você pode definir a variável de ambiente PATH dentro do emacs, e se você tiver o cygwin e/ou o gnuw32 instalado, basta definir o caminho para eles.Este é um trecho do meu .emacs aplicável apenas no Windows.Defino em variáveis (cygwin-bin, gnu-bin) o caminho onde os programas estão instalados.Em seguida, construa o caminho para eles.Uma desvantagem é que isso atrapalha o resto do meu caminho.O que não tem sido um problema até agora, mas se eu fosse mais esperto com o LISP provavelmente conseguiria descobrir alguma coisa.De qualquer forma, espero que isso ajude.
;;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))))
Devo acrescentar que cheguei a esta solução porque colocar qnuwin32 na frente do caminho no Windows parece uma proposta arriscada, você corre o risco de bagunçar outros programas em sua máquina.Portanto, este parecia ser um bom compromisso.
Outras dicas
O Windows não vem com um grep
utilidade (na verdade, ele tem findstr
, mas não é exatamente a mesma coisa), então você precisa instalar algo como Cygwin ou utilitários unix para windows.Depois de instalá-los, você precisa adicioná-los ao %PATH%
, para que o Windows saiba onde procurá-los.Você pode fazer isso na linha de comando executando cmd.exe
e emitindo um comando set PATH=<your_path>;%PATH%
ou em algumas configurações a janela que você obtém clicando com o botão direito em Meu computador ícone (chamado algo como variáveis ambientais aqui estão algumas fotos dele).
Observe que o Windows tem um utilitário chamado find
e também está no sistema %PATH%
, que pode fazer certos comandos (como M-x grep-find
) não funciona corretamente, por isso é importante que você coloque o unix-find primeiro no seu %PATH%
.
Eu acho que o usuário do emacsw32 precisa primeiro definir a opção de usuário w32shell-shell
através do menu Options > Customize EmacsW32
, que é definido como nenhum originalmente, e o usuário deve defini -lo como CMD ou Cygwin. Configurar para CMD significa que o MX Grep usará o GNUWIN32 GREP interno (e CMD.exe como uma concha) e, se a configuração for salva corretamente, os dotemacs conterão linhas como as seguintes:
(custom-set-variables
...
'(w32shell-shell (quote cmd))
...)
O formulário de variável personalizado deve ser colocado o mais próximo possível do início dos dotemacs.
Por alguma razão no meu sistema, isso não é suficiente, o MX Grep insistirá em usar "grep -n" como seu modelo em vez de "grep -nh -e" e sempre anexa "nu". Nesse caso, adicione a seguinte linha no arquivo dotemacs.
(grep-compute-defaults)
Aqui está uma resposta sem sentido que funciona:
http://groups.google.com/group/gnu.emacs.help/browse_thread/thread/39cd9d63b07a9988#
Apreciar!
Eu uso Cygwin (uma versão antiga). Para emacs, eu uso bibliotecas cygwin-mount.el e Configuração cygwin.el, carregado nessa ordem. Funciona muito bem.