क्या करता है: पृष्ठभूमि सेट करें = अंधेरा करें?


35

मैं डाल नहीं था color xxxमेरे में .vimrc। इसलिए मैं इसे देखता हूं जब मैं पहली बार अपना खाता खोलता हूं .vimrc

:colorमुझे defaultयहाँ देता है। किसी भी चीज से पहले

फिर मैं टाइप करता हूं :color darcula। और यह इसमें बदल जाता है।

:colorमुझे darculaयहाँ (स्वाभाविक रूप से) देता है । रंग बदलिए

फिर मैं टाइप करता हूं :set background=dark। और यह इसमें बदल जाता है।

:colorमुझे defaultयहाँ (आश्चर्यजनक रूप से) देता है । बैकग्राउंड बदलें

तो मेरा सवाल यह है कि वास्तव में क्या करता :set background=darkहै?

मैंने कोशिश की :h backgroundऔर कुछ भी उपयोगी नहीं मिला। मैं समझता हूं कि यह आदेश वास्तव में पृष्ठभूमि को नहीं बदलता है, केवल विम ही रंग बदलेगा। लेकिन मैं फिर भी यह सवाल पूछना चाहता हूं। क्योंकि मैं रंग के बाद वास्तव में बहुत खुश हूं :color darculaऔर :set background=darkइसलिए मुझे आश्चर्य है कि मैं अपनी रंग योजना को कैसे लिखूं, ताकि मैं उसमें न set background=darkडालूं .vimrc

मैंने @statox से सलाह ली और set background=darkअपनी आखिरी पंक्ति में रखा darcula.vim। फिर color darculaमुझे तीसरा स्क्रीनशॉट देता है। हालाँकि जब मैंने इसे पहली पंक्ति में रखा तो color darculaमुझे दूसरा स्क्रीनशॉट दिया। साथ ही set bg=darkइसे तीसरे स्क्रीनशॉट में बदल देता है।

मैंने इसे पहली पंक्ति में रखकर ग्रहण किया, मैं विम को बता रहा हूं कि यह कलर्सकेम एक काले रंग की पृष्ठभूमि के लिए बनाया गया है। इसे अंतिम पंक्ति में रखकर, इसके विपरीत, मैं विम को यह मानने देता हूं कि यह कलरकेम एक हल्की पृष्ठभूमि के लिए बनाया गया है और फिर इसे अपने आप से कुछ बदलाव करें (जब यह अंतिम पंक्ति को संसाधित करता है)।

यदि मैं जो मान चुका हूँ वह सत्य है, मेरा प्रश्न अभी भी अनुत्तरित है। वास्तव में क्या बदलाव आया, जब मैं set bg=darkAFTER का उपयोग करता हूं तो यह एक हल्के रंग कीमेक लोड करता है?

मेरा संपूर्ण vim विन्यास https://github.com/MichaelMa2014/.vim पर उपलब्ध है



@ नमस्कार प्रणाम! मेरा पूछने से पहले मैंने यह सवाल पढ़ा था। ऐसा नहीं है कि पोस्ट है कि में बताया गया है :set bg=lightऔर :set bg=darkविपरीत नहीं हैं, लेकिन वास्तव में क्या वे कर रहे हैं नहीं समझाया गया है। इसके अलावा उस पोस्ट यही कारण है कि मैं से बचना चाहते हैं :set background=darkमेरे में .vimrc
माइकल मा

जवाबों:


32

क्या होता है जब आप :set background

बुनियादी तंत्र जिसके द्वारा :set backgroundकाम करता है वास्तव में बहुत सरल है, और यह प्रलेखित है (हालांकि विशेष रूप से स्पष्ट रूप से नहीं) :help 'background'

जब 'बैकग्राउंड' सेट होता है, तो विम नए मूल्य के लिए डिफ़ॉल्ट रंग समूहों को समायोजित करेगा। लेकिन सिंटैक्स हाइलाइटिंग के लिए उपयोग किए जाने वाले रंग नहीं बदलेंगे। g: colours_name
जब एक रंग योजना लोड की जाती है ("g: color_name" चर सेट किया जाता है) 'पृष्ठभूमि' सेट करने से रंग योजना पुनः लोड हो जाएगी। यदि रंग योजना 'पृष्ठभूमि' के मान को समायोजित करती है तो यह काम करेगा। हालाँकि, यदि रंग योजना 'पृष्ठभूमि' को स्वयं निर्धारित करती है तो प्रभाव पूर्ववत हो सकता है।

जब 'background'विकल्प बदला जाता है तो वास्तव में क्या होता है:

यदि कोई रंग योजना वर्तमान में लोड नहीं है

विम डिफ़ॉल्ट रंगों को पुनः लोड करता है, नए सेटिंग के लिए उपयुक्त समझा जाने वाले अग्रभूमि रंगों का उपयोग करता है 'background'

यदि एक रंग योजना वर्तमान में भरी हुई है

विम रंग योजना को पुनः लोड करता है। जब रंग योजना लोड की जाती है, तो या तो रंग योजना नए सेटिंग के लिए उपयुक्त रंग निर्धारित करती है 'background', या रंग योजना पुराने मूल्य पर रीसेट 'background' हो जाती है।

जैसा कि आप पहले ही वर्णन कर चुके हैं, 'background'विकल्प का उद्देश्य पृष्ठभूमि को सेट करना नहीं है , बल्कि विम को सूचित करना है कि क्या पृष्ठभूमि अंधेरा है या प्रकाश है।

इसलिए यदि रंग योजना रीसेट करती है 'background', तो विम का अर्थ यह है कि रंग योजना बस नई सेटिंग का समर्थन नहीं करती है 'background'। चूंकि उपयोगकर्ता ने संकेत दिया है कि वे ऐसी पृष्ठभूमि का उपयोग कर रहे हैं इसका मतलब है कि वर्तमान रंग योजना अब उपयुक्त नहीं है, और इसलिए विम अनसेट्स g:colors_nameऔर फिर डिफ़ॉल्ट रंगों को फिर से लोड करता है।

यदि आप उस वास्तविक कोड का पता लगाना चाहते हैं जो 'background'सेट होने पर चलाया जाता है, तो आप यहां शुरू कर सकते हैं

आपके इंस्टालेशन में क्या हो रहा है

आपके द्वारा बताए गए अजीब व्यवहार को आपके द्वारा उद्धृत दस्तावेज़ में इस पंक्ति द्वारा समझाया जा सकता है:

जब कोई रंग योजना लोड की जाती है ("g: color_name" चर सेट किया जाता है)

समस्या यह है कि आपकी colors/darcula.vimफ़ाइल इस मान को सेट नहीं करती है, और इसलिए जब आप रंग लेते हैं तो रंग बदल जाता है :color darcula, विम वर्तमान में लोड होने वाली रंग योजना पर विचार नहीं करता है।

इसलिए, जब आप :set background=darkविम को कॉल करते हैं, तो ऊपर दिए गए "यदि कोई रंग योजना वर्तमान में लोड नहीं हुई है" खंड में चरण किया जाता है, और एक अंधेरे पृष्ठभूमि के लिए डिफ़ॉल्ट रंग सेट करता है। यह बताता है कि :colorफिर रिपोर्ट क्यों default

(हालांकि, ध्यान दें कि डिफ़ॉल्ट रंग सेट करके करता है नहीं , जैसा कि आप उम्मीद कर सकते हैं, सभी रंग है कि पहले सेट किया गया था निकाल सकते हैं और यही कारण है कि आप आप देख परिणामों के साथ खत्म, बल्कि रंग प्रदर्शित किए जाते हैं की तुलना में जब आप पहली बार में विम को शुरू करें। इस मुद्दे की कुछ चर्चा यहाँ है )

संक्षेप में, आपकी रंग योजना गलत है: :edit $VIMRUNTIME/colors/README.txtइस पर और अधिक विवरण के लिए देखें (और विशेष रूप से नीचे का खंड) 'background'और रंग योजनाओं के बीच की बातचीत पर ।


आपको बहुत - बहुत धन्यवाद! मुझे पूरी तरह से समझ में आया जब आप कहते हैं कि "ऐसा नहीं होता है, जैसा कि आप उम्मीद कर सकते हैं, पहले से सेट किए गए सभी रंगों को हटा दें"। चर्चाओं को पढ़ने जरूर जाऊंगा!
माइकल मा

4

डॉक्टर को :h 'background' आपकी आवश्यक सभी जानकारी प्रदान करनी चाहिए:

"अंधेरे" पर सेट होने पर, विम उन रंगों का उपयोग करने की कोशिश करेगा जो एक अंधेरे पृष्ठभूमि पर अच्छे लगते हैं। जब "लाइट" पर सेट किया जाता है, तो विम उन रंगों का उपयोग करने की कोशिश करेगा जो एक हल्की पृष्ठभूमि पर अच्छे लगते हैं। कोई अन्य मूल्य अवैध है।

आपके कलरकेम ने रंगों के 2 समूहों को परिभाषित किया है: एक हल्के बैकग्राउंड पर और एक डार्क बैकग्राउंड पर उपयोग किए जाने वाले। backgroundविकल्प vim जो अपने रंग-द्वारा परिभाषित रंगों के समूह इस्तेमाल किया जाना चाहिए बता देंगे।

इस विकल्प को सेट करने से पृष्ठभूमि का रंग नहीं बदलता है, यह विम को बताता है कि पृष्ठभूमि का रंग कैसा दिखता है। पृष्ठभूमि का रंग बदलने के लिए, देखें :h :hi-normal

जब 'बैकग्राउंड' सेट होता है, तो विम नए मूल्य के लिए डिफ़ॉल्ट रंग समूहों को समायोजित करेगा। लेकिन सिंटैक्स हाइलाइटिंग के लिए उपयोग किए जाने वाले रंग नहीं बदलेंगे।

यह पिछले पैराग्राफ का अनुसरण है: यह कलर्सकेम है जो रंगों के समूहों को परिभाषित करता है और backgroundइनमें से एक समूह का चयन करता है।

अंत में यदि आप अपनी खुद की कलर स्कीम लिखना चाहते हैं, तो set background=darkअपने vimrc में रखें, याद रखें कि एक colorcheme vimscript में एक प्रोग्राम से ज्यादा कुछ नहीं है, इसलिए कुछ भी आपको अपने colorchem के कोड में कमांड का उपयोग करने से रोकता नहीं है जैसे कि jellybeans या प्रशिक्षु


1
धन्यवाद! मैं डाल set background=darkमें darcula.vimऔर के रूप में जब मैं इसे में डाल एक ही प्रभाव का उत्पादन किया .vimrc। लेकिन मैं अभी भी उत्सुक हूं, कि विम वास्तव में "अंधेरे पृष्ठभूमि पर अच्छे दिखने वाले रंगों का उपयोग करने की कोशिश कैसे करता है"? क्या कोई मानचित्रण या ऐसा कुछ है जो कहीं न कहीं परिभाषित है?
माइकल मा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.