Grep récursif dans le répertoire avec barre et / ou projectile?

11

Un grep récursif dans un répertoire devrait être la chose la plus simple, mais je n'ai pas encore trouvé la recette pour le faire fonctionner. Je jongle entre les commandes suivantes et je ne suis pas sûr de la fonctionnalité enfouie:

  • helm-find-files: Le problème est que c'est vraiment mauvais pour trouver un répertoire récursivement.
  • projectile-find-dir: C'est super pour trouver le dir! Cependant, malgré l'utilisation de Helm Complete, vous ne vous retrouvez pas en mode Helm, donc la C-u C-scommande ne fonctionne pas ici.
  • helm-find: obtient la bonne récursivité mais cible les fichiers, pas les répertoires
  • helm-projectile-find-dir: Semble être ce que je veux.
Djechlin
la source
1
J'aime le mode ag et ag pour cela, le chercheur d'argent bat grep avec une main attachée au dos :-), je ne sais pas comment le rendre sensible aux projectiles, cependant
Tom Regner
Mx projectile-ag peut-être? («Projectile-prefix» A ou «projectile-prefix» a - selon la version)
Mekk
2
À l'affiche originale: je ne comprends pas très bien quel est votre but. projectile-ack et projectile-ag sont tous deux d'excellents modes de réponse récursifs dans un projet de projectile (entier). N'est-ce pas ce dont vous avez besoin?
Mekk

Réponses:

10

Vous avez deux façons:

  • Utilisation helm-projectile-grep/ack/ag: Vous pouvez rechercher tout à partir de la racine du projet. Plus tard, si vous souhaitez enregistrer les résultats de la recherche, appuyez sur F3ou sur TABpour passer au menu d'action et sélectionnez la 3e action. Pour naviguer dans le hgreptampon:

    • C-<down>: aller au match suivant et ouvrir le match.
    • C-<up>: aller au match précédent et ouvrir le match.
    • M-<down>: aller au match suivant sans ouvrir le match.
    • M-<up>: aller au match suivant sans ouvrir le match.
    • C-o: ouvre la correspondance actuelle dans une autre fenêtre.
    • RET: ouvre la correspondance actuelle dans la fenêtre actuelle.
  • Utilisez helm-projectile-find-dir(notez le helmpréfixe; vous devez utiliser les commandes Helm appropriées du helm-projectilepackage en général): restreignez-le au répertoire souhaité et appuyez sur C-u C-spour rechercher récursivement dans ce répertoire. Si vous n'appuyez pas sur C-u, il recherche simplement dans ce répertoire sans aller plus loin.

J'espère que ça t'as aidé.

Tu Do
la source
1
Vous venez de me permettre de débloquer un gain énorme en m'informant de cette action "TAB" dans un résultat de recherche de projectile. Je vous remercie. Merci Monsieur.
emish
5

Un grep récursif dans un répertoire devrait être la chose la plus simple

Pour un grep récursif simple à l' intérieur répertoire courant, il suffit: M-x greppuis, à l' intérieur du mini - tampon: Run grep (like this): grep -nHr "pattern". (remarquez le drapeau -r).

Vous pouvez également être intéressé par rgrep:

rgrep est une fonction Lisp interactive compilée et chargée automatiquement dans
`grep.el '.

(rgrep REGEXP & FILES DIR CONFIRM optionnel)

Grep récursivement pour REGEXP dans FILES dans l'arborescence de répertoires enracinée dans DIR. La recherche est limitée aux noms de fichiers correspondant au fichier shell. FILES peut utiliser des abréviations définies dans grep-files-aliases', e.g. enteringch 'est équivalent à `*. [Ch]'.

Nsukami _
la source
Ce n'est pas lié au projectile qu'il devrait être dans le contexte.
RichieHH du
2

En plus des outils mentionnés dans les autres réponses, une autre fonction intéressante est de find-grep-diredcréer un diredtampon contenant tous les fichiers correspondant à un motif de grep récursif.

Il s'exécute simplement find . \( -type f -exec grep -q -e my-regular-expression \{\} \; \) -lset affiche les résultats dans un diredtampon.

rekado
la source
1

Tu pourrais essayer helm-do-grep. L'appeler avec un préfixe arg vous donne un grep récursif, comme expliqué dans le Helm Wiki .

Si vous souhaitez lancer helm-do-grep de manière récursive sans démarrer helm-find-files, procédez comme suit:

Cu helm-command-prefix-key Mg s

REMARQUE: Si vous oubliez d'appuyer sur Cu avant Mg s, vous pouvez le faire après la sélection du fichier.

Vous serez invité à sélectionner la catégorie de fichiers à rechercher: Utilisez la syntaxe wilcard comme * .el par exemple (recherchez uniquement dans les fichiers .el).

Par défaut, l'extension du fichier au point est utilisée lorsque le curseur se trouve sur un nom de fichier. Si le curseur est à la racine d'un répertoire, toutes les extensions de nom de fichier trouvées dans le répertoire et ne correspondant pas aux fichiers grep-find-ignored-sont insérées dans l'invite.

Essayez-le comme ceci:

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

Manuel Uberti
la source
0

helm-projectile-find-direst probablement la bonne fonctionnalité. Vous pouvez

  1. Trouver un répertoire comme dans projectile-find-dir
  2. Mais ensuite, vous terminez en mode Helm où vous pouvez exécuter C-u C-sune recherche récursive comme vous le souhaitez.
Djechlin
la source