Hełm spadnie na wszystkie pliki projektu (nie tylko bieżące bufory)

15

Więc chcę helm-swoopspojrzeć na wszystkie pliki w projekcie, a nie tylko na bieżący zestaw otwartych buforów.

Dzięki temu mogę użyć polecenia swoop, aby znaleźć wszystkie wystąpienia w projekcie, zaznaczyć odpowiednie, a następnie edytować je (w trybie edycji sesji kontrolnych).

Wydaje mi się, że prawdopodobnie jest to czysty sposób na wykonanie Helm / Helm swoop, ale oto moja próba przemyślenia rozwiązania:

  1. zbieraj nazwy plików z pocisków
  2. utwórz listę buforów z listy nazw plików
  3. wykonaj tę samą procedurę, co helm-multi-swoop-all oprócz tej nowej listy buforów

(projectile-current-project-files), wygląda na to, że daje mi listę plików, której szukam.

Tak helm-multi-swoop-all, wygląda na to, że będzie dość łatwo skopiować, a następnie dostosować.

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

Wystarczy zastąpić wywołanie do helm-multi-swoop--get-buffer-list, który dostarczył listę buforów za pomocą listy pocisków.

Ale teraz trochę utknąłem. Nie jestem pewien, jak utworzyć listę buforów, które będą zasilane sterami z zestawu nazw plików.

Nie mogę również pomóc, ale myślę, że istnieje prostszy sposób na osiągnięcie tego, może bez niestandardowych funkcji.

Mike McFarland
źródło
1
Jest to potencjalnie problematyczne. Załóżmy, że chcesz wykonać duży projekt dla „abc”. Czy chcesz otworzyć bufor plików dla każdego podglądanego pliku? Może się okazać, że masz dziesięć lub dwadzieścia dodatkowych buforów, których nie chcesz. Sugeruję użycie helm-projectile-ackzamiast tego.
PythonNut,
2
tak, nie wyobrażałem sobie wykorzystania tego do dużego projektu. Miałem również nadzieję, że zamknę bufory plików otwarte po zakończeniu tej procedury.
Mike McFarland,
Poza tym helm-pocisk-ack (lub ag) jest prawie tym, czego szukam, z wyjątkiem tego, że chciałbym móc edytować linie (tak, jak pozwala spadanie hełmu)
Mike McFarland
Tak naprawdę nie używam helm-swoop. Czy zrobienie helm-projectile-grepa następnie F3 M-x wgrep-modeuczynienie go „edytowalnym”?
PythonNut
Dzięki, nie wiedziałem o trybie wgrep. Helm-pocisk-grep zbiera dla mnie pliki ignorowane, ale helm-pocisk-ack działa dobrze z wgrep. Przynajmniej działa po odinstalowaniu wgrep, który przyszedł z Melpy i zamiast tego używa tego tutaj .
Mike McFarland

Odpowiedzi:

7

W następstwie ciekawe komentarze PythonNut, zainstalowałem helm-agi pobiegł helm-projectile-agz pocisku pakietu poprzez C-c p s s. Następnie przełączyłem się do trybu edycji za pomocą C-c C-e. Zmieniłem kilka wierszy, a następnie nacisnąłem C-c C-ci zostały one zapisane w odpowiednich plikach.

Działa to, ale obecnie jedna infeliczność polega na tym, że zapisuje każdy z „dopasowanych” plików wiele razy, niezależnie od tego, czy nastąpiła zmiana, czy nie. Podniosłem to jako pocisk # 756 .

Poza tym myślę, że dobrze by to pasowało do potrzeby wspomnianej w pytaniu i „bez niestandardowych funkcji” :-)

Joe Corneli
źródło
na tym właśnie się zdecydowałem. Jedyny problem, jaki mam, to to, że czasami pliki ignorowane przez git / projectile nie są ignorowane w wynikach wyszukiwania ag. Nie miałem czasu się w to zagłębić.
Mike McFarland
Wskazówka: helm-git-greppowinno być szybsze niżhelm-projectile-ag
PlagueHammer
Dlaczego powinien być szybszy?
RichieHH