¿Cuál es la forma más fácil de buscar una expresión regular en todos los contenidos de todos los archivos del proyecto actual, omitiendo los archivos que no son útiles?
Los archivos inútiles son cosas como archivos compilados, bibliotecas importadas, archivos de control de versiones, etc.
Soy consciente rgrep, pero solo busca todo. ¿Existe un paquete que busque 'inteligentemente' y conozca varios lenguajes de programación diferentes, por lo que no tendría que configurarlo para cada proyecto individual?

rgrepes un poco confuso, dado que excluye todos los archivos que coinciden con sus criterios de "archivos inútiles" de forma predeterminada.Respuestas:
La búsqueda basada en proyectos dentro de Emacs se puede hacer usando proyectiles .
Permite la configuración por proyecto de archivos de ignorar (en un
<projectroot>\.projectilearchivo), o especificar subdirectorios para monitorear e ignorar todos los demás.Puede funcionar
grep,ack(requiereack-and-a-half.el) yag(ag.el) en los archivos dentro del proyecto definido (ya sea basado en el.projectilearchivo o mediante la búsqueda de un archivo VC apoyado para definir una raíz del proyecto).Comandos útiles
(Con respecto a la búsqueda a través de archivos útiles)
Según el Léame del proyectil
C-c p s g:: Ejecutargrepen los archivos del proyecto.C-c p s a:: Se ejecutaacken el proyecto. Requiere la presencia de ack-and-a-half.C-c p s s:: Se ejecutaagen el proyecto. Requiere la presencia de ag.el.C-c p f:: Mostrar una lista de todos los archivos en el proyecto.C-c p d:: Mostrar una lista de todos los directorios en el proyecto.C-c p a:: Cambiar entre archivos con el mismo nombre pero diferente extensión en el proyecto.C-c p o:: Se ejecutamulti-occuren todos los buffers de proyecto actualmente abiertos.Estos solo actuarán en archivos definidos como parte del proyecto (o encontrados cuando el caché se genera / regenera).
fuente
La búsqueda de todo el proyecto de solo archivos relevantes se puede hacer usando
agaka the_silver_searcher .¿Por qué ag?
.gitignore,.hgignore,svn:ignore. Puede elegir que sus búsquedas NO utilicen la lista de ignorados de las listas de ignorados de control de versiones mediante el-Uinterruptor..agignorearchivo..agignorepuede poner un archivo global en su$HOMEy luego puede poner más.agignorearchivos específicos del proyecto en las raíces de su proyecto.Configuración
agy emacsagaka the_silver_searcher en su sistema..agignorearchivo. Prefiero tener solo un.agignorearchivo global en mi$HOME.agpaquete (disponible en Melpa).wgrep-agpaquete (también disponible en Melpa). Eso ayudaría si intenta hacer una búsqueda / reemplazo de todo el proyecto usandoag.ag-projectoag-project-regexp(que viene con elagpaquete) para realizar búsquedas de archivos en todo el proyecto.ag-project-root-function.ag-project/ag-project-regexpcolocando una.gitcarpeta vacía en la raíz del proyecto. Entonces no tienes que personalizarag-project-root-function.fuente
Si su proyecto usa Git, solo necesita
counselhttps://github.com/abo-abo/swipercounsel-gitpara encontrar el archivocounsel-git-grepgrepLa única dependencia es git
El agrupamiento de texto es más rápido que el buscador plateado (ag)
Counsel también proporciona otras herramientas poderosas. Por ejemplo, después de ejecutar
counsel-git-grep, puede presionarC-c C-oyC-x C-qparawgrep-modereemplazar fácilmente el texto en el alcance del proyecto.Hay un artículo https://sam217pa.github.io/2016/09/11/nuclear-power-editing-via-ivy-and-ag/ que explica los detalles. Ese artículo usa
counsel-ag(otro comando integrado en el consejo) perocousnel-git-grepusa exactamente el mismo flujo de trabajo.fuente
agTambién es un programa grep, comogit-grep. No puedo decir cuál es más rápido. Consulte github.com/BurntSushi/ripgrep que compara el rendimiento de los programas grep populares (incluidosagygit-grep)La primera respuesta es hermosa, pero deja de lado algunos detalles críticos sobre las versiones modernas de Emacs. Yo mismo conozco a Emacs, por lo que otros recién llegados podrían no ser conscientes de esto. Dado que su objetivo es buscar texto DENTRO de un archivo en un PROYECTO, primero debe instalar Projectile utilizando el repositorio MELPA.
Esto instala el paquete en .emacs.d y agrega alguna configuración básica a .emacs en su directorio $ USER (suponiendo que haya creado el archivo .emacs), como requerir Projectile en su instalación de Emacs.
Sin embargo, aún necesita habilitarlo y asociar prefijos de mapa de teclas, por lo que puede invocarlo en el mini buffer.
La respuesta aceptada menciona el siguiente comando:
Esto no funcionará, a menos que configure Projectile con este prefijo de mapa de teclas. Pero lo configuré para usar Cc Cp como comando para Project en .emacs:
Ahora dado esto, puedo realizar búsquedas de texto en archivos en un proyecto usando grep:
Para desglosarlo,
C-c C-pinvocará Proyectil ys grealizará la búsqueda grep. Obtendrá un resultado hermoso como este, suponiendo que su búsqueda seavisit_contacty está buscando Ruby rspec en un proyecto:fuente