Saya sering menemukan diri saya mencoba untuk menggantikan misalnya foo
dengan bar
dan bar
dengan foo
di buffer.
Cara saya biasanya melakukannya adalah:
- 3 permintaan-Menggantikan:
aaa -> @@@
,bbb -> aaa
,@@@ -> bbb
- menyerah pada otomatisasi dan lakukan penggantian dengan tangan
Saya kira itu mungkin untuk mendapatkan sesuatu yang bekerja menggunakan ,
sintaks query-replace-regexp
untuk menguji apakah string yang cocok adalah aaa
atau bbb
. Tetapi sintaks yang dihasilkan akan terlalu rumit, jadi saya tidak pernah benar-benar mencobanya.
Masalahnya adalah, mengingat betapa umum tugas itu, saya pikir harus ada yang lebih baik, satu langkah, cara melakukannya, baik built-in atau dalam paket yang ada. Disana?
replace
refactoring
T. Verron
sumber
sumber
query-replace
, saya tahu bahwa biasanya lebih cepatM-% str1 str2
daripada memindahkan titik dan melakukan perubahan dengan tangan. Itu bagus, karena saya tidak perlu membuang waktu untuk memikirkan apa yang akan tercepat, bahkan jika hanya ada satu kejadianstr1
. Idealnya, saya ingin inversi teks sama cepatnya, sehingga saya bisa menggunakannya tanpa memikirkannya juga.(setq a (prog1 b (setq b a)))
. Dan bahkan mungkin ada cara yang lebih sederhana.\,(if \1 "b" "a")
sangat jelek (terhadap regexp\(a\)\|b
), tetapi masih kata-kata harus diketik dua kali, jika itu mengganggu Anda.\(aaa\)\|bbb
?Jawaban:
Ini adalah perintah kecil yang akan melakukan ini:
sumber
query-replace
untuk inversi, sehingga ia mempertahankan semua fitur-fiturnya? Itu tidak cocok dengan 100% definisi di emacs saya, tapi saya masih dengan 24.5 ...query-replace
keluarga fungsi dari versi terbaru, jadi ia mempertahankan semua fitur. Di akhir fungsi saya menambahkan cara yang disarankan untuk menukar string yang disebutkan dalam manual Emacs.backward
danregion-noncontiguous-p
dari panggilan keperform-replace
. Apakah ini masalah umum, atau apakah itu berarti antarmukaperform-replace
telah berubah antar versi?Pasang plur
dan jalankan perintah
plur-query-replace
dan input
{foo,bar}
dan penggantinya{bar,foo}
Hit
y
untuk mengganti kejadian yang diinginkan.Ada juga varian non-interaktif, dan mirip-pencarian, dari perintah ini.
sumber
;)
plur
membutuhkanemacs 24.4
.