2009-09-23 8 views
18

में है, मैं टेक्स्टमैट से विम में आ रहा हूं, और मैं अपने विम रंगकेम को कस्टमाइज़ करना चाहता हूं। यह वास्तव में उपयोगी होगा अगर मैं यह जान सकूं कि कौन सा हाइलाइट-समूह किसी विशेष शब्द या प्रतीक से संबंधित है। TextMate में, मैं प्रश्न में शब्द/प्रतीक पर कैरट डालना होगा, लेकिन उसके बाद Ctrl-Shift-पी मारा और एक टूल टिप कह की तरह कुछ दिखेगी:पता लगाएं कि कौन सा हाइलाइट-समूह एक विशेष कीवर्ड/प्रतीक vim

text.html.basic 
meta.tag.structure.any.html 
string.quoted.double.html

इस जानकारी से, यह वास्तव में संपादित करने के लिए सीधा है प्रश्न में पाठ को स्वरूपण (या निकालने) लागू करने के लिए टेक्स्टमैट रंग थीम।

विम में, अगर मैं किसी निश्चित शब्द या प्रतीक के लिए स्वरूपण बदलना चाहता हूं, तो मुझे यकीन नहीं है कि कहां से शुरू करना है। क्या टेक्स्टमैट के ctrl-shift-p के बराबर कुछ है?

उत्तर

22

मुझे यकीन नहीं है कि मैं सही समझ गया हूं, लेकिन क्या आप इसकी तलाश कर रहे हैं?

" adds to statusline 
set laststatus=2 
set statusline+=%{synIDattr(synID(line('.'),col('.'),1),'name')} 

" a little more informative version of the above 
nmap <Leader>sI :call <SID>SynStack()<CR> 

function! <SID>SynStack() 
    if !exists("*synstack") 
     return 
    endif 
    echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') 
endfunc 
+0

पर स्पॉट - धन्यवाद! – nelstrom

+0

मैंने अभी एक बदलाव किया है: स्थिरता के लिए ctrl-shift-p को कमांड को मैप करना। 'nmap : कॉल करें सिनस्टैक() ' – nelstrom

3

अद्यतन: से :help synID() (उदाहरण देखें):

 
synID({line}, {col}, {trans})       *synID()* 
       The result is a Number, which is the syntax ID at the position 
       {line} and {col} in the current window. 
       The syntax ID can be used with |synIDattr()| and 
       |synIDtrans()| to obtain syntax information about text. 
       {col} is 1 for the leftmost column, {line} is 1 for the first 
       line. 
       When {trans} is non-zero, transparent items are reduced to the 
       item that they reveal. This is useful when wanting to know 
       the effective color. When {trans} is zero, the transparent 
       item is returned. This is useful when wanting to know which 
       syntax item is effective (e.g. inside parens). 
       Warning: This function can be very slow. Best speed is 
       obtained by going through the file in forward direction. 

       Example (echoes the name of the syntax item under the cursor): 
         :echo synIDattr(synID(line("."), col("."), 1), "name") 

जहाँ तक मुझे पता है, सबसे अच्छा तुम कर सकते हो :syntax है, आप सभी वाक्य रचना के लिए लोड की एक सूची दे देंगे जो वर्तमान फाइल मुझे कुछ भी पता नहीं है जो वर्तमान बफर की सिंटेक्टिकल पार्सिंग देगा।

ध्यान दें कि :syntax सिर्फ वाक्य रचना आइटम को परिभाषित करता है, यह है कि एक वाक्य रचना आइटम के लिए रंग दे :highlight आदेश का उपयोग करता है है।

एक बार जब आप यह तय कर लें कि आप कौन से परिवर्तन करना चाहते हैं, तो उन्हें ~/.vim/after/syntax/<filetype>.vim में रखें। डिफ़ॉल्ट सिंटैक्स फ़ाइलों को लोड होने के बाद ये आपके परिवर्तन लागू होंगे।

+0

विम के लिए सहायता दस्तावेज़ उत्कृष्ट हैं, लेकिन मुझे आपकी मदद के बिना synid पर जानकारी नहीं मिल सका। धन्यवाद। इसके अलावा, 'बाद' निर्देशिका में डालकर सिंटैक्स फ़ाइलों को ओवरराइड करने की युक्ति बहुत सराहना की जाती है। – nelstrom

+0

@nelstrom - "सहायता vimfiles" के माध्यम से आप देख सकते हैं कि कौन सी निर्देशिकाएं प्राथमिकताएं हैं (\ part के बाद)। – Rook

+0

@नेलस्ट्रॉम - यह देखने का एक त्वरित तरीका है कि एक प्रासंगिक सहायता विषय क्या हो सकता है, 'CT मदद-डी कीस्ट्रोक का उपयोग करना संभव है ताकि टाइपिंग:' syn syn' 'टाइप करते समय संभव समापन देखने के लिए - यह आपको स्ट्रिंग से मेल खाने वाले सभी सहायता विषयों को दिखाएगा " syn ", जो मुझे 'synid()' मिला है। – rampion

12

एक और तरीका है हाइलाइटिंग के बारे में जानकारी के बहुत सारे पाने के लिए:

map <F3> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" . " FG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"fg#")<CR> 

अगर मैं एक सी फाइल में एक टिप्पणी पर ले जाने और F3 दबाते हैं, तो मैं मिलता है:

hi<cCommentStart> trans<cCommentStart> lo<Comment> FG:#00ff00 

जो दिखाता है कि यह हाइलाइट समूह cCommentStart में है, जो Comment से जुड़ा हुआ है और हरे रंग में रंगीन है (#00ff00)। यह here से (संशोधित) है, अधिक जानकारी के लिए उस पृष्ठ को देखें।

+0

यह शानदार है। मुझे यह सरल 'हाय' पहचानकर्ता से अधिक उपयोगी लगता है। – mybuddymichael

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