Рекурсивний греп в каталозі з кермом та / або снарядом?


11

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

  • helm-find-files: Проблема в тому, що це дуже погано в пошуку каталогів рекурсивно.
  • projectile-find-dir: Це чудово в пошуку реж! Однак, незважаючи на використання повного шлема, ви не закінчите в режимі керма, тому C-u C-sкоманда тут не працює.
  • helm-find: отримує право рекурсії, але націлює файли, а не каталоги
  • helm-projectile-find-dir: Здається, що я хочу.

1
Я люблю ag і ag-mode за це, срібний шукач б'є греп однією рукою, прив'язаною до спини :-), не знаю, як зробити це снарядом, хоча
Том Регнер

Mx снаряд-аг, можливо? («Projectile-prefix» A або «projectile-prefix» a - залежно від версії)
Mekk

2
До оригінального плаката: Я не зовсім розумію, у чому ваше призначення. снаряд-ack і снаряд-аг є великими рекурсивними грепами в рамках (цілого) проекту снаряду. Хіба вони не потрібні?
Мекк

Відповіді:


10

У вас є два способи:

  • Використання helm-projectile-grep/ack/ag: Ви можете шукати все, починаючи з кореня проекту. Пізніше, якщо ви хочете зберегти результати пошуку, натисніть F3або натисніть, TABщоб перейти до меню дій та виберіть третю дію. Для навігації в 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" в результаті пошуку снаряда. Дякую. Дякую вам сер.
emish

5

Рекурсивна грепація в каталозі повинна бути найпростішою справою

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

Вас також можуть зацікавити rgrep:

rgrep - це інтерактивна автоматично завантажена складена функція Lisp у
`grep.el '.

(rgrep REGEXP та необов'язкові файли DIR CONFIRM)

Рекурсивно натискаємо на REGEXP у FILES у дереві каталогів, корінням у 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буфері.


1

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

Якщо ви хочете запускати helm-do-grep рекурсивно, не запускаючи файли helm-find-файлів, зробіть:

Cu helm-command-prefix-key Mg s

ПРИМІТКА: Якщо ви забудете натиснути Cu перед Mg s, ви можете зробити це після вибору файлу.

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

За замовчуванням розширення файлу в точці використовується, коли курсор на імені файлу. Якщо курсор знаходиться в корені каталогу, всі розширення імені файлів, знайдені в каталозі та не збігаються з grep-find-ignored-файлами, вставляються у підказку.

Спробуйте так:

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


0

helm-projectile-find-dirце, мабуть, належна функціональність. Ти можеш

  1. Знайдіть каталог, як у в projectile-find-dir
  2. Але потім ви закінчите в режимі Helm, де C-u C-sза бажанням можете запустити рекурсивний пошук.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.