Tüm proje dosyalarında dümen değiştirme (yalnızca geçerli arabelleklerde değil)


15

Bu nedenle , sadece mevcut açık arabellek kümesine değil, bir projedeki tüm dosyalara helm-swoopbakmak istiyorum .

Bu yüzden, bir projedeki tüm oluşumları bulmak, alakalı olanları işaretlemek, sonra bunları düzenlemek için dümen sesini kullanabilirim (dümen swoops düzenleme modunda).

Helm / Helm swoop ile bunu yapmanın muhtemelen temiz bir yolu olduğunu hissediyorum ama işte bir çözüm yoluyla düşünme girişimim:

  1. mermiden dosya adları topla
  2. dosya adı listesinden arabellek listesi oluşturma
  3. Bu yeni arabellek listesini kullanmanın yanı sıra dümen-çok-swoop-all ile aynı rutini yap

(projectile-current-project-files), bana aradığım dosya listesini veriyor gibi görünüyor.

Yani helm-multi-swoop-all, kopyalamak ve sonra ince ayar yapmak oldukça kolay olacak gibi görünüyor.

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

Sadece çağrıyı helm-multi-swoop--get-buffer-list, mermi listesini kullanarak arabelleklerin listesini sağlayan birine değiştirin .

Ama şimdi biraz sıkıştım. Nasıl bir dizi dosya adından dümen-swoop beslemek için arabellek listesi oluşturmak için emin değilim.

Ben de yardım edemem, ancak belki de özel işlevler olmadan bunu başarmanın daha basit bir yolu olduğunu düşünüyorum.


1
Bu potansiyel olarak sorunludur. "Abc" için büyük bir projeyi devralmak istediğinizi varsayalım. Önizlediğiniz her dosya için bir dosya arabelleği açmak istiyor musunuz? İstemediğiniz on veya yirmi fazla arabellekle sonuçlanabilir. Bunun helm-projectile-ackyerine kullanmanızı öneririm .
PythonNut

2
Evet, bunu büyük bir proje için kullanmayı hayal etmiyordum. Ayrıca bu rutin ile bittiğinde açılan dosya arabelleklerini kapatmayı umuyordum.
Mike McFarland

Ayrıca, dümen-mermi-ack (veya ag) neredeyse aradığım şey, ancak satırları düzenlemek istiyorum (dümen saldırısına izin verir gibi)
Mike McFarland

Aslında kullanmıyorum helm-swoop. Bir helm-projectile-grepve sonra F3 M-x wgrep-modebunu "düzenlenebilir" yapar mı?
PythonNut

Teşekkürler, wgrep modunun farkında değildim. Dümen-mermi-grep benim için yok sayılan dosyaları alıyor, ama dümen-mermi-ack wgrep ile iyi çalışıyor. En azından melpa'dan gelen wgrep'i kaldırdıktan sonra ve onun yerine burada kullandıktan sonra çalışıyor .
Mike McFarland

Yanıtlar:


7

PythonNut ilginç açıklamalarının ardından ben yüklü helm-agve ran helm-projectile-aggelen mermi yoluyla pakete C-c p s s. Daha sonra ile düzenleme moduna geçtim C-c C-e. Birkaç satır değiştirdim ve sonra basıldım C-c C-cve bunlar ilgili dosyalara kaydedildi.

Bu işe yarıyor, ancak şu anda bir olumsuzluk, bir "değişiklik" olup olmadığına bakılmaksızın "eşleşen" dosyaların her birini birden çok kez kaydetmesidir. Bunu 756 mermisi olarak büyüttüm .

Bunun dışında, soruda belirtilen ihtiyaç için iyi çalışacağını düşünüyorum ve "özel işlevler olmadan" :-)


aslında benim de buna karar verdim. Ben tek sorun bazen git / mermi tarafından göz ardı dosyaları ag arama sonuçlarında göz ardı edilmez olmasıdır. Bunu yapmak için zamanım olmadı.
Mike McFarland

İpucu: helm-git-grepdaha hızlı olmalıhelm-projectile-ag
PlagueHammer

Neden daha hızlı olsun ki?
RichieHH
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.