2012-12-23 19 views
7

मुझे यह पता लगाने के लिए एक सरल (या जटिल) तरीका चाहिए कि उपयोगकर्ता किस मोड में है। मुझे यह जानने की ज़रूरत है कि उपयोगकर्ता सामान्य, सम्मिलित, दृश्य, प्रतिस्थापन, बदलें इत्यादि में है।विम: स्टेटसलाइन के लिए उपयोगकर्ता किस मोड में है, इसका पता लगाने के लिए कैसे?

मुझे पता है mode() फ़ंक्शन, हालांकि मैं यह नहीं समझ सकता कि इसे केवल एक वर्ण की बजाय पूर्ण स्ट्रिंग आउटपुट कैसे बनाया जाए।

मेरी योजना एक ऐसा फ़ंक्शन बनाना था जो mode() रिटर्न के आधार पर स्थिति रेखा की पृष्ठभूमि और अग्रभूमि रंगों को गतिशील रूप से बदल देगा। मूल रूप से आईएफएस और अन्य चीजों के समूह के साथ एक समारोह जो मेरे लिए यह करेगा। हालांकि इस दृष्टिकोण के साथ एक दोष है, मैं नहीं जानता कि इसके लिए डिफ़ॉल्ट रूप से थीम सेटअप कौन सा रंग है।

तो बुनियादी तौर पर, मैं कैसे एक समारोह है जो निम्न करता है बनाने के लिए कुछ सुझाव दिए गए/मदद की ज़रूरत है:।

  • जानता है जो मोड उपयोगकर्ता में है कार्यों के बाकी अलग ढंग से हर बार प्रतिक्रिया यह परिवर्तनशील है।
  • fg और bg मानों के साथ कुछ चर सेट करता है जो दर्शाता है कि वर्तमान थीम उनके लिए क्या सेट है।
  • इन मानों के आधार पर स्थिति रेखा के अग्रभूमि और पृष्ठभूमि को बदलता है।

मैंने इसे करने की कोशिश की, लेकिन यह करने का यह एक बहुत ही कठिन तरीका था और यह बिल्कुल काम नहीं करता था। यह केवल रंगों को एक बार सेट करता है और उसके बाद यह हर बार बदलता प्रतिक्रिया नहीं देता है।

आपकी मदद के लिए धन्यवाद! :)

संपादित करें:

सुंदर यकीन है कि मैं क्या करने की कोशिश की पहले कि काम नहीं कर रहा था ऐसा किया:

let &stl.='%{StatuslineModeColor()}' 

संपादित करें:

function! StatuslineModeColor() 
    let s:StatuslineMode=mode() 
    if s:StatuslineMode == 'n' 
     hi Statusline ctermbg=blue guibg=blue 
    elseif s:StatuslineMode == 'i' 
     hi Statusline ctermbg=red guibg=red 
    endif 
endfunc 

और statusline में मैं निम्नलिखित डाल 2:

मुझे पता चला है कि मूल रूप से मुझे जो करना है वह है जो भी रंग पकड़ने का तरीका ढूंढता है विषय पहले इस्तेमाल कर रहा था। अगर मैं इस समाधान का उपयोग करता हूं: http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5

हालांकि यह समाधान मेरे मानकों में आदर्श नहीं है, क्योंकि यह साफ नहीं है, या जितना साफ हो सकता है क्योंकि यह बहुत अधिक अव्यवस्था पैदा करता है। :/

+0

@romainl हो गया, इसे जोड़ने के लिए भूल गए। :) यह सटीक फ़ंक्शन नहीं है जिसका मैंने पहले उपयोग किया था, लेकिन यह बहुत करीब है। – greduan

+0

@romainl मुझे लगता है कि इसका एक अच्छा Reddit संस्करण मिला है: http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5 इसके साथ केवल समस्या यह है कि यह मानों को नहीं लेता है थीम स्वयं, ऐसा करने का एक अच्छा तरीका क्या हो सकता है? – greduan

+0

1. पूर्ण स्ट्रिंग आउटपुट के लिए आपको 'मोड() 'की आवश्यकता क्या है? 2. आपके फ़ंक्शन में स्क्रिप्ट-स्थानीय चर क्या कर रहे हैं? यह स्थानीय होना चाहिए ('एल:' या 's:' के स्थान पर कुछ भी नहीं होना चाहिए। – ZyX

उत्तर

2

अद्यतन अक्टू 2016: तब से मेरी dotfiles https://gitlab.com/greduan/dotfiles लिए चले गए हैं, तो फ़ाइल के लिए नया URL है: https://gitlab.com/greduan/dotfiles/blob/76e16dd8a04501db29989824af512c453550591d/vim/after/plugin/statusline.vim

सभी लाइनें एक ही हैं।


के बाद से कोई भी नहीं एक जवाब मैं अपने खुद के समाधान बनाया के साथ आया था, तो आप इसे यहाँ पा सकते हैं: https://github.com/Greduan/dotfiles/blob/76e16dd8a04501db29989824af512c453550591d/vim/after/plugin/statusline.vim#L3-L42

मूल रूप से यह करता है निम्नलिखित:

Lines 3 to 23 एक शब्दकोश युक्त के साथ एक वैश्विक चर को परिभाषित सभी अलग-अलग तरीके, इसे एक पठनीय पाठ में अनुवादित करते हैं।तो n जो सामान्य के लिए खड़ा है Normal में अनुवाद किया जाता है, iInsert आदि

Lines 25 to 42 समारोह जो statusline के रंग बदल जाएगा परिभाषित करते हैं। वर्तमान में यह केवल सौरकृत का समर्थन करता है और केवल तभी यदि आपके संस्करण में यह fork/pull request है। यदि आप इन आवश्यकताओं को पूरा करते हैं तो आपको एक लाल रंग की पृष्ठभूमि मिल जाएगी जब आप किसी भी प्रकार के दृश्य मोड में सम्मिलित मोड और हरे रंग की पृष्ठभूमि में हों, शेष मोड सामान्य के समान होते हैं।

और lines 118 to 119 परिभाषित फ़ंक्शन को स्टेटसलाइन में डाल दिया गया है और यह लाइन 3 to 23 से परिभाषित वैश्विक चर का उपयोग करके टेक्स्ट प्रारूप में वर्तमान मोड को भी आउटपुट करता है।

मेरा मानना ​​है कि यह सामान्य रूप से उपयोग किए जाने वाले एक से अधिक क्लीनर समाधान है (ऑटो कमांड और सामान जो मैंने देखा है)। असल में इसके साथ एकमात्र दोष यह है कि थीम के चर जानने के लिए कोई रास्ता नहीं है, लेकिन आप निश्चित रूप से hi! link StatusLine Error कर सकते हैं उदाहरण के लिए, जो स्टेटसलाइन को आपकी थीम की त्रुटियों के रूप में हाइलाइट करने वाला एक ही वाक्यविन्यास बना देगा।

आशा है कि इससे मदद मिलती है!

+0

संदर्भित गिट रेपो हटा दिया गया है। – Von

+0

@ वॉन धन्यवाद, मैंने जवाब देने के लिए नोट जोड़ा। :) – greduan