@Malabarba menyebutkan penggunaan wgrep
paket untuk mengedit hasil grep / ack / ag.
Saya ingin menulis walk-through terperinci tentang bagaimana saya menggunakan ag
paket dan wgrep-ag
paket untuk mencapai pengeditan hasil 'menggunakan multiple-cursors
paket menggunakan .
Paket-paket ini tersedia melalui Melpa. Anda juga harus memasang ag
alias the_silver_searcher di sistem Anda.
Walk-through ini berlaku untuk kasus-kasus di mana Anda mencari cara untuk melakukan pengeditan satu baris di semua / lokasi terpilih yang ag
ditemukan.
Instal ag
pada sistem Anda dan paket emacs yang disebutkan di atas.
ag
mendukung pencarian file dengan konten yang cocok dengan regex yang Anda tentukan. Cara paling sederhana untuk mengetahui di ag
mana root proyek adalah meletakkan .git
folder kosong di sana. Kemudian lakukan pencarian menggunakan M-x ag-project-regexp
.
Buffer hasil pencarian ag tidak dapat diedit secara default. Untuk membuatnya dapat diedit, lakukan M-x wgrep-change-to-wgrep-mode
atau gunakan wgrep
pengikatan -default C-c C-p
.
Sekarang jika Anda perlu mengubah 'abcdef' menjadi 'ghijkl' di semua file Anda, Anda akan mencari 'abcdef' dan buffer hasil ag akan menampilkan semua baris yang berisi string itu. Kemudian Anda membuat buffer itu dapat diedit dan mengubah string-string itu secara manual dan perubahan-perubahan itu akan tercermin dalam buffer file aktual untuk melakukan M-x wgrep-finish-edit
atau menggunakan pengikatan default C-c C-e
. Anda juga dapat menggunakan query-replace-regexp
untuk melakukan penggantian pencarian itu.
Saya lebih suka menggunakan multiple-cursors
untuk refactoring cepat sehingga saya bisa melihat umpan balik waktu nyata di mana beberapa pengeditan saya terjadi secara bersamaan. Sorot string yang ingin Anda ganti di buffer hasil dan panggilan ag M-x mc/mark-all-like-this
lalu edit dengan kagum saat Anda melihat hal-hal yang diedit di beberapa titik pada saat yang sama.
Setelah Anda puas dengan pengeditan, seperti yang saya sebutkan di atas, lakukan C-c C-e
untuk "mencerminkan" perubahan dalam buffer yang sebenarnya. Buffer belum disimpan.
Untuk menyimpan semua buffer, saya biasanya melakukannya sekaligus, menggunakan C-x s !
pengikatan default emacs .
Berikut adalah contoh kasus penggunaan dengan tangkapan layar:
Ini menunjukkan proses mengganti semua contoh bind-to-modi-map
ke bind-to-my-map
dalam ~/.emacs.d/
.
Ketika saya mencari bind-to-modi-map
di folder pengaturan emacs saya, saya mendapatkan hasil 'di bawah ini:
Buffer ini hanya baca.
Setelah M-x wgrep-change-to-wgrep-mode
, saya sorot,, -modi-map
pilih semua contoh pilihan itu menggunakan M-x mc/mark-all-like-this
dan setelah mengedit pilihan -my-map
itu, terlihat seperti di bawah ini:
Sorotan biru menunjukkan garis mana yang akan dimodifikasi ketika saya menekan C-c C-e
.
Saat memukul C-c C-e
, Anda dapat melihat perubahan yang tercermin dalam file aktual di tangkapan layar ini:
Saya kemudian akan menyimpan semua file yang dimodifikasi menggunakan C-x s !
.