Helm swoop em todos os arquivos do projeto (não apenas nos buffers atuais)

15

Então, eu estou olhando para helm-swoopver todos os arquivos em um projeto, não apenas o conjunto atual de buffers abertos.

Isso é para que eu possa usar o swoop para encontrar todas as ocorrências em um projeto, marcar as relevantes e depois editá-las (no modo de edição de helm swoops).

Eu sinto que provavelmente existe uma maneira limpa de fazer isso com Helm / Helm swoop, mas aqui está minha tentativa de pensar em uma solução:

  1. reunir nomes de arquivos do projétil
  2. crie uma lista de buffers a partir da lista de nomes de arquivo
  3. faça a mesma rotina que helm-multi-swoop-all, além de usar esta nova lista de buffers

(projectile-current-project-files), parece que me fornece a lista de arquivos que estou procurando.

Então helm-multi-swoop-all, parece que seria bastante fácil copiar e ajustar.

(defun helm-multi-swoop-all (&optional $query)
  (interactive)
  "Apply all buffers to helm-multi-swoop"
  (cond ($query
         (setq helm-multi-swoop-query $query))
        (mark-active
         (let (($st (buffer-substring-no-properties
                     (region-beginning) (region-end))))
           (if (string-match "\n" $st)
               (message "Multi line region is not allowed")
             (setq helm-multi-swoop-query
                   (helm-swoop-pre-input-optimize $st)))))
        ((setq helm-multi-swoop-query
               (helm-swoop-pre-input-optimize
                (funcall helm-swoop-pre-input-function))))
        (t (setq helm-multi-swoop-query "")))
  (helm-multi-swoop--exec nil
                          :$query helm-multi-swoop-query
                          :$buflist (helm-multi-swoop--get-buffer-list)))

Basta substituir a chamada para helm-multi-swoop--get-buffer-list, por uma que forneceu uma lista de buffers usando a lista de projéteis.

Mas agora estou um pouco preso. Não sei como criar uma lista de buffers para alimentar helm-swoop a partir de um conjunto de nomes de arquivos.

Também não posso deixar de pensar que há uma maneira mais simples de conseguir isso, talvez sem funções personalizadas.

Mike McFarland
fonte
1
Isso é potencialmente problemático. Suponha que você queira varrer um projeto grande para "abc". Deseja abrir um buffer de arquivo para cada arquivo visualizado? Você pode acabar com dez ou vinte buffers extras que não deseja. Eu sugiro usar em seu helm-projectile-acklugar.
precisa saber é o seguinte
2
Sim, eu não estava imaginando usá-lo para um projeto grande. Eu também esperava fechar os buffers de arquivo abertos ao concluir esta rotina.
7605 Mike McFarland
Além disso, leme-projétil-ack (ou ag) é quase o que eu estou procurando, exceto que eu gostaria de ser capaz de editar as linhas (como swoop leme permite)
Mike McFarland
Na verdade, eu não uso helm-swoop. Fazer um helm-projectile-grepe depois F3 M-x wgrep-modetorná-lo "editável"?
precisa saber é o seguinte
Obrigado, eu não estava ciente do modo wgrep. Helm-projectile-grep está pegando arquivos ignorados para mim, mas helm-projectile-ack está funcionando bem com o wgrep. Pelo menos está funcionando depois de desinstalar o wgrep que veio do melpa e usar o aqui .
Mike McFarland

Respostas:

7

Após os comentários interessantes do PythonNut, eu instalei helm-age executei helm-projectile-ago pacote de projéteis via C-c p s s. Eu então mudei para o modo de edição com C-c C-e. Alterei algumas linhas e pressionei C-c C-ce elas foram salvas nos arquivos relevantes.

Isso funciona, mas no momento uma infelicidade é que ele salva cada um dos arquivos "correspondentes" várias vezes, independentemente de haver ou não uma alteração. Eu levantei isso como projétil # 756 .

Além disso, acho que funcionaria bem para a necessidade mencionada na pergunta e "sem funções personalizadas" :-)

Joe Corneli
fonte
isso é realmente o que eu decidi também. O único problema que tenho é que, às vezes, os arquivos ignorados pelo git / projectile não são ignorados nos resultados da pesquisa ag. Ainda não tive tempo de investigar.
Mike McFarland
Dica: helm-git-grepdeve ser mais rápido do quehelm-projectile-ag
PlagueHammer
Por que deveria ser mais rápido?
HörmannHH