Helm Swoop на все файлы проекта (не только текущие буферы)

15

Поэтому я helm-swoopсмотрю на все файлы в проекте, а не только на текущий набор открытых буферов.

Это позволяет мне использовать swoop, чтобы найти все вхождения в проекте, отметить соответствующие и затем отредактировать их (в режиме редактирования helm swoops).

Я чувствую, что, возможно, есть чистый способ сделать это с помощью Helm / Helm swoop, но вот моя попытка обдумать решение:

  1. собрать имена файлов из снаряда
  2. создать список буферов из списка имен файлов
  3. выполните ту же процедуру, что и helm-multi-swoop-all, кроме использования этого нового списка буферов

(projectile-current-project-files)Похоже, это дает мне список файлов, которые я ищу.

Итак helm-multi-swoop-all, похоже, что это было бы довольно легко скопировать, а затем настроить.

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

Просто замените вызов на helm-multi-swoop--get-buffer-listтот, который предоставил список буферов, использующих список снарядов.

Но сейчас я немного застрял. Я не уверен, как создать список буферов для подачи в helm-swoop из набора имен файлов.

Я также не могу помочь, но думаю, что есть более простой способ достичь этого, может быть, без пользовательских функций.

Майк Макфарланд
источник
1
Это потенциально проблематично. Предположим, вы хотите перенести большой проект на «abc». Хотите открыть файловый буфер для каждого файла, который вы просматриваете? Вы можете получить десять или двадцать дополнительных буферов, которые вам не нужны. Я бы предложил использовать helm-projectile-ackвместо этого.
PythonNut
2
да, я не предполагал использовать это для большого проекта. Я также надеялся закрыть файловые буферы, открытые по завершении этой процедуры.
Майк МакФарланд,
Кроме того, helm-projectile-ack (или ag) - это почти то, что я ищу, за исключением того, что я хотел бы иметь возможность редактировать строки (как позволяет helm swoop)
Майк МакФарланд,
Я на самом деле не использую helm-swoop. Делает ли, helm-projectile-grepа затем F3 M-x wgrep-modeделает его «редактируемым»?
PythonNut
Спасибо, я не знал о wgrep-режиме. Helm-projectile-grep собирает игнорируемые файлы для меня, но helm-projectile-ack хорошо работает с wgrep. По крайней мере, он работает после удаления wgrep, полученного из melpa, и использования этого здесь .
Майк МакФарланд,

Ответы:

7

После интересных комментариев от PythonNut, я установил helm-ag, и побежал helm-projectile-agот снаряда пакета через C-c p s s. Затем я переключился в режим редактирования с помощью C-c C-e. Я изменил несколько строк, а затем нажал, C-c C-cи они были сохранены в соответствующие файлы.

Это работает, но в настоящее время один недостаток заключается в том, что он сохраняет каждый из «совпадающих» файлов несколько раз, независимо от того, было ли изменение или нет. Я поднял это как снаряд № 756 .

Кроме того, я думаю, что это будет хорошо работать для нужд, упомянутых в вопросе, и "без пользовательских функций" :-)

Джо Корнели
источник
на самом деле это то, на чем я остановился. Единственная проблема, с которой я столкнулся, это то, что иногда файлы, игнорируемые git / projectile, не игнорируются в результатах поиска ag. Не было времени копаться в этом.
Майк Макфарланд
Совет: helm-git-grepдолжно быть быстрее, чемhelm-projectile-ag
PlagueHammer
Почему это должно быть быстрее?
RichieHH