Qual é a maneira mais fácil de procurar uma regexp em todo o conteúdo, todos os arquivos do projeto atual, ignorando arquivos que não são úteis?
Arquivos inúteis são coisas como arquivos compilados, bibliotecas importadas, arquivos de controle de versão etc.
Estou ciente rgrep
, mas ele apenas pesquisa tudo. Existe um pacote que procure 'inteligentemente' e conheça várias linguagens de programação diferentes, para que eu não precise configurá-lo para cada projeto individual?
rgrep
é um pouco confuso, pois exclui todos os arquivos que correspondem aos critérios de "arquivos inúteis" por padrão.Respostas:
A pesquisa baseada em projetos no Emacs pode ser feita usando projéteis .
Permite a configuração por projeto de arquivos ignorar (em um
<projectroot>\.projectile
arquivo) ou especificar subdiretórios para monitorar e ignorar todos os outros.Pode funcionar
grep
,ack
(requerack-and-a-half.el
) eag
(ag.el
) em arquivos dentro do projeto definido (seja baseado no.projectile
arquivo ou por encontrar um arquivo VC suportado para definir uma raiz do projeto).Comandos úteis
(No que diz respeito à pesquisa em arquivos úteis)
Conforme Leiame do Projétil
C-c p s g
:: Executegrep
nos arquivos do projeto.C-c p s a
:: Executaack
no projeto. Requer a presença de confirmação e meia.C-c p s s
:: Executaag
no projeto. Requer a presença de ag.el.C-c p f
:: Exibe uma lista de todos os arquivos do projeto.C-c p d
:: Exibe uma lista de todos os diretórios do projeto.C-c p a
:: Alterne entre arquivos com o mesmo nome, mas com extensão diferente no projeto.C-c p o
:: Executamulti-occur
em todos os buffers do projeto atualmente abertos.Eles atuarão apenas em arquivos definidos como parte do projeto (ou encontrados quando o cache for gerado / regenerado).
fonte
A pesquisa em todo o projeto de apenas arquivos relevantes pode ser feita usando o
ag
aka the_silver_searcher .Por que ag?
.gitignore
,.hgignore
,svn:ignore
. Você pode optar por suas pesquisas NÃO usar a lista de ignorados nas listas de ignorados do controle de versão usando a-U
opção.agignore
arquivo..agignore
arquivo global pode ser colocado no seu$HOME
e, em seguida, você pode colocar mais.agignore
arquivos específicos do projeto nas raízes do seu projeto.Configurando
ag
e emacsag
aka the_silver_searcher no seu sistema..agignore
arquivo. Eu prefiro ter apenas um.agignore
arquivo global no meu$HOME
.ag
pacote (disponível no Melpa).wgrep-ag
pacote (também disponível no Melpa). Isso ajudaria se e quando você tentar fazer a pesquisa / substituição em todo o projetoag
.ag-project
ouag-project-regexp
(que acompanha oag
pacote) para fazer pesquisas de arquivos em todo o projeto.ag-project-root-function
.ag-project
/ag-project-regexp
colocando uma.git
pasta vazia na raiz do projeto. Você não precisa personalizarag-project-root-function
.fonte
Se o seu projeto usa o Git, você só precisa de
counsel
https://github.com/abo-abo/swipercounsel-git
encontrar arquivocounsel-git-grep
grepA única dependência é git
O grepping de texto é mais rápido que o pesquisador prateado (ag)
O conselho também fornece outras ferramentas poderosas. Por exemplo, após a execução
counsel-git-grep
, você pode pressionarC-c C-o
eC-x C-q
entrarwgrep-mode
para substituir facilmente o texto no escopo do projeto.Existe um artigo https://sam217pa.github.io/2016/09/11/nuclear-power-editing-via-ivy-and-ag/ que explica detalhes. Esse artigo usa
counsel-ag
(outro comando incorporado ao conselho), mascousnel-git-grep
usa exatamente o mesmo fluxo de trabalho.fonte
ag
também é um programa grep, comogit-grep
. Não sei dizer qual é mais rápido. Veja github.com/BurntSushi/ripgrep, que compara o desempenho de programas grep populares (incluindoag
egit-grep
)A primeira resposta é linda, mas deixa de fora alguns detalhes críticos sobre as versões modernas do Emacs. Eu sou o próprio Emacs, então outros recém-chegados podem não estar cientes disso. Dado que seu objetivo é procurar texto DENTRO de um arquivo em um PROJETO, primeiro instale o Projectile usando o repositório MELPA.
Isso instala o pacote em .emacs.d e adiciona algumas configurações básicas ao .emacs no diretório $ USER (supondo que você tenha criado o arquivo .emacs), como exigir o Projectile na instalação do Emacs.
No entanto, você ainda precisa habilitá-lo e associar prefixos de mapa de teclas, para poder invocá-lo no mini buffer.
A resposta aceita menciona o seguinte comando:
Isso não funcionará, a menos que você configure o Projectile com esse prefixo de mapa de teclas. Mas eu o configurei para usar Cc Cp como o comando do Project em .emacs:
Agora, considerando isso, sou capaz de realizar pesquisas de texto em arquivos em um projeto usando grep:
Para dividir,
C-c C-p
invocará o projétil es g
executará a pesquisa grep. Você obterá uma saída bonita como essa, supondo que sua pesquisa sejavisit_contact
e você esteja pesquisando o rspec do Ruby em um projeto:fonte