@Malabarba menyebutkan penggunaan wgreppaket untuk mengedit hasil grep / ack / ag.
Saya ingin menulis walk-through terperinci tentang bagaimana saya menggunakan agpaket dan wgrep-agpaket untuk mencapai pengeditan hasil 'menggunakan multiple-cursorspaket menggunakan .
Paket-paket ini tersedia melalui Melpa. Anda juga harus memasang agalias 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 agditemukan.
Instal agpada sistem Anda dan paket emacs yang disebutkan di atas.
agmendukung pencarian file dengan konten yang cocok dengan regex yang Anda tentukan. Cara paling sederhana untuk mengetahui di agmana root proyek adalah meletakkan .gitfolder 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-modeatau gunakan wgreppengikatan -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-editatau menggunakan pengikatan default C-c C-e. Anda juga dapat menggunakan query-replace-regexpuntuk melakukan penggantian pencarian itu.
Saya lebih suka menggunakan multiple-cursorsuntuk 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-thislalu 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-euntuk "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-mapke bind-to-my-mapdalam ~/.emacs.d/.
Ketika saya mencari bind-to-modi-mapdi 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-mappilih semua contoh pilihan itu menggunakan M-x mc/mark-all-like-thisdan setelah mengedit pilihan -my-mapitu, 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 !.