Bagaimana cara mengganti permintaan-sensitif-kasus?


15

Ketika saya lakukan M-x query-replaceuntuk mengganti semua kemunculan voleh w, maka itu juga cocok V(huruf besar V). Cara memaksa emacs hanya menemukan huruf kecilv ?


"Case-insensitive" adalah perilaku default, di mana case tidak masalah dalam pencarian. Jika Anda hanya ingin mencocokkan satu case, "case-sensitive" yang Anda inginkan. (Saya mungkin kehilangan sesuatu juga, jangan ragu untuk mengembalikan hasil edit jika diperlukan)
— T. Verron

@ T. Verron Saya yakin sekarang, Anda benar.
— Nama

Jawaban:


13
(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-searchnon-nil dan FROM-STRING tidak memiliki huruf besar. Penggantian memindahkan pola huruf dari teks lama ke teks baru, jika case-replacedan case-fold-searchtidak 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-replaceuntuk memungkinkan Anda beralih lipat case query-replace.


Perhatikan juga bahwa kode yang ada untuk perform-replacemengikat case-fold-searchdengan 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))

Akan menyenangkan untuk mengganti case-fold-searchdengan cepat seperti yang bisa kita lakukan selama isearchmenggunakan M-cpenjilidan. Namun sayangnya query-replacememang sudah memiliki modenya peta.
— Kaushal Modi

2
@kaushalmodi: Biasanya, akan sesederhana menambahkan kunci yang mengikat untuk itu ke 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-replacekode menjadi lebih terbuka, sehingga kunci dapat ditambahkan ke peta. Setidaknya harus memiliki klausa mundur yang hanya memanggil cmd yang terikat pada kunci.
— Drew

Terima kasih! Tidak yakin mengapa saya tidak menemukan query-replace-mapsebelumnya.
— Kaushal Modi

1
Saya sudah mengajukan laporan bug itu sekarang (# 20687 ). Solusinya ada di laporan bug itu: Cukup modifikasi perform-replaceuntuk menambahkan condklausa 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.
— Drew

(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.
— Nama
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.