Grep recursivo no diretório com leme e / ou projétil?

11

Um grep recursivo em um diretório deve ser a coisa mais simples, mas ainda não encontrei a receita para fazê-lo funcionar. Estou manipulando os seguintes comandos e não tenho certeza de qual funcionalidade está oculta:

  • helm-find-files: O problema é que isso é muito ruim para encontrar um diretório recursivamente.
  • projectile-find-dir: Isso é ótimo para encontrar o dir! No entanto, apesar de usar o helm complete, você não termina no modo helm, portanto, o C-u C-scomando não funciona aqui.
  • helm-find: acerta a recursão, mas direciona arquivos, não diretórios
  • helm-projectile-find-dir: Parece ser o que eu quero.
djechlin
fonte
11
Eu amo o modo ag e ag por isso, o pesquisador prateado vence o grep com uma mão amarrada às costas :-), embora não saiba como torná-lo consciente de projéteis, #
6256 Reg Reg Tom
Mx projectile-ag talvez? ( «Projétil-prefix» A ou «projétil-prefix» a - dependendo da versão)
MEKK
2
Para o pôster original: não entendo bem qual é o seu propósito. projectile-ack e projectile-ag são ótimos greps recursivos dentro do projeto (inteiro) do projétil. Eles não são o que você precisa?
Mekk

Respostas:

10

Você tem duas maneiras:

  • Uso helm-projectile-grep/ack/ag: Você pode procurar por tudo, começando pela raiz do projeto. Posteriormente, se desejar salvar os resultados da pesquisa, pressione F3ou pressione TABpara alternar para o menu de ação e selecione a terceira ação. Para navegar no hgrepbuffer:

    • C-<down>: vá para a próxima partida e abra a partida.
    • C-<up>: vá para a partida anterior e abra a partida.
    • M-<down>: ir para a próxima partida sem abrir a partida.
    • M-<up>: ir para a próxima partida sem abrir a partida.
    • C-o: abre a correspondência atual em outra janela.
    • RET: abre a correspondência atual na janela atual.
  • Use helm-projectile-find-dir(observe o helmprefixo; você deve usar os comandos Helm adequados do helm-projectilepacote em geral): restrinja o diretório desejado e pressione C-u C-spara pesquisar recursivamente nesse diretório. Se você não pressionar C-u, ele apenas pesquisará nesse diretório sem aprofundar.

Espero que ajude.

Tu Do
fonte
11
Você acabou de me permitir obter um grande ganho, informando-me dessa ação "TAB" em um resultado de pesquisa de projétil. Obrigado. Obrigado senhor.
Emish 20/05
5

Um grep recursivo em um diretório deve ser a coisa mais simples

Para um grep recursivo simples dentro do diretório atual, apenas: M-x grepentão, dentro do minibuffer: Run grep (like this): grep -nHr "pattern". (observe o sinalizador -r).

Você também pode estar interessado em rgrep:

O rgrep é uma função Lisp compilada e interativa, carregada
automaticamente, no `grep.el '.

(rgrep REGEXP e DIR DE ARQUIVOS opcionais CONFIRMADOS)

Grep recursivamente para REGEXP em ARQUIVOS na árvore de diretórios enraizada em DIR. A pesquisa é limitada a nomes de arquivos que correspondem ao padrão de shell FILES. FILES podem usar abreviações definidas em grep-files-aliases', e.g. enteringch 'é equivalente a `*. [Ch]'.

Nsukami _
fonte
Isso não está vinculado ao projétil que deveria estar no contexto.
RichieHH 26/12/19
2

Além das ferramentas mencionadas nas outras respostas, outra função interessante é find-grep-diredque cria um diredbuffer que contém todos os arquivos que correspondem a um padrão grep recursivo.

Apenas executa find . \( -type f -exec grep -q -e my-regular-expression \{\} \; \) -lse exibe os resultados em um diredbuffer.

rekado
fonte
1

Você poderia tentar helm-do-grep. Chamar isso com um prefixo arg fornece um grep recursivo, conforme explicado no Helm Wiki .

Se você deseja iniciar o helm-do-grep recursivamente sem iniciar o helm-find-files, faça:

Mg de comando de comando-prefixo-chave Cu s

NOTA: Se você esquecer de pressionar Cu antes de Mg s, poderá fazê-lo após a seleção do arquivo.

Você será solicitado a selecionar em qual categoria de arquivos procurar: Use a sintaxe wilcard como * .el, por exemplo (pesquise apenas arquivos .el).

Por padrão, a extensão do arquivo no ponto é usada quando o cursor está em um nome de arquivo. Se o cursor estiver na raiz de um diretório, todas as extensões de nome de arquivo encontradas no diretório e que não correspondam aos arquivos grep-find-ignorated serão inseridas no prompt.

Tente assim:

C-u helm-command-prefix-key M-g s

Manuel Uberti
fonte
0

helm-projectile-find-diré provavelmente a funcionalidade adequada. Você pode

  1. Encontre um diretório como em projectile-find-dir
  2. Mas então você termina no modo Helm, onde pode executar C-u C-suma pesquisa recursiva conforme desejado.
djechlin
fonte