चलो और सेट के बीच अंतर क्या है?


29

मुझे विम के पीछे के सिद्धांत का ज्यादा पता नहीं है। ऐसा लगता है जैसे हम setकुछ चर, और letअन्य चर। क्या अंतर है, और एक दूसरे पर कब आवश्यक है?

इसके अलावा, सोलराइज्ड विम कलर्सकेम कहता है let g:blabla...कि g:इस उदाहरण में क्या महत्व है ?

जवाबों:


35

letएक वैरिएबल के लिए एक मान प्रदान करता है, और setविम के आंतरिक विकल्पों में से एक को एक मान प्रदान करता है।

उदाहरण के लिए, आप उपयोग करेंगे

:let mystring='Hello!'

एक नया चर घोषित करने के लिए, लेकिन आप उपयोग करेंगे

:set tabstop=4

या

:set expandtab

विम के विकल्पों में से एक सेट करने के लिए।

यह भी देखें: :help let, :help set

g:बस एक वैश्विक चर का प्रतीक है। इन "चर नामस्थान" -से के कई हैं :help internal-variables:

        (nothing) In a function: local to a function; otherwise: global
|buffer-variable|    b:   Local to the current buffer.
|window-variable|    w:   Local to the current window.
|tabpage-variable|   t:   Local to the current tab page.
|global-variable|    g:   Global.
|local-variable|     l:   Local to a function.
|script-variable|    s:   Local to a |:source|'ed Vim script.
|function-argument|  a:   Function argument (only inside a function).
|vim-variable|       v:   Global, predefined by Vim.

8
ध्यान दें कि आप वीम के आंतरिक विकल्पों का उपयोग letकरके सेट कर सकते हैंlet &{option name}=value
एवरग्रीनट्री

11

:setआंतरिक विकल्पों के लिए उपयोग किया जाता है और विकल्प के प्रकारों को संभालता है। यह बूलियन विकल्प के उलट (जैसे :set invpaste) चीजों को एक सूची से जोड़ने और हटाने (जैसे :set dictionary-=/tmp/myfile) की अनुमति देता है।

:letदूसरी ओर, नियमित रूप से चर, विकल्प, रजिस्टर इत्यादि सहित व्यर्थ में परिवर्तनशील चीजों की अधिकता के लिए उपयोग की अनुमति देता है, और निर्धारित मूल्य एक साधारण मूल्य के बजाय, एक अभिव्यक्ति का मूल्यांकन करने का परिणाम है :set, जिसका अर्थ है :letआप गणित, स्ट्रिंग हेरफेर, और कार्यों के लिए पहुँच देता है।

उदाहरण के लिए, आप :let &dictionary=/tmp/myfileविकल्प 'dictionary'को /tmp/myfileइस प्रकार सेट कर सकते हैं (इस प्रकार :setउदाहरण में ऊपर दिखाए गए विकल्प को संशोधित कर सकते हैं )

आप के साथ एक वैश्विक चर सेट कर सकते हैं :let g:myvar=42। आपके द्वारा पूछे गए उपसर्ग गुंजाइश प्रदान करता है। Doorknob का उत्तर स्कूपिंग को बहुत अच्छी तरह से कवर करता है।

आप :let @a="Some text"रजिस्टर ए की सामग्री को बदल सकते हैं Some text, जिसमें आप बाद में "apउदाहरण के लिए पेस्ट कर सकते हैं ।

आप :let $PATH = $PATH . ":/home/me/bin"अपनी स्वयं की बिन निर्देशिका को PATHपर्यावरण चर के साथ जोड़ सकते हैं , जो विम द्वारा निष्पादित किसी भी बाहरी आदेशों को पारित किया जाता है (यह किसी भी पर्यावरण चर के लिए काम करता है)।

हालाँकि letइसमें कुछ बहुत शक्तिशाली क्षमताएं हैं (जैसे :let $MYFILE = @%कि वर्तमान बफर के फ़ाइल नाम के लिए एक पर्यावरण चर सेट करना), यह नहीं जानता कि सेटिंग एक बूलियन है, इसलिए यह अच्छा एक्सेस या त्रुटि जाँच की पेशकश नहीं :setकरता है।

अंत में, यह नौकरी के लिए सबसे अच्छा उपकरण का उपयोग करने के बारे में है। यदि आप केवल एक विकल्प को संशोधित करना चाहते हैं, :setतो आपका उपकरण है। यदि आप किसी अभिव्यक्ति के परिणाम के आधार पर रजिस्टरों, विकल्पों, चर के बीच जानकारी को स्थानांतरित करना चाहते हैं या आधार बनाना चाहते हैं, तो :letयह आपका उपकरण है।

यद्यपि आपने स्पष्ट रूप से विम के बारे में पूछा है, ध्यान देने वाली एक और बात यह है कि :setvi / Vim परिवारों में अधिक आम है, जहां :letकम आम है (उदाहरण के लिए, nvi के पास letकमांड नहीं है , और viemu रजिस्टर के माध्यम से पहुंच प्रदान नहीं करता है let) ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.