เมื่อฉันทำM-x query-replaceเพื่อแทนที่ทั้งหมดที่เกิดขึ้นvโดยwมันก็ตรงกับV(ตัวพิมพ์ใหญ่V) จะบังคับให้ emacs ค้นหาตัวพิมพ์เล็กได้vอย่างไร
เมื่อฉันทำM-x query-replaceเพื่อแทนที่ทั้งหมดที่เกิดขึ้นvโดยwมันก็ตรงกับV(ตัวพิมพ์ใหญ่V) จะบังคับให้ emacs ค้นหาตัวพิมพ์เล็กได้vอย่างไร
คำตอบ:
(customize-set-variable case-fold-search nil)
หรือผูกที่ตัวแปร (ตัวเลือก) query-replaceในคำสั่งของคุณเองที่เป็นอย่างอื่นเป็นเพียงแค่กระดาษห่อรอบ สิ่งนี้มีข้อดีที่จะไม่เปลี่ยนค่าตัวแปรสำหรับการใช้งานทั่วไปนอกเหนือจากการแทนที่แบบสอบถาม
ดูเพิ่มเติมที่ตัวแปรcase-replaceซึ่งควบคุมขนาดตัวพิมพ์สำหรับข้อความการแทนที่
ดูเพิ่มเติมC-h f query-replaceที่ข้อความระบุไว้ตัวอย่างเช่น:
การจับคู่นั้น
case-fold-searchไม่ขึ้นอยู่กับตัวพิมพ์ใหญ่ - เล็กถ้าไม่ใช่ศูนย์และ FROM-STRING ไม่มีตัวอักษรตัวใหญ่ การเปลี่ยนถ่ายโอนรูปแบบตัวพิมพ์ของข้อความเก่าไปยังข้อความใหม่หากcase-replaceและcase-fold-searchไม่ใช่แบบไม่มีศูนย์และ FROM-STRING ไม่มีตัวพิมพ์ใหญ่
ดูเพิ่มเติมความคิดเห็นด้านล่างและ Emacs ข้อผิดพลาด # 20687ซึ่งแสดงให้เห็นว่าคุณสามารถแก้ไขเพื่อให้คุณสลับกรณีพับในช่วงperform-replacequery-replace
โปรดสังเกตว่ารหัสที่มีอยู่สำหรับการperform-replaceผูกcase-fold-searchด้วยวิธีนี้ (โปรดสังเกตตัวแปรที่ขึ้นอยู่กับมัน):
(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ทันทีที่เราสามารถทำได้ในระหว่างการisearchใช้การM-cผูก แต่น่าเสียดายที่query-replaceมีแผนที่โหมด
query-replace-map: และ(defun toggle-case () (interactive) (setq case-fold-search (not case-fold-search))) แต่การจัดการของคีย์ในแผนที่ว่าเป็นเรื่องยากในรหัส(define-key query-replace-map "C" 'toggle-case) perform-replaceคุณอาจต้องการM-x report-emacs-bugรับperform-replaceรหัสให้เป็นแบบปลายเปิดมากขึ้นเพื่อให้สามารถเพิ่มรหัสลงในแผนที่ได้ อย่างน้อยควรมีประโยคทางเลือกที่จะเรียก cmd ที่ถูกผูกไว้กับกุญแจ
query-replace-mapมาก่อน
perform-replaceเพื่อเพิ่มอีกข้อที่จะเรียกสำคัญที่คุณได้กำหนดไว้ในcond query-replace-mapใส่ข้อใหม่เพียงก่อนที่จะจับทุกtข้อ (def (call-interactively def))นี่คือประโยคใหม่: ไม่ง่ายกว่านี้อีกแล้ว
(customize-set-variable case-fold-search nil)customize-set-variable: Attempt to set a constant symbol: nilจะช่วยให้เกิดข้อผิดพลาด ฉันลองทั้งสองอย่าง(setq case-fold-search nil)แล้ว(setq case-replace nil)แต่ข้อความค้นหายังคงตรงกับตัวพิมพ์ใหญ่ V.