เมื่อฉันทำ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-replace
query-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.