web-dev-qa-db-fra.com

Commande Emacs pour la recherche dans les fichiers

Je souhaite rechercher dans tous les fichiers du dossier actuel la macro CODE_INIT_PARAMETERS. Je peux faire M-x se produire CODE_INIT_PARAMETERS mais cela ne montre que les entrées de tampons ouverts.

Existe-t-il un moyen de rechercher tous les fichiers du dossier actuel, depuis Emacs, sans passer à M-x Shell puis grep? Je veux éviter grep, car pour certaines commandes (M-x se produisent) Emacs saute au code offensant, et je le veux aussi. Merci.

63
grayasm

Tu peux essayer M-x rgrep.

Il demandera:

  • le répertoire dans lequel vous souhaitez effectuer une recherche récursive
  • un modèle de fichier pour les fichiers que vous souhaitez inclure dans la recherche
  • le motif que vous souhaitez rechercher

En supplément, il exclura les répertoires privés de contrôle de code source de votre recherche (comme CVS, .svn ou .git).

117
Jazz

Emacs fournit une commande intégrée:

M-x grep RET CODE_INIT_PARAMETERS *.c

(et 'grep-find pour rechercher des sous-répertoires)

Bien que je préfère l'interface fournie par un package externe igrep (qui fournit les commandes igrep et igrep-find).

12
Trey Jackson

si vous ouvrez un dossier en dired et marquez tous les fichiers (avec 'm'), vous pouvez exécuter 'dired-do-search (' A 'dans mes liaisons). Cela va rechercher tous les fichiers marqués. Pour passer au suivant, exécutez tags-loop-continue (M-,)

J'ai mis en place plusieurs fonctions elisp pour marquer différents sous-ensembles de fichiers (fichiers .h, fichiers .cpp, etc.) et créer un répertoire récursif pour rechercher dans tout un arbre ...

6
Brian Postow

Il s'agit d'une amélioration par rapport à la suggestion de Trey Jackson.

M-x grep

Vous verrez la commande grep, par ex. grep -nH -e

Ajoutez R au premier ensemble d'indicateurs (pour récursif) et placez votre terme de recherche après -e

grep -nHR -e CODE_INIT_PARAMETERS

Appuyez sur RET. Les résultats seront compréhensibles par Emacs - vous pourrez cliquer dessus ou y accéder autrement, comme M-x se produit. Vous devrez peut-être mettre le répertoire de recherche à la fin de la commande:

grep -nHR -e CODE_INIT_PARAMETERS /path/to/root/of/search
5
Steven Huwig

M-x find-grep-dired fonctionne également de la même manière que rgrep

4
octi

Dans les cas où

  1. vous cherchez peut-être à plusieurs reprises; et
  2. etags va travailler

vous pourriez envisager d'utiliser etags et d'appeler find-tag (lié à M-. par défaut) ou tags-search (pas de liaison par défaut mais peut être poursuivi avec M-,).

2
dmckee

Il y a aussi mode ack-grep pour les emacs qui utilisent l'outil ack-grep qui est spécifiquement conçu pour les langages de programmation '' grepping '' et IMHO est plus joli que la sortie de Mx grep.

Mais comme mentionné précédemment, les étiquettes devraient être la bonne façon!

1
Chmouel Boudjnah