Рекурсивный grep в директории с рулем и / или снарядом?

11

Рекурсивный grep в каталоге должен быть самым простым, но я пока не нашел рецепт, чтобы заставить его работать. Я жонглирую между следующими командами и не уверен, какая функциональность скрыта внутри:

  • helm-find-filesПроблема в том, что рекурсивно найти каталог действительно плохо.
  • projectile-find-dir: Это замечательно при поиске режиссера! Однако, несмотря на использование helm complete, вы не попадаете в режим helm, поэтому C-u C-sкоманда здесь не работает.
  • helm-find: получает правильную рекурсию, но нацеливает файлы, а не каталоги
  • helm-projectile-find-dirКажется, что я хочу.
djechlin
источник
1
Я люблю ag и ag-mode для этого, серебряный искатель бьет грепа одной рукой, привязанной к его спине :-), хотя я не знаю, как сделать это с помощью снаряда
Tom Regner
Mx projectile-ag возможно? («Префикс снаряда» A или «префикс снаряда» a - в зависимости от версии)
Mekk
2
На оригинальный постер: я не совсем понимаю, какова ваша цель. projectile-ack и projectile-ag - отличные рекурсивные команды в (целом) проекте снаряда. Разве они не то, что вам нужно?
Мекк

Ответы:

10

У вас есть два пути:

  • Использование helm-projectile-grep/ack/ag: Вы можете искать все, начиная с корня проекта. Позже, если вы хотите сохранить результаты поиска, нажмите F3или нажмите, TABчтобы перейти в меню действий и выбрать 3-е действие. Для навигации по hgrepбуферу:

    • C-<down>: перейти к следующему матчу и открыть его.
    • C-<up>: перейти к предыдущему матчу и открыть его.
    • M-<down>: перейти к следующему матчу, не открывая его.
    • M-<up>: перейти к следующему матчу, не открывая его.
    • C-o: открыть текущее совпадение в другом окне.
    • RET: открыть текущее совпадение в текущем окне.
  • Используйте helm-projectile-find-dir(обратите внимание на helmпрефикс; вы должны использовать правильные команды Helm из helm-projectileпакета в общем): сузить до нужного каталога и нажать C-u C-sдля рекурсивного поиска в этом каталоге. Если вы не нажимаете C-u, он просто ищет в этом каталоге, не углубляясь.

Надеюсь, это поможет.

Ту До
источник
1
Вы только что позволили мне разблокировать огромный выигрыш, сообщив мне об этом действии «TAB» в результатах поиска снаряда. Спасибо. Спасибо, сэр.
Эмиш
5

Рекурсивный grep в каталоге должен быть самым простым

Для простого рекурсивного Grep внутри текущего каталога, просто: M-x grepто, внутри минибуфер: Run grep (like this): grep -nHr "pattern". (обратите внимание на флаг -r).

Вы также можете быть заинтересованы в rgrep:

rgrep - это интерактивная автоматически скомпилированная функция Lisp в
grep.el.

(rgrep REGEXP и необязательные ПОДТВЕРЖДЕНИЯ ФАЙЛОВ)

Рекурсивно grep для REGEXP в ФАЙЛАХ в дереве каталогов с корнем в DIR. Поиск ограничен именами файлов, соответствующими шаблону оболочки FILES. ФАЙЛЫ могут использовать сокращения, определенные в grep-files-aliases', e.g. enteringch 'эквивалентно `*. [Ch]'.

Нсуками _
источник
Это не связано со снарядом, каким он должен быть в контексте.
RichieHH
2

В дополнение к инструментам, упомянутым в других ответах, есть еще одна классная функция, find-grep-diredкоторая создает diredбуфер, содержащий все файлы, соответствующие рекурсивному шаблону grep.

Он просто запускается find . \( -type f -exec grep -q -e my-regular-expression \{\} \; \) -lsи отображает результаты в diredбуфере.

rekado
источник
1

Вы могли бы попробовать helm-do-grep. Вызов его с префиксом arg дает вам рекурсивный grep, как описано в Helm Wiki .

Если вы хотите запустить helm-do-grep рекурсивно без запуска helm-find-files, выполните:

Cu helm-command-prefix-key Mg s

ПРИМЕЧАНИЕ. Если вы забыли нажать Cu раньше, чем Mg s, вы можете сделать это после выбора файла.

Вам будет предложено выбрать, в какой категории файлов искать: используйте синтаксис wilcard, например * .el (поиск только в файлах .el).

По умолчанию расширение файла в точке используется, когда курсор находится на имени файла. Если курсор находится в корне каталога, все расширения имени файла, найденные в каталоге и не соответствующие grep-find-ignored-files, вставляются в приглашение.

Попробуйте это так:

C-u helm-command-prefix-key M-g s

Мануэль Уберти
источник
0

helm-projectile-find-dirвероятно, правильная функциональность. Вы можете

  1. Найти каталог как в projectile-find-dir
  2. Но затем вы заканчиваете в режиме Хелм, где вы можете запустить C-u C-sрекурсивный поиск по желанию.
djechlin
источник