Helm swoop en todos los archivos de proyecto (no solo en los buffers actuales)

15

Así que estoy buscando helm-swoopechar un vistazo a todos los archivos de un proyecto, no solo al conjunto actual de búferes abiertos.

Esto es para que pueda usar swoop para encontrar todas las ocurrencias en un proyecto, marcar las relevantes y luego editarlas (en modo de edición de swoops de timón).

Siento que probablemente haya una manera limpia de hacer esto con Helm / Helm swoop, pero este es mi intento de pensar en una solución:

  1. reunir nombres de archivo de proyectil
  2. crear una lista de buffers de la lista de nombre de archivo
  3. haga la misma rutina que helm-multi-swoop-all además de usar esta nueva lista de búfer

(projectile-current-project-files), parece que me da la lista de archivos que estoy buscando.

Por lo tanto helm-multi-swoop-all, parece que sería bastante fácil copiar y luego 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)))

Simplemente reemplace la llamada a helm-multi-swoop--get-buffer-list, a una que proporcionó una lista de buffers usando la lista de proyectiles.

Pero ahora estoy un poco atascado. No estoy seguro de cómo crear una lista de buffers para alimentar a helm-swoop a partir de un conjunto de nombres de archivo.

Tampoco puedo evitar pensar que hay una forma más sencilla de lograr esto, tal vez sin funciones personalizadas.

Mike McFarland
fuente
1
Esto es potencialmente problemático. Suponga que quiere lanzar un gran proyecto para "abc". ¿Desea abrir un búfer de archivos para cada archivo que previsualice? Puede terminar con diez o veinte buffers adicionales que no desea. Sugeriría usar en su helm-projectile-acklugar.
PythonNut
2
Sí, no me imaginaba usar esto para un gran proyecto. También esperaba cerrar los búferes de archivos abiertos cuando terminara con esta rutina.
Mike McFarland
Además, helm-projectile-ack (o ag) es casi lo que estoy buscando, excepto que me gustaría poder editar las líneas (como permite helm swoop)
Mike McFarland
En realidad no lo uso helm-swoop. ¿ Hacer un helm-projectile-grepy luego F3 M-x wgrep-modehacerlo "editable"?
PythonNut
Gracias, no estaba al tanto del modo wgrep. Helm-projectile-grep está recogiendo archivos ignorados para mí, pero helm-projectile-ack funciona bien con wgrep. Al menos funciona después de desinstalar el wgrep que vino de melpa, y usar el que está aquí en su lugar.
Mike McFarland

Respuestas:

7

Siguiendo los interesantes comentarios de PythonNut, instalé helm-agy ejecuté helm-projectile-agel paquete de proyectiles a través de C-c p s s. Luego cambié al modo de edición con C-c C-e. Cambié algunas líneas y luego presioné C-c C-cy estas se guardaron en los archivos relevantes.

Esto funciona, pero en la actualidad una infelicidad es que guarda cada uno de los archivos "coincidentes" varias veces, independientemente de si hubo un cambio o no. Lo planteé como proyectil # 756 .

Aparte de eso, creo que funcionaría bien para la necesidad mencionada en la pregunta y "sin funciones personalizadas" :-)

Joe Corneli
fuente
Esto es en realidad lo que he decidido también. El único problema que tengo es que a veces los archivos ignorados por git / projectile no se ignoran en los resultados de búsqueda ag. No he tenido tiempo de investigarlo.
Mike McFarland
Consejo: helm-git-grepdebería ser más rápido quehelm-projectile-ag
PlagueHammer el
¿Por qué debería ser más rápido?
RichieHH