जब मैं द्वारा M-x query-replaceहोने वाली सभी घटनाओं को प्रतिस्थापित करने के लिए करता हूं , तो यह भी मेल खाता है (अपरकेस )। Emacs को केवल लोअरकेस खोजने के लिए कैसे मजबूर किया जाए ?vwVVv
जब मैं द्वारा M-x query-replaceहोने वाली सभी घटनाओं को प्रतिस्थापित करने के लिए करता हूं , तो यह भी मेल खाता है (अपरकेस )। Emacs को केवल लोअरकेस खोजने के लिए कैसे मजबूर किया जाए ?vwVVv
जवाबों:
(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 Bug # 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करने के दौरान फ्लाई पर बदलना अच्छा होता । लेकिन दुर्भाग्य से इसका मोड मैप है। isearchM-cquery-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कोड को अधिक ओपन-एंड होने के लिए प्राप्त किया जा सके, इसलिए कुंजी को मानचित्र में जोड़ा जा सकता है। इसमें कम से कम एक फ़ॉलबैक क्लॉज़ होना चाहिए जो कि कीम से बंधे हुए सीएमडी को आमंत्रित करता है।
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 से मेल खाती है