Подтвердить что ты не робот

Команда Emacs для поиска в файлах

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

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

4b9b3361

Ответ 1

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

Он попросит:

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

В качестве дополнительного, он будет исключать личные каталоги управления версиями из вашего поиска (например, CVS,.svn или .git).

Ответ 2

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

M-x grep RET CODE_INIT_PARAMETERS *.c

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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