2009-08-25 13 views
56

Chcę wyszukać we wszystkich plikach z bieżącego folderu makro CODE_INIT_PARAMETERS. mogę zrobić M-x wystąpić CODE_INIT_PARAMETERS ale pokazuje to tylko wpisy z otwartymi buforami.Komenda Emacs do wyszukiwania w plikach

Czy istnieje jakiś sposób, aby wyszukać wszystkie pliki z bieżącego folderu, z Emacs, bez konieczności przełączania do M-x skorupy a następnie grep? Chcę uniknąć grep, ponieważ dla niektórych poleceń (występuje M-x) Emacs przeskakuje do obraźliwego kodu i ja też tego chcę. Dzięki.

Odpowiedz

105

można spróbować M-x rgrep.

Program zapyta o:

  • katalogu, w którym chcesz szukać rekurencyjnie
  • wzór pliku dla plików, które mają być uwzględnione w wyszukiwaniu
  • wzór chcesz szukać

jako dodatkowy, to wyklucza kontroli źródła prywatne katalogi z wyszukiwania (jak CVS, .svn lub .git).

+1

M-x rgrep działa również bardzo dobrze. Dziękuję za odpowiedź. – grayasm

+7

nie działa na Windowsie po wyjęciu z pudełka :( – avp

+5

Potrzebujesz grep i find (z GnuWin32), a GNU find musi znajdować się przed Windows find.exe w PATH grep i find są instalowane z EmacsW32 – Jazz

11

Emacs zapewnia wbudowany polecenia:

M-x grep RET CODE_INIT_PARAMETERS *.c 

(i 'grep-find aby wyszukiwać podkatalogi)

Choć wolę interfejs dostarczony przez pakietu zewnętrznego igrep (która przewiduje polecenia igrep i igrep-find).

+0

M-x grep zdobycia będą również pozwalają na iterację wyników, tak samo jak występuje. – seth

+1

Czy nie musiałbyś robić czegoś takiego? Mx grep „CODE_INIT_PARAMETERS” * .c Warto wspomnieć, że przy użyciu prefiksu automatycznie ustawi przeszukiwanie do poszukiwania tego, co znajduje się kursor nad i dla rodzaju pliku jesteś. CU Mx grep – justinhj

+0

@justinhj, więc poprawne. Mój brak używania 'M-x grep' pokazuje. –

5

jeśli otworzyć folder w Dired i zaznaczyć wszystkie pliki ('M') można uruchomić 'DIRED-DO-search (' a”na moich wiązań). Przeszuka wszystkie zaznaczone pliki. Aby przejść do następnego, uruchom znacznik-pętla-kontynuuj (M-,)

Mam skonfigurowanych kilka funkcji elisp do oznaczania różnych podzestawów plików (pliki .h, pliki .cpp, itp) i do stworzenia rekurencyjnego dIRED aby przeszukać całe drzewo ...

+0

Muszę coś zrobić dla moich wiązań. Działa, ale na razie nie jest przydatny. Dzięki. – grayasm

1

W przypadkach

  1. możesz być wielokrotnie szukają; i
  2. Etags będzie praca

można rozważyć użycie etags i wywoływanie albo find-tag (związany M-. domyślnie) lub tags-search (brak domyślnego wiążące, ale może być kontynuowana z M-,).

5

Jest to poprawa na sugestię Trey Jacksona.

M x grep

ekranie pojawi się polecenie grep npgrep -nH -e

Dodaj R do pierwszego zestawu flag (na rekurencyjne) i umieścić wyszukiwane hasło po -e

grep -nHR -e CODE_INIT_PARAMETERS 

RET trafiony. Wyniki będą zrozumiałe dla Emacsa - będziesz mógł kliknąć lub w inny sposób nawigować do nich, jak na przykład M-x. Być może trzeba umieścić w katalogu wyszukiwarki na końcu polecenia:

grep -nHR -e CODE_INIT_PARAMETERS /path/to/root/of/search 
+0

Yah, właśnie dlatego lubię' 'igrep', interfejs jest znacznie bardziej intuicyjny –

+0

Cóż, nie mam nic przeciwko dodaniu -R. Dzięki. – grayasm

1

Istnieje również ack-grep mode dla emacs, które używają funkcji ack-grep który został zaprojektowany specjalnie dla „” grepping „” języków programowania i IMHO wygląda ładniej niż wynik Mx grep.

Ale jak wspomniano wcześniej, etaty powinny być właściwym sposobem!

1

M-x find-grep-dired również działa podobnie jak rgrep

Powiązane problemy