2013-04-07 7 views
18

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

मेरी प्लगइन प्लगइन के कुछ गुणों को समायोजित करने के लिए उपयोगकर्ता द्वारा असाइन किए जा सकने वाले ~ 16 वैश्विक चर को परिभाषित किया जाएगा। मैंने खुद से पूछा कि क्या उपयोगकर्ता ने पहले से ही एक निश्चित चर के लिए अपना मूल्य सौंपा है, यह जांचने के लिए सबसे शानदार तरीका (व्यक्तिपरक हो सकता है) क्या होगा। मैं विभिन्न अन्य प्लगइन्स और "पैटर्न" निरीक्षण मैं अब तक हमेशा प्रतीत हो रहा है देखें:

if !exists("g:pluginname_setting") 
    let g:pluginname_setting="default" 
endif 

आसान और सीधे आगे हो रहा है यही कारण है कि। लेकिन मैं हमेशा बार-बार कोड का एक ही टुकड़ा दोहराता। चूंकि vi (m) बहुत लंबे समय तक मौजूद है, मुझे पूरा यकीन है कि लोगों ने प्लगइन लिखने के कई तरीकों का प्रयास किया है और कुछ प्रकार का "सर्वोत्तम अभ्यास" विकसित किया गया है, जो मुझे लगता है कि मैंने "पैटर्न" ऊपर दिया है उदहारण के लिए। फिर भी यह एक शब्दकोश को पॉप्युलेट करने के लिए एक फ़ंक्शन को कॉल करने के लिए और अधिक सुरुचिपूर्ण नहीं होगा जिसमें सभी प्लगइन सेटिंग्स शामिल हों और फिर कुंजी को जांचने के लिए शब्दकोश को फिर से चालू करें ताकि यह देखने के लिए कि कोई उपयोगकर्ता पहले से ही अपनी व्यक्तिगत वरीयताओं को परिभाषित कर चुका है या नहीं? क्या यह एक अच्छा विचार होगा या क्या मुझे सिर्फ विचार छोड़ना चाहिए और ìf !exists() दृष्टिकोण पर चिपकना चाहिए?

उत्तर

15

if exists(...) वास्तव में कैननिकल कॉन्फ़िगरेशन मुहावरे और जाने का तरीका है। बेशक, आप डुप्लिकेशंस को कम करने के लिए थोड़ा मेटा प्रोग्रामिंग कर सकते हैं (function! s:SetDefault(varname, default) जैसे कुछ); कुछ प्लगइन्स ऐसा करते हैं।

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

let g:pluginname_setting = get(g:, 'pluginname_setting', "default") 

मैं हैरान हूं यह व्यापक रूप से प्लगइन सेटिंग्स में नहीं किया जाता है:

+0

आपके उत्तर के लिए धन्यवाद। :) प्लगइन कुछ हाइलाइट्स के साथ सौदा होगा। इसलिए उपलब्ध वर्रों में से 2/3 विभिन्न परिस्थितियों में रंग, एफजी या बीजी उपयोग जैसी दृश्य उपस्थिति से संबंधित हैं। – Saucier

+0

हाइलाइट्स के लिए, सामान्य दृष्टिकोण 'है: हाय डीफ़ प्लगइन समूह guifg = ...' एक डिफ़ॉल्ट हाइलाइटिंग; इसके बाद .vimrc में ओवरराइड किया जा सकता है। –

+0

भले ही मैं मौजूदा हाय समूहों के रंगों को ओवरराइड कर दूं? – Saucier

24

एक सुंदर तरीका है।

+0

ऐसा इसलिए है क्योंकि get() फ़ंक्शन के लिए तीसरा तर्क अपेक्षाकृत देर से जोड़ा गया है। लगभग 7.3. कुछ और कई प्लगइन्स बहुत पुराने हैं –

+0

यही मैंने पहले सोचा था, लेकिन मैंने एक विम संस्करण 7.0 के साथ प्रयास किया और यह काम किया। –

+0

एचएम, ऐसा लगता है कि आप सही हैं। मैंने एक अलग पैच के बारे में सोचा होगा। –

संबंधित मुद्दे