Apa cara termudah untuk mencari regexp di seluruh konten semua file dalam proyek saat ini, melewatkan file yang tidak berguna?
File yang tidak berguna adalah hal-hal seperti file yang dikompilasi, perpustakaan yang diimpor, file versi kontrol, dll.
Saya sadar rgrep
, tetapi hanya mencari segalanya. Apakah ada paket yang mencari 'secara cerdas' dan tahu tentang beberapa bahasa pemrograman yang berbeda, jadi saya tidak perlu mengkonfigurasinya untuk setiap proyek individu?
rgrep
sedikit membingungkan, mengingat secara default tidak termasuk semua file yang cocok dengan kriteria "file tidak berguna" Anda.Jawaban:
Pencarian berbasis proyek dalam Emacs dapat dilakukan dengan menggunakan proyektil .
Hal ini memungkinkan untuk konfigurasi per proyek file abaikan (dalam
<projectroot>\.projectile
file), atau tentukan subdirektori untuk memantau dan mengabaikan semua yang lainnya.Itu dapat berjalan
grep
,ack
(membutuhkanack-and-a-half.el
) danag
(ag.el
) pada file dalam proyek yang ditentukan (baik berdasarkan pada.projectile
file atau dengan menemukan file VC yang didukung untuk menentukan root proyek).Perintah yang Berguna
(Sehubungan dengan mencari melalui file yang bermanfaat)
Sesuai Proyektil Readme
C-c p s g
:: Jalankangrep
pada file dalam proyek.C-c p s a
:: Berjalanack
pada proyek. Membutuhkan kehadiran ack-dan-setengah.C-c p s s
:: Berjalanag
pada proyek. Membutuhkan kehadiran ag.el.C-c p f
:: Menampilkan daftar semua file dalam proyek.C-c p d
:: Menampilkan daftar semua direktori dalam proyek.C-c p a
:: Beralih di antara file dengan nama yang sama tetapi ekstensi berbeda dalam proyek.C-c p o
:: Berjalanmulti-occur
di semua buffer proyek saat ini terbuka.Ini hanya akan bertindak pada file yang didefinisikan sebagai bagian dari proyek (atau ditemukan ketika cache dihasilkan / dibuat ulang).
sumber
Pencarian seluruh proyek hanya file yang relevan dapat dilakukan menggunakan
ag
alias the_silver_searcher .Mengapa ag?
.gitignore
,.hgignore
,svn:ignore
. Anda dapat memilih pencarian Anda untuk TIDAK menggunakan daftar abaikan dari daftar abaikan kontrol versi dengan menggunakan-U
sakelar..agignore
file..agignore
File global dapat dimasukkan ke dalam Anda$HOME
dan kemudian Anda dapat menempatkan lebih banyak.agignore
file spesifik proyek di root proyek Anda.Menyiapkan
ag
dan emacsag
alias the_silver_searcher di sistem Anda..agignore
file. Saya lebih suka memiliki.agignore
file global di blog saya$HOME
.ag
paket (tersedia di Melpa).wgrep-ag
paket (juga tersedia di Melpa). Itu akan membantu jika dan ketika Anda mencoba melakukan pencarian / penggantian menggunakan seluruh proyekag
.ag-project
atauag-project-regexp
(yang datang denganag
paket) untuk melakukan pencarian file di seluruh proyek.ag-project-root-function
.ag-project
/ag-project-regexp
berbasis dengan meletakkan.git
folder kosong di root proyek Anda. Maka Anda tidak perlu menyesuaikanag-project-root-function
.sumber
Jika proyek Anda menggunakan Git, Anda hanya perlu
counsel
https://github.com/abo-abo/swipercounsel-git
untuk mencari filecounsel-git-grep
untuk grepSatu-satunya ketergantungan adalah git
Grepping teks lebih cepat daripada pencari perak (ag)
Counsel juga menyediakan alat canggih lainnya. Misalnya, setelah berjalan
counsel-git-grep
, Anda dapat menekanC-c C-o
danC-x C-q
masuk kewgrep-mode
untuk dengan mudah mengganti teks dalam lingkup proyek.Ada sebuah artikel https://sam217pa.github.io/2016/09/11/nuclear-power-editing-via-ivy-and-ag/ menjelaskan rincian. Artikel itu menggunakan
counsel-ag
(perintah lain yang dibangun dalam nasihat) tetapicousnel-git-grep
menggunakan alur kerja yang persis sama.sumber
ag
juga merupakan program grep, sepertigit-grep
. Saya tidak bisa mengatakan mana yang lebih cepat. Lihat github.com/BurntSushi/ripgrep yang membandingkan kinerja program grep yang populer (termasukag
dangit-grep
)Jawaban pertama itu indah, tetapi meninggalkan beberapa detail penting tentang versi modern Emacs. Saya tahu Emacs sendiri, jadi pendatang baru mungkin tidak menyadari hal ini. Mengingat tujuan Anda adalah untuk mencari teks DALAM WAKTU file dalam PROYEK, maka Anda akan menginstal proyektil menggunakan repositori MELPA.
Ini menginstal paket di .emacs.d dan menambahkan beberapa konfigurasi dasar ke .emacs di direktori $ USER Anda (dengan asumsi Anda telah membuat file .emacs), seperti memerlukan Proyektil di instal Emacs Anda.
Namun, Anda masih perlu mengaktifkannya dan mengaitkan awalan keymap, sehingga Anda bisa memintanya di buffer mini.
Jawaban yang diterima menyebutkan perintah berikut:
Ini tidak akan berfungsi, kecuali jika Anda mengkonfigurasi Proyektil dengan awalan keymap ini. Tapi saya mengkonfigurasinya untuk menggunakan Cc Cp sebagai perintah untuk Project di .emacs:
Sekarang, saya dapat melakukan pencarian teks dalam file dalam suatu proyek menggunakan grep:
Untuk memecahnya,
C-c C-p
akan memanggil Proyektil, dans g
akan melakukan pencarian grep. Anda akan mendapatkan hasil yang indah seperti ini, dengan anggapan pencarian Anda adalahvisit_contact
dan Anda mencari rspec Ruby dalam sebuah proyek:sumber