Quelle est la façon la plus simple de rechercher une expression rationnelle dans le contenu de tous les fichiers du projet en cours, en ignorant les fichiers qui ne sont pas utiles?
Les fichiers inutiles sont des fichiers comme les fichiers compilés, les bibliothèques importées, les fichiers de contrôle de version, etc.
Je suis au courant rgrep
, mais il cherche juste tout. Existe-t-il un package qui recherche «intelligemment» et connaît plusieurs langages de programmation différents, donc je n'aurais pas à le configurer pour chaque projet individuel?
rgrep
est un peu déroutant, car il exclut par défaut tous les fichiers correspondant à vos critères "fichiers inutiles".Réponses:
La recherche par projet dans Emacs peut être effectuée à l'aide d'un projectile .
Il permet la configuration par projet de fichiers ignorés (dans un
<projectroot>\.projectile
fichier) ou spécifie des sous-répertoires pour surveiller et ignorer tous les autres.Il peut fonctionner
grep
,ack
(nécessiteack-and-a-half.el
) etag
(ag.el
) sur les fichiers dans le projet défini (soit sur la base du.projectile
fichier ou en trouvant un fichier pris en charge VC pour définir une racine de projet).Commandes utiles
(En ce qui concerne la recherche dans les fichiers utiles)
Selon le Readme du Projectile
C-c p s g
:: Exécutezgrep
sur les fichiers du projet.C-c p s a
:: Fonctionneack
sur le projet. Nécessite la présence d'un accusé de réception et demi.C-c p s s
:: Fonctionneag
sur le projet. Nécessite la présence d'ag.el.C-c p f
:: Affiche une liste de tous les fichiers du projet.C-c p d
:: Affiche une liste de tous les répertoires du projet.C-c p a
:: Basculez entre les fichiers portant le même nom mais une extension différente dans le projet.C-c p o
:: Fonctionnemulti-occur
sur tous les tampons de projet actuellement ouverts.Ceux-ci n'agiront que sur les fichiers définis comme faisant partie du projet (ou trouvés lorsque le cache est généré / régénéré).
la source
La recherche à l'échelle du projet de seuls fichiers pertinents peut être effectuée en utilisant
ag
aka the_silver_searcher .Pourquoi ag?
.gitignore
,.hgignore
,svn:ignore
. Vous pouvez choisir que vos recherches n'utilisent PAS la liste d'ignorance des listes d'ignorance du contrôle de version en utilisant le-U
commutateur..agignore
fichier..agignore
fichier global peut être placé dans votre$HOME
, puis vous pouvez placer des.agignore
fichiers plus spécifiques au projet dans les racines de votre projet.Configuration
ag
et emacsag
aka the_silver_searcher sur votre système..agignore
fichier. Je préfère avoir juste un.agignore
fichier global dans mon$HOME
.ag
package (disponible sur Melpa).wgrep-ag
package (également disponible sur Melpa). Cela aiderait si et quand vous essayez d'effectuer une recherche / remplacement à l'échelle du projet à l'aide deag
.ag-project
ouag-project-regexp
(fournie avec leag
package) pour effectuer des recherches de fichiers à l'échelle du projet.ag-project-root-function
.ag-project
/ag-project-regexp
en plaçant un.git
dossier vide dans la racine de votre projet. Vous n'avez alors pas besoin de personnaliserag-project-root-function
.la source
Si votre projet utilise Git, vous n'avez besoin que de
counsel
https://github.com/abo-abo/swipercounsel-git
trouver un fichiercounsel-git-grep
grepLa seule dépendance est git
La récupération de texte est plus rapide que le moteur de recherche Silver (AG)
L'avocat fournit également d'autres outils puissants. Par exemple, après l'exécution
counsel-git-grep
, vous pouvez appuyer surC-c C-o
etC-x C-q
surwgrep-mode
pour remplacer facilement le texte dans la portée du projet.Il y a un article https://sam217pa.github.io/2016/09/11/nuclear-power-editing-via-ivy-and-ag/ expliquant les détails. Cet article utilise
counsel-ag
(une autre commande intégrée à Counsel) maiscousnel-git-grep
utilise exactement le même flux de travail.la source
ag
est aussi un programme grep, commegit-grep
. Je ne peux pas dire lequel est le plus rapide. Voir github.com/BurntSushi/ripgrep qui compare les performances des programmes grep populaires (y comprisag
etgit-grep
)La première réponse est belle, mais elle laisse de côté certains détails critiques sur les versions modernes d'Emacs. Je suis moi-même connu d'Emacs, donc d'autres nouveaux arrivants pourraient ne pas en être conscients. Étant donné que votre objectif est de rechercher du texte DANS un fichier dans un PROJET, vous devez d'abord installer Projectile à l'aide du référentiel MELPA.
Cela installe le package dans .emacs.d et ajoute une configuration de base à .emacs dans votre répertoire $ USER (en supposant que vous avez créé le fichier .emacs), par exemple en exigeant Projectile dans votre installation Emacs.
Cependant, vous devez toujours l'activer et associer des préfixes de keymap, afin de pouvoir l'invoquer dans le mini tampon.
La réponse acceptée mentionne la commande suivante:
Cela ne fonctionnera pas, sauf si vous configurez Projectile avec ce préfixe de clavier. Mais je l'ai configuré pour utiliser Cc Cp comme commande pour Project dans .emacs:
Maintenant, étant donné cela, je peux effectuer des recherches de texte dans les fichiers d'un projet en utilisant grep:
Pour le décomposer,
C-c C-p
il invoquera Projectile ets g
effectuera la recherche grep. Vous obtiendrez une belle sortie comme celle-ci, en supposant que votre recherche estvisit_contact
et que vous recherchez la spécification de Ruby dans un projet:la source