Polecenie Emacs do wyszukiwania w plikach

Chcę wyszukać we wszystkich plikach bieżącego folderu makro CODE_INIT_PARAMETERS. Mogę to zrobić. M-x-kod_init_parametry ale to pokazuje tylko wpisy z otwartych buforów.

Czy Jest jakiś sposób na przeszukiwanie wszystkich plików z bieżącego folderu, z Emacsa, bez przełączania NA m-x shell, a następnie grep ? Chcę unikać grepa, bo dla niektórych komend (m-x) Emacs robi skoki do kodu, I tego też chcę. Dzięki.

 61
Author: grayasm, 2009-08-26

7 answers

Możesz spróbować M-x rgrep.

Poprosi o:

  • katalog, w którym chcesz przeszukiwać rekurencyjnie
  • Wzór pliku dla plików, które chcesz włączyć w wyszukiwaniu
  • wzór, który chcesz wyszukać

Jako dodatek, wyłączy prywatne katalogi source control z twojego Wyszukiwania (jak CVS, .svn lub .git).

 111
Author: Jazz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 09:09:41

Emacs udostępnia wbudowane polecenie:

M-x grep RET CODE_INIT_PARAMETERS *.c

(i 'grep-find do przeszukiwania podkatalogów)

Choć wolę interfejs dostarczany przez zewnętrzny pakiet igrep (który dostarcza polecenia igrep i igrep-find).

 12
Author: Trey Jackson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-27 06:08:23

Jeśli otworzysz folder w dired i oznaczysz wszystkie pliki (za pomocą 'm'), Możesz uruchomić ' dired-do-search ('a' w moich powiązaniach). Spowoduje to przeszukanie wszystkich zaznaczonych plików. Aby przejść do następnego, Uruchom znaczniki-loop-continue (M -,)

Ustawiłem kilka funkcji elisp do oznaczania różnych podzbiorów plików (.pliki h,pliki cpp, itp.) i stworzyć rekurencyjny dired do przeszukiwania całego drzewa...

 6
Author: Brian Postow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-25 21:48:30

To ulepszenie sugestii Treya Jacksona.

M-x grep

Zobaczysz polecenie grep, np. grep -nH -e

Dodaj R do pierwszego zestawu FLAG (dla rekurencyjnego) i wpisz szukany termin po-e

grep -nHR -e CODE_INIT_PARAMETERS
Hit RET. Wyniki będą zrozumiałe dla Emacsa - będziesz mógł kliknąć lub w inny sposób nawigować do nich, jak M-x. Może być konieczne umieszczenie katalogu wyszukiwania na końcu polecenia:
grep -nHR -e CODE_INIT_PARAMETERS /path/to/root/of/search
 5
Author: Steven Huwig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 02:45:00

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

 3
Author: octi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 22:08:16

W przypadkach, gdy

  1. możesz szukać wielokrotnie; i
  2. etags będzie działać

Możesz rozważyć użycie etags i wywołanie find-tag (domyślnie związane z M-.) lub tags-search (Brak domyślnego wiązania, ale może być kontynuowane przez M-,).

 2
Author: dmckee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-27 19:59:33

Istnieje również tryb ACK-grep dla Emacsa, który używa narzędzia ACK-grep, które jest specjalnie zaprojektowane do "grepowania" języków programowania i IMHO wygląda ładniej niż wyjście m-x grep.

Ale jak wspomniano wcześniej etags powinien być właściwy sposób!

 1
Author: Chmouel Boudjnah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-31 05:32:30