Команда Emacs для поиска в файлах - PullRequest
63 голосов
/ 26 августа 2009

Я хочу найти во всех файлах из текущей папки макрос CODE_INIT_PARAMETERS. я могу сделать M-x происходит CODE_INIT_PARAMETERS но это показывает только записи из открытых буферов.

Есть ли способ найти все файлы из текущей папки, из Emacs, не переключаясь на оболочку M-x и затем grep? Я хочу избежать grep, потому что для некоторых команд (M-x встречаются) Emacs делает переходы к некорректному коду, и я тоже этого хочу. Спасибо.

Ответы [ 7 ]

117 голосов
/ 26 августа 2009

Вы можете попробовать M-x rgrep.

Будет запрошено:

  • каталог, в котором вы хотите искать рекурсивно
  • шаблон файла для файлов, которые вы хотите включить в поиск
  • шаблон, который вы хотите найти

Кроме того, он исключит частные каталоги контроля версий из вашего поиска (например, CVS, .svn или .git).

12 голосов
/ 26 августа 2009

Emacs предоставляет встроенную команду:

M-x grep RET CODE_INIT_PARAMETERS *.c

'grep-find для поиска в подкаталогах)

Хотя я предпочитаю интерфейс, предоставляемый внешним пакетом igrep (который предоставляет команды igrep и igrep-find).

6 голосов
/ 26 августа 2009

если вы откроете папку в dired и отметите все файлы (с помощью «m»), вы можете запустить «dired-do-search» («A» в моих привязках). Это будет искать все отмеченные файлы. Чтобы перейти к следующему, запустите tags-loop-continue (M-,)

Я настроил несколько функций elisp, чтобы пометить различные подмножества файлов (.h файлы, .cpp файлы и т. Д.) И создать рекурсивный файл для поиска во всем дереве ...

5 голосов
/ 26 августа 2009

Это улучшение по предложению Трея Джексона.

M-x grep

Вы увидите команду grep, например grep -nH -e

Добавьте R к первому набору флагов (для рекурсивного) и поставьте поисковый запрос после -e

grep -nHR -e CODE_INIT_PARAMETERS

Хит RET. Результаты будут понятны Emacs - вы сможете щелкнуть или иным образом перейти к ним, как это происходит в M-x. Вам может понадобиться поместить каталог поиска в конец команды:

grep -nHR -e CODE_INIT_PARAMETERS /path/to/root/of/search
4 голосов
/ 25 июня 2015

M-x find-grep-dired также работает аналогично rgrep

2 голосов
/ 26 августа 2009

В случаях, когда

  1. Вы можете искать повторно; и
  2. etags будет работать

вы можете рассмотреть возможность использования etags и вызова либо find-tag (по умолчанию привязано к M-.), либо tags-search (без привязки по умолчанию, но можно продолжить с помощью M-,).

1 голос
/ 31 августа 2009

Существует также режим ack-grep для emacs, которые используют инструмент ack-grep , который специально разработан для языков программирования 'grepping', и IMHO выглядит лучше, чем вывод Mx grep.

Но, как уже упоминалось, etags должен быть правильным!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...