Helm swoop auf alle Projektdateien (nicht nur aktuelle Puffer)

14

Also ich bin auf der Suche haben helm-swoopBlick auf alle Dateien in einem Projekt, nicht nur den aktuellen Satz von offenen Puffer.

Auf diese Weise kann ich Swoop verwenden, um alle Vorkommen in einem Projekt zu finden, relevante Vorkommen zu markieren und sie dann zu bearbeiten (im Swoop-Bearbeitungsmodus).

Ich habe das Gefühl, dass es wahrscheinlich einen sauberen Weg gibt, dies mit Helm / Helm Swoop zu tun, aber hier ist mein Versuch, eine Lösung zu finden:

  1. Sammeln von Dateinamen aus Projektil
  2. Erstellen Sie eine Liste von Puffern aus der Dateinamenliste
  3. Führen Sie die gleiche Routine wie helm-multi-swoop-all aus, außer dass Sie diese neue Pufferliste verwenden

(projectile-current-project-files), sieht aus wie es mir die Dateiliste gibt, die ich suche.

So helm-multi-swoop-all, sieht aus wie es wäre ziemlich einfach zu kopieren und dann zwicken.

(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)))

Ersetzen Sie einfach den Aufruf von helm-multi-swoop--get-buffer-listzu einem, der eine Liste von Puffern mithilfe der Projektilliste bereitgestellt hat.

Aber jetzt stecke ich ein bisschen fest. Ich bin nicht sicher, wie ich eine Liste von Puffern erstellen soll, die aus einer Reihe von Dateinamen in helm-swoop eingespeist werden.

Ich kann auch nicht anders, als zu glauben, dass es einen einfacheren Weg gibt, dies zu erreichen, möglicherweise ohne benutzerdefinierte Funktionen.

Mike McFarland
quelle
1
Dies ist möglicherweise problematisch. Angenommen, Sie möchten ein großes Projekt für "abc" stoßen. Möchten Sie für jede einzelne Datei, die Sie in der Vorschau anzeigen, einen Dateipuffer öffnen? Möglicherweise stehen Ihnen zehn oder zwanzig zusätzliche Puffer zur Verfügung, die Sie nicht benötigen. Ich würde vorschlagen, helm-projectile-ackstattdessen zu verwenden.
PythonNut
2
Ja, ich hätte nicht gedacht, dies für ein großes Projekt zu verwenden. Ich hatte auch gehofft, die geöffneten Dateipuffer zu schließen, wenn ich mit dieser Routine fertig bin.
Mike McFarland
Außerdem ist helm-projectile-ack (oder ag) fast das, wonach ich suche, mit der Ausnahme, dass ich in der Lage sein möchte, die Linien zu bearbeiten (wie es der Steuerstand erlaubt)
Mike McFarland
Ich benutze es eigentlich nicht helm-swoop. Macht man ein helm-projectile-grepund F3 M-x wgrep-modemacht es dann "editierbar"?
PythonNut
Danke, wgrep-mode war mir nicht bekannt. Helm-projectile-grep nimmt für mich ignorierte Dateien auf, aber helm-projectile-ack funktioniert gut mit wgrep. Zumindest funktioniert es nach der Deinstallation des von melpa stammenden wgrep und der Verwendung des hier verwendeten.
Mike McFarland

Antworten:

7

Nach den interessanten Kommentaren von PythonNut habe ich das Projektilpaket über installiert helm-agund ausgeführt . Ich habe dann mit in den Bearbeitungsmodus gewechselt . Ich habe ein paar Zeilen geändert und dann gedrückt und diese wurden in den entsprechenden Dateien gespeichert.helm-projectile-agC-c p s sC-c C-eC-c C-c

Dies funktioniert, aber derzeit besteht eine Besonderheit darin, dass jede der "übereinstimmenden" Dateien mehrfach gespeichert wird, unabhängig davon, ob eine Änderung vorgenommen wurde oder nicht. Ich habe dies als Projektil # 756 angehoben .

Abgesehen davon denke ich, dass es gut für den in der Frage genannten Bedarf und "ohne benutzerdefinierte Funktionen" funktionieren würde :-)

Joe Corneli
quelle
Darauf habe ich mich eigentlich auch geeinigt. Das einzige Problem, das ich habe, ist, dass manchmal die von git / projectile ignorierten Dateien in den ag-Suchergebnissen nicht ignoriert werden. Ich hatte keine Zeit, mich damit zu beschäftigen.
Mike McFarland
Tipp: helm-git-grephelm-projectile-ag
Sollte