Ketika saya lakukan M-x query-replace
untuk mengganti semua kemunculan v
oleh w
, maka itu juga cocok V
(huruf besar V
). Cara memaksa emacs hanya menemukan huruf kecilv
?
Ketika saya lakukan M-x query-replace
untuk mengganti semua kemunculan v
oleh w
, maka itu juga cocok V
(huruf besar V
). Cara memaksa emacs hanya menemukan huruf kecilv
?
Jawaban:
(customize-set-variable case-fold-search nil)
Atau ikat variabel itu (opsi) dalam perintah Anda sendiri yang jika tidak hanya pembungkus saja query-replace
. Ini memiliki keuntungan bahwa itu tidak mengubah nilai variabel untuk penggunaan umum, di luar penggantian-permintaan.
Lihat juga variabel case-replace
, yang mengontrol case untuk teks pengganti.
Lihat juga C-h f query-replace
, di mana dikatakan, misalnya:
Matching tidak tergantung pada case jika
case-fold-search
non-nil dan FROM-STRING tidak memiliki huruf besar. Penggantian memindahkan pola huruf dari teks lama ke teks baru, jikacase-replace
dancase-fold-search
tidak nol dan FROM-STRING tidak memiliki huruf besar
Lihat juga komentar di bawah ini, dan bug Emacs # 20687 , di mana tunjukkan bagaimana Anda dapat menambal perform-replace
untuk memungkinkan Anda beralih lipat case query-replace
.
Perhatikan juga bahwa kode yang ada untuk perform-replace
mengikat case-fold-search
dengan cara ini (perhatikan variabel yang bergantung padanya):
(case-fold-search (if (and case-fold-search search-upper-case)
(isearch-no-upper-case-p from-string regexp-flag)
case-fold-search))
case-fold-search
dengan cepat seperti yang bisa kita lakukan selama isearch
menggunakan M-c
penjilidan. Namun sayangnya query-replace
memang sudah memiliki modenya peta.
query-replace-map
: (defun toggle-case () (interactive) (setq case-fold-search (not case-fold-search)))
dan (define-key query-replace-map "C" 'toggle-case)
. Tetapi penanganan kunci di peta itu sulit dikodekan perform-replace
. Anda mungkin ingin M-x report-emacs-bug
, untuk membuat perform-replace
kode menjadi lebih terbuka, sehingga kunci dapat ditambahkan ke peta. Setidaknya harus memiliki klausa mundur yang hanya memanggil cmd yang terikat pada kunci.
query-replace-map
sebelumnya.
perform-replace
untuk menambahkan cond
klausa tambahan yang memanggil kunci yang telah Anda tetapkan query-replace-map
. Letakkan klausa baru tepat sebelum klausa catch-all t
. Ini adalah klausa baru:(def (call-interactively def))
. Tidak bisa lebih sederhana.
(customize-set-variable case-fold-search nil)
memberikan kesalahan customize-set-variable: Attempt to set a constant symbol: nil
. Saya juga mencoba keduanya (setq case-fold-search nil)
dan (setq case-replace nil)
tetapi kueri masih cocok dengan huruf besar V.