2010-01-30 16 views
8

M-x grep, M-x lgrep, M-x rgrep nie działają dla mnie w EmacsW32.jak uzyskać grep pracy w Emacs na Windows (EmacsW32)

zrobić M-X lgrep i mówi grep nie jest poleceniem:

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 

Również to, co jest rzeczą, że NUL? Strona domowa EmacsW32 mówi, że jest dostarczana z narzędziami Gnuwin32, ale wygląda na to, że konfiguracja do korzystania z Gnuwin32 jest dostępna dla użytkowników.

Jak mogę skonfigurować go tak, aby korzystał z dostarczonego grep Gnuwin32 lub greckiego cygwin? Czy oba są w porządku?

+2

Tak, oba skróty powinny być w porządku. 'NUL' to fałszywy plik, odpowiednik'/dev/null' w Uniksie, który zachowuje się jak pusty plik. Myślę, że intencją jest, że jeśli zapomnisz umieścić listę plików w linii poleceń, 'grep' nie zawiedzie z komunikatem o błędzie (ponieważ jest plik NUL), ale jeśli myślisz o dostarczaniu plików, NUL będzie być ignorowanym (ponieważ nigdy nie pasuje). Jeśli to jest powód, to jest trochę rozdarcia włosów ze strony twórców Emacsa. –

+0

Czy ustawiłeś zmienną PATH tak, aby zawierała katalog z komendą 'grep'? Jeśli 'grep' jest dostarczany z EmacsW32, powinien znajdować się w widocznym miejscu. –

+0

Jeśli masz zainstalowane 'git-bash', możesz dołączyć' ... \ Git \ usr \ bin' do zmiennej PATH w systemie Windows, gdzie ... jest ścieżka do instalacji git-bash. –

Odpowiedz

3

This article ma kilka wskazówek, jak to działa.

Mam to działa na drugi dzień, możesz ustawić zmienną środowiskową PATH w emacs, a jeśli masz zainstalowane cygwin i/lub gnuw32 po prostu ustaw ścieżkę do nich. To jest fragment z mojego pliku .emacs, który dotyczy tylko okien. Ustawiam na zmienne (cygwin-bin, gnu-bin) na ścieżkę, na której instalowane są programy. Następnie zbuduj ścieżkę do nich. Jedną wadą jest to, że wysadza resztę mojej ścieżki. Co do tej pory nie było problemem, ale gdybym był mądrzejszy w LISP-ie, mógłbym coś wymyślić. W każdym razie, mam nadzieję, że to pomaga.

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

Dodam, ja przybyłem na to rozwiązanie, ponieważ oddanie qnuwin32 przed ścieżki w oknach wydaje się być ryzykowne twierdzenie, pojawia się ryzyko brudząc się innych programów na komputerze. To wydawało się dobrym kompromisem.

5

Windows nie pochodzą z grep użyteczności (w rzeczywistości to ma findstr, ale nie jest to dokładnie to samo), więc trzeba zainstalować coś jak cygwin lub unix utils for windows. Po zainstalowaniu należy je dodać do %PATH%, aby system Windows wiedział, gdzie je szukać. Można to zrobić zarówno w linii poleceń, uruchamiając cmd.exe i wydając komendę set PATH=<your_path>;%PATH% lub w niektórych ustawień wdowa uzyskać klikając prawym przyciskiem myszy na Mój komputerikona (tzw coś podobnego zmiennych środowiskowychhere kilka zdjęć z nią).

Uwaga, okna posiada narzędzie o nazwie find i to jest również w systemie %PATH%, że można dokonać pewnych poleceń (jak M-x grep-find) nie działa poprawnie, więc ważne jest, można umieścić pierwszy UNIX w Waszym %PATH%.

+1

Jeśli masz już Git dla Windows zainstalowany, dodaj następujące na końcu swojej PATH: C: \ Program Files \ Git \ usr \ bin – Patrick

1

myślę użytkownik EmacsW32 najpierw trzeba ustawić opcję obsługi w32shell-shell poprzez menu Options > Customize EmacsW32, który jest ustawiony na żadnym pierwotnie, a użytkownik powinien ustawić go na obu cmd lub Cygwin. Ustawienie na cmd oznacza Mx grep użyje wbudowanych GnuWin32 grep (i cmd.exe jako powłoki) i jeśli ustawienie zostanie zapisane prawidłowo, dotemacs będzie zawierać linie jak poniżej:

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

Zwyczaj Formularz "set-variable" powinien być umieszczony możliwie najbliżej początku dotemacs.

Z jakiegoś powodu w moim systemie to nie wystarcza, M-x grep będzie nalegał, aby użyć "grep -n" jako szablonu zamiast "grep -nH -e" i zawsze dodaje "NUL". W takim przypadku dodaj następujący wiersz w pliku dotemacs.

(grep-compute-defaults) 
Powiązane problemy