¿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?
rgrep
es 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>\.projectile
archivo), 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.projectile
archivo 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
:: Ejecutargrep
en los archivos del proyecto.C-c p s a
:: Se ejecutaack
en el proyecto. Requiere la presencia de ack-and-a-half.C-c p s s
:: Se ejecutaag
en 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-occur
en 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
ag
aka 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-U
interruptor..agignore
archivo..agignore
puede poner un archivo global en su$HOME
y luego puede poner más.agignore
archivos específicos del proyecto en las raíces de su proyecto.Configuración
ag
y emacsag
aka the_silver_searcher en su sistema..agignore
archivo. Prefiero tener solo un.agignore
archivo global en mi$HOME
.ag
paquete (disponible en Melpa).wgrep-ag
paquete (también disponible en Melpa). Eso ayudaría si intenta hacer una búsqueda / reemplazo de todo el proyecto usandoag
.ag-project
oag-project-regexp
(que viene con elag
paquete) para realizar búsquedas de archivos en todo el proyecto.ag-project-root-function
.ag-project
/ag-project-regexp
colocando una.git
carpeta vacía en la raíz del proyecto. Entonces no tienes que personalizarag-project-root-function
.fuente
Si su proyecto usa Git, solo necesita
counsel
https://github.com/abo-abo/swipercounsel-git
para encontrar el archivocounsel-git-grep
grepLa ú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-o
yC-x C-q
parawgrep-mode
reemplazar 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-grep
usa exactamente el mismo flujo de trabajo.fuente
ag
Tambié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 (incluidosag
ygit-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-p
invocará Proyectil ys g
realizará la búsqueda grep. Obtendrá un resultado hermoso como este, suponiendo que su búsqueda seavisit_contact
y está buscando Ruby rspec en un proyecto:fuente