Grep rekursif dalam direktori dengan helm dan / atau proyektil?

11

Grep rekursif dalam direktori harus menjadi hal yang paling sederhana, tetapi saya belum menemukan resep untuk membuatnya bekerja. Saya juggling antara perintah berikut dan saya tidak yakin yang memiliki fungsi yang terkubur di dalamnya:

  • helm-find-files: Masalahnya adalah ini sangat buruk dalam menemukan direktori secara rekursif.
  • projectile-find-dir: Ini bagus untuk menemukan dir! Namun meskipun menggunakan helm lengkap Anda tidak berakhir dalam mode helm, jadi C-u C-sperintahnya tidak bekerja di sini.
  • helm-find: mendapatkan rekursi yang benar tetapi menargetkan file, bukan direktori
  • helm-projectile-find-dir: Tampaknya menjadi apa yang saya inginkan.
Djechlin
sumber
1
Saya suka ag dan ag-mode untuk itu, pencari perak mengalahkan grep dengan satu tangan terikat di punggungnya :-), meskipun, tidak tahu bagaimana membuatnya proyektil sadar
Tom Regner
Mx proyektil-ag mungkin? («Projectile-prefix» A atau «projectile-prefix» a - tergantung pada versinya)
Mekk
2
Untuk poster aslinya: Saya tidak begitu mengerti apa tujuan Anda. proyektil-ack dan proyektil-ag keduanya grep rekursif besar dalam (seluruh) proyek proyektil. Bukankah itu yang Anda butuhkan?
Mekk

Jawaban:

10

Anda memiliki dua cara:

  • Gunakan helm-projectile-grep/ack/ag: Anda dapat mencari semuanya mulai dari root proyek. Kemudian jika Anda ingin menyimpan hasil pencarian, tekan F3atau tekan TABuntuk beralih ke menu tindakan dan pilih tindakan ke-3. Untuk menavigasi hgrepbuffer:

    • C-<down>: pergi ke pertandingan berikutnya dan buka pertandingan.
    • C-<up>: pergi ke pertandingan sebelumnya dan buka pertandingan.
    • M-<down>: pergi ke pertandingan berikutnya tanpa membuka pertandingan.
    • M-<up>: pergi ke pertandingan berikutnya tanpa membuka pertandingan.
    • C-o: buka kecocokan saat ini di jendela lain.
    • RET: buka kecocokan saat ini di jendela saat ini.
  • Gunakan helm-projectile-find-dir(perhatikan helmawalan; Anda harus menggunakan perintah Helm yang tepat dari helm-projectilepaket secara umum): persempit ke direktori yang diinginkan dan tekan C-u C-suntuk mencari secara rekursif di direktori itu. Jika Anda tidak menekan C-u, itu hanya mencari di direktori itu tanpa masuk lebih dalam.

Semoga itu bisa membantu.

Tu Do
sumber
1
Anda baru saja mengaktifkan saya untuk membuka kunci perolehan besar dengan memberi tahu saya tentang tindakan "TAB" ini dalam hasil pencarian proyektil. Terima kasih. Terima kasih Pak.
emish
5

Grep rekursif dalam direktori harus menjadi hal yang paling sederhana

Untuk grep rekursif sederhana dalam direktori saat ini, hanya: M-x grepkemudian, di dalam minibuffer: Run grep (like this): grep -nHr "pattern". (perhatikan flag -r).

Anda mungkin juga tertarik dengan rgrep:

rgrep adalah fungsi Lisp kompilasi autoloaded interaktif di
`grep.el '.

(rgrep REGEXP & CONFIRM FILES DIR opsional)

Grep secara rekursif untuk REGEXP dalam FILES di pohon direktori yang di-root di DIR. Pencarian terbatas pada nama file yang sesuai dengan pola shell FILES. FILES dapat menggunakan singkatan yang didefinisikan dalam grep-files-aliases', e.g. enteringch 'setara dengan `*. [Ch]'.

Nsukami _
sumber
Itu tidak terkait dengan proyektil yang seharusnya berada dalam konteks.
RichieHH
2

Selain alat yang disebutkan dalam jawaban lain, fungsi keren lainnya adalah find-grep-diredmembuat diredbuffer berisi semua file yang cocok dengan pola grep rekursif.

Itu hanya berjalan find . \( -type f -exec grep -q -e my-regular-expression \{\} \; \) -lsdan menampilkan hasilnya dalam diredbuffer.

rekado
sumber
1

Anda bisa mencoba helm-do-grep. Menyebutnya dengan awalan arg memberi Anda grep rekursif, seperti yang dijelaskan dalam Helm Wiki .

Jika Anda ingin meluncurkan helm-do-grep secara rekursif tanpa memulai file helm-find-, lakukan:

Helm-perintah-awalan-kunci Mg s

CATATAN: Jika Anda lupa untuk menekan Cu sebelum Mg, Anda dapat melakukannya setelah pemilihan file.

Anda akan diminta untuk memilih dalam kategori file mana yang akan dicari: Gunakan sintaks wilcard seperti * .el misalnya (cari hanya dalam file .el).

Secara default, ekstensi file pada titik digunakan ketika kursor berada pada nama file. Jika kursor berada di root direktori, semua ekstensi nama file yang ditemukan di direktori dan tidak cocok dengan file grep-find-diabaikan-dimasukkan ke dalam prompt.

Cobalah seperti ini:

C-u helm-command-prefix-key M-g s

Manuel Uberti
sumber
0

helm-projectile-find-dirmungkin fungsionalitas yang tepat. Kamu bisa

  1. Temukan direktori seperti di projectile-find-dir
  2. Tetapi kemudian Anda selesai dalam mode Helm di mana Anda dapat menjalankan C-u C-spencarian rekursif seperti yang diinginkan.
Djechlin
sumber