Emacs Lisp में setq और setq-default के बीच का अंतर
elisp (1)
मेरे पास Emacs Lisp के बारे में एक सवाल है। Setq और setq-default के बीच क्या अंतर है? मैं इसके बारे में बहुत उलझन में हूँ।
ट्यूटोरियल का कहना है कि सेटक स्थानीय बफर में प्रभावी होता है जबकि सेटक-डिफॉल्ट सभी बफर को प्रभावित करता है।
उदाहरण के लिए, यदि मैंने init.el में लिखा है (setq a-var a-vars-value) , मुझे Emacs शुरू करने और एक नया बफर खोलने के बाद मिला, ए- var भी है और इसका मान एक-वर्र्स-वैल्यू है । मैंने सोचा कि यह वहां नहीं होना चाहिए था। ऐसा लगता है कि setq और setq-default के बीच कोई अंतर नहीं है।
क्या मेरी समझ में कुछ गड़बड़ है?
आपका बहुत बहुत धन्यवाद।
उदाहरण के लिए:
1) मैंने init.el फ़ाइल में (setq हैलो 123) लिखा है, और मैं खोल में emacs abuffer चलाता हूं, तो मैं "हैलो सीएक्स सी" इनपुट, यह "123" दिखाता है। वही होता है जब मैं इसे सभी नए बफर में चलाता हूं।
2) मैंने init.el फ़ाइल में लिखा (setq टैब-चौड़ाई 4) । जब मैं टैब-चौड़ाई सीएक्स सी चलाता हूं, तो यह "8" दिखाता है (वर्तमान मोड 'टेक्स्ट' है)। हालांकि, जब मैं (setq-default tab-width 4) का उपयोग करता हूं, तो यह "4" दिखाता है। मैं इस घटना को समझा नहीं सकता।
Emacs में कुछ चर "बफर-लोकल" हैं, जिसका अर्थ है कि प्रत्येक बफर को उस चर के लिए एक अलग मान रखने की अनुमति है जो वैश्विक डिफ़ॉल्ट को ओवरराइड करता है। tab-width
एक बफर-स्थानीय चर का एक अच्छा उदाहरण है।
यदि एक चर बफर-स्थानीय है, तो setq
वर्तमान बफर में अपना स्थानीय मान सेट करता है और setq-default
वैश्विक डिफ़ॉल्ट मान सेट करता है।
यदि कोई चर बफर-स्थानीय नहीं है, तो setq
और setq-default
एक ही चीज़ करते हैं।
आपके मामले 2 में, (setq tab-width 4)
वर्तमान बफर में tab-width
के बफर-स्थानीय मान को (setq tab-width 4)
सेट करें, tab-width
का वैश्विक डिफ़ॉल्ट मान अभी भी 8 पर छोड़ दें, इसलिए जब आपने tab-width
मूल्यांकन किया एक अलग बफर जिसमें कोई स्थानीय मूल्य नहीं था, आपने 8 को देखा। फिर, जब आप डिफ़ॉल्ट मान को 4 पर सेट करते हैं, तो उस बफर ने इसे उठाया, क्योंकि उसके पास अभी भी कोई स्थानीय मान नहीं था।