Saya ingin mendefinisikan satu set file di mana saya dapat mencari dan mengganti teks.
Untuk memperjelas:
Saya ingin dapat mencari, misalnya, dalam semua file xk * .tex dalam direktori yang diberikan (dan tidak termasuk file cadangan). Saya juga ingin dapat mengubah ekspresi, misalnya, "ketidakpastian", ke "ketidakpastian" di semua file dd * .sh dan ee * .cls.
Apa cara standar untuk melakukan ini?
dired
untuk mencari dan mengganti lebih dari sekumpulan file dalam direktori yang diberikan.ag
,wgrep
danmultiple-cursors
.Jawaban:
Jika Anda bekerja pada proyek yang terdefinisi dengan baik, Anda dapat menggunakan
occur
dangrep
fasilitas dalam proyek melaluiprojectile
. Menjiplak dari deskripsi github-nya, di antara berbagai bit fungsionalitas yang ditawarkan olehprojectile
, dapat dilakukan:sumber
Jika semua file berada di direktori yang sama, Anda bisa mengikuti langkah-langkah ini. Saya akan mendasarkan ini pada contoh kedua yang diberikan dalam komentar:
dired
untuk membuka direktori yang relevan dalamdired
mode.dired-mark-files-regexp
di direktori itu.^dd.*\.sh$
, yang setara dengan regexp untukdd*.sh
. File-file itu sekarang akan ditandai dengan a*
, dan mungkin juga muncul disorot dalam warna yang berbeda tergantung pada skema warna Anda.^ee.*\.cls$
) Sampai semua file yang ingin Anda edit ditandai.dired-do-query-replace-regexp
pada file yang Anda tandai.uncertainty
danindeterminacy
sebagai string kueri. (Saya pikir ini akan peka terhadap huruf besar-kecil. Jika Anda ingin huruf besar-kecil, mungkin memerlukan regexp, tapi saya tidak yakin.)Dan itu idenya. Jika Anda perlu mengulangi ini beberapa kali di folder yang berbeda, Anda dapat merekam langkah 2-6 sebagai makro (tekan C-x (setelah langkah # 1, dan C-x )setelah langkah # 6). Dan bahkan jika Anda tidak terlalu nyaman dengan elisp, Anda bisa menerjemahkan makro itu ke menggunakan elisp
insert-kbd-macro
dan mencoba meretasnya menjadi fungsi yang bermanfaat.sumber
S-q
tidak berartishift+q
, artinyasuper+q
. Anda hanya harus menulisQ
jika Anda maksudkanshift+q
. Saya mengedit komentar Anda untuk mencerminkan ini.S-q
artinyashift+q
;super+q
akan dituliss-q
.Anda dapat menggunakan
M-x find-name-dired
untuk mendapatkan buffer dired yang berisi tautan ke semua file yang cocok dengan pola nama yang diberikan.Gunakan
M-x find-grep-dired
untuk mendapatkan buffer dired yang berisi file-file yang isinya cocok dengan pola grep yang disediakan.Ada banyak lagi perintah semacam itu; mana yang paling tepat tergantung pada kebutuhan Anda, jadi harap pertimbangkan memperbarui pertanyaan Anda.
Kemudian Anda dapat melintasi daftar file menggunakan makro. Lihatlah jawaban Brian sebagai contoh: https://emacs.stackexchange.com/a/9497/2005
sumber
Gunakan rgrep dan wgrep.
Dengan rgrep Anda dapat mencari semua file regexp di dalam file yang nama filenya cocok dengan regexp dan di dalam direktori (dan subdirernya)
dengan wgrep Anda dapat mengedit buffer yang berisi hasil pencarian rgrep Anda.
sumber