2010-02-06 4 views
12

मैं अपने विम रंग योजना फ़ाइल को साफ़ रखने के लिए, चर के साथ #ABCDEF रंग की जगह चाहते हैं कर सकते हैं। उदाहरण के लिए, मैं इस को बदलने के लिए करना चाहते हैं:मैं चर का उपयोग कैसे सूख करने के लिए विम colorthemes

my_string =#61CE3C 
my_type =#84A7C1 

highlight String  guifg=my_string 
highlight Identifier guifg=my_string 
highlight Type  guifg=my_type 

मुझे यकीन है कि है कि क्या vimscript समझता है हेक्स रंग एक स्ट्रिंग नहीं होना था:

highlight String  guifg=#61CE3C 
highlight Identifier guifg=#61CE3C 
highlight Type  guifg=#84A7C1 
इस (छद्म कोड vimscript) की तरह कुछ के साथ

, या हेक्साडेसिमल संख्या। जाहिरा तौर पर यह एक स्ट्रिंग है, कारण यह काम करने के लिए लगता है:

:highlight Normal guifg='#ffffff' 

तो मैंने सोचा कि मैं यह कोशिश करेंगे:

:let my_color='#ffffff' 
:highlight Normal guifg=my_color 

लेकिन इस त्रुटि देता है "E254: रंग my_color आवंटित नहीं किया जा सकता"। क्या कोई भी इस काम को करने का एक तरीका सुझा सकता है?

उत्तर

8

jamessan ने कहा है के रूप में, आप :exe उपयोग करने के लिए ऐसा करने की जरूरत है। मुझे कलर स्कीम फाइलों के लिए सामान्य वाक्यविन्यास मिला, जो प्रबंधन में थोड़ा मुश्किल था, इसलिए मैंने अपना खुद का बना दिया, जिसमें आपको रूचि हो सकती है। मुझे यह बहुत अधिक रखरखाव लगता है, लेकिन आपको अभी भी थोड़ा वर्बोज़ मिल सकता है, जिसमें आप मामले इस जवाब के अंत में विकल्प देखें।

बल्कि लंबे :hi लाइनों लिखने की तुलना में, आप की तर्ज पर एक शब्दकोश बनाने के लिए:

" Unspecified colours default to NONE, EXCEPT cterm(.*) which default to matching gui(.*) 
" ctermfg will default to 'Blue' and ctermbg to 'NONE' if gui(.*) are RGB 
" 
" In most cases, only GUIFG is therefore important unless support for Black and White 
" terminals is essential 

let ColourAssignment['Normal']   = {"GUIFG": 'White', "GUIBG": 'Black'} 
let ColourAssignment['Comment']   = {"GUIFG": '#00ff00'} 

टिप्पणी में उल्लेख किया है, सभी अनिर्दिष्ट भागों समझदार चूक मान है, तो आप ऐसा करने के लिए नहीं है आम:

:hi Comment guifg=green ctermfg=green guibg=black ctermfg=black 

पुनरावृत्ति। यदि आप चाहें तो '#00ff00' बिट के स्थान पर आप भी (निश्चित रूप से) चर डाल सकते हैं।

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

इसका दूसरा लाभ यह है कि यह एक सिंटैक्स हाइलाइटिंग फ़ाइल के साथ आता है जो आपके द्वारा चुने गए रंग में स्वचालित रूप से "रंगरचना" बिट को हाइलाइट करता है।

वैसे भी, यदि यह आपके लिए कोई रूचि है, तो आप इसे here से प्राप्त कर सकते हैं।


एक वैकल्पिक आप इस प्रकार का आदेश बनाने के लिए किया जाएगा इस्तेमाल कर सकते हैं:

command! -nargs=+ Hi call CustomHighlighter(<f-args>) 
function! CustomHighlighter(name, ...) 
    let colour_order = ['guifg', 'guibg'] 
    let command = 'hi ' . a:name 
    if (len(a:000) < 1) || (len(a:000) > (len(colour_order))) 
     echoerr "No colour or too many colours specified" 
    else 
     for i in range(0,len(a:000)-1) 
      let command .= ' ' . colour_order[i] . '=' . a:000[i] 
     endfor 
     exe command 
    endif 
endfunc 

फिर आप इस्तेमाल कर सकते हैं:

Hi Comment #00ff00 
Hi String Yellow 
Hi Normal White Black 
+0

वैकल्पिक दृष्टिकोण जोड़ा गया। – DrAl

+0

धन्यवाद। मुझे यह सुनकर खुशी हो रही है कि मैं अकेला नहीं था जो विम के रंग योजना वाक्यविन्यास से परेशान था! – nelstrom

8

:highlight एक चर के रूप में एक चर को स्वीकार नहीं करता है, तो आपको अभिव्यक्ति के रूप में चलाने के लिए कमांड बनाना होगा और फिर :execute कमांड के साथ इसका मूल्यांकन करना होगा।

:let my_color='#ffffff' 
:exe 'highlight Normal guifg=' . my_color 
+0

धन्यवाद, अपने सुझाव मेरे लिए काम करता है, लेकिन दुर्भाग्य से यह अधिक अव्यवस्था जोड़ता है जहां मैं चीजों को साफ करने की कोशिश कर रहा था! शायद मुझे इस विचार को छोड़ना होगा। [: सहायता: हाइलाइट] (http://vimdoc.sourceforge.net/htmldoc/syntax.html#:highlight) के अंतर्गत परिभाषाओं में से एक कहता है: ': hi [ghlight] [default] {group-name} { कुंजी} = {arg} ..'। मैंने सोचा कि '{key} = {arg}' बिट '{arg}' के स्थान पर एक चर स्वीकार करेगा। क्या कोई दूसरा रास्ता नहीं है? – nelstrom

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