हालाँकि इन पंक्तियों को .vimrc में जोड़ने के बाद, यह काम नहीं किया।
इसका कारण यह है कि विम 'syntax'विकल्प को सेट करते समय मौजूदा सिंटैक्स आइटम को साफ़ करता है। ऐसा इसलिए किया जाता है क्योंकि पुराने सिंटैक्स आइटम को रखने से कुछ अजीब स्थिति पैदा होती है; यदि आपके पास एक बफर है जो आपके पास है syntax=fooऔर उपयोग करता है, set syntax=barतो आप एक बफर के साथ समाप्त हो जाएंगे जिसमें वाक्यविन्यास दोनों के लिए हाइलाइटिंग है fooऔर bar।
जब विम शुरू होता है vimrc( आपके स्टार्टअप पर) एक बार लोड होता है , लेकिन यह हर बार filetypeया syntaxविकल्पों को सेट करने के लिए फ़िलाटाइप और सिंटैक्स फ़ाइलों को लोड करता है , जो आपके द्वारा सेट किए गए मानों को रीसेट कर देगा।
यहां तक कि अगर यह इसे रीसेट नहीं करेगा, तो यह आपके vimrc में जोड़ने के लिए एक अच्छा विचार नहीं होगा, क्योंकि यह सभी बफ़र्स पर लागू होगा , और न केवल बफ़र्स के साथ syntax=c।
नीचे दिया गया पाठ विम को एक यूनिक्स-वाई सिस्टम पर मानता है, लेकिन यह Neovim और Windows उपयोगकर्ताओं के लिए भी काम करेगा:
- Neovim उपयोगकर्ताओं के
~/.vim/साथ प्रतिस्थापित करना चाहिए ~/.config/nvim/।
- विंडोज उपयोगकर्ताओं के
~/.vim/साथ प्रतिस्थापित करना चाहिए %USERPROFILE%\vimfiles\।
संपूर्ण फ़ाइल को ओवरराइड करना
किसी चीज को बदलने का सबसे आसान तरीका सिर्फ उसे ओवरराइड करना है । ऐसा करने के लिए एक फ़ाइल बनाएँ ~/.vim/<file>.vim।
<file.vim>$VIMRUNTIME(उपनिर्देशिका सहित) के सापेक्ष पथ है । आपके उदाहरण में, यह होना चाहिए syntax/c.vim। इसे फ़ाइल के बजाय लोड किया जाएगा $VIMRUNTIME।
इसका मुख्य कारण यह है कि परिवर्तन करना आसान है - सिंटैक्स फ़ाइलों से बाहर निकलने का संशोधन कभी-कभी थोड़ा मुश्किल हो सकता है। नकारात्मक पक्ष यह है कि आपको सिस्टम-वाइड फ़ाइल में किए गए भविष्य के अपडेट नहीं मिलेंगे।
मैं अक्सर इसे वाक्यविन्यास फ़ाइलों के साथ प्रयोग करने के लिए एक प्रारंभिक बिंदु के रूप में उपयोग करता हूं , और फिर बाद में नीचे दिए गए तरीकों में से एक का उपयोग करके स्थानीय परिवर्तन के लिए अपने स्थानीय परिवर्तन निकालता हूं।
स्थानीय जोड़
वाक्यविन्यास फ़ाइलों में स्थानीय जोड़ जोड़ने के दो तरीके हैं, वे कार्यात्मक रूप से समान हैं, और आप अपनी पसंद की विधि का उपयोग कर सकते हैं।
Syntax autocmd
Syntaxऑटोकैड का उपयोग करें :
augroup ft_c
autocmd!
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
autocmd Syntax c hi cFunction gui=NONE guifg=#B5A1FF
augroup end
ध्यान दें कि कई कमांड के साथ |यहाँ समस्याग्रस्त है, क्योंकि वे :synकमांड के हिस्से के रूप में व्याख्या करने के लिए जाते हैं , यही वजह है कि मैंने autocmd Syntax cकई बार दोहराया है । एक फ़ंक्शन का उपयोग करने के लिए एक विकल्प होगा:
fun s:c()
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF
endfun
augroup ft_c
autocmd!
autocmd Syntax c call s:c()
augroup end
लाभ यह है कि सभी परिवर्तन एक फ़ाइल में समाहित किए जा सकते हैं। नुकसान यह है कि यह थोड़ा बदसूरत है, खासकर यदि आपके पास बहुत सारे बदलाव हैं।
निर्देशिका के बाद
बाद निर्देशिका का उपयोग करें ~/.vim/after/<file>.vim:।
इसके बाद लोड <file>.vimकिया जाएगा, जहां (उपनिर्देशिका सहित) के <file.vim>सापेक्ष पथ है $VIMRUNTIME। आपके उदाहरण में, यह होना चाहिए syntax/c.vim।
यह भी देखें :help after-directory।
लाभ यह है कि यह ऑटोकैड की तुलना में थोड़ा अधिक पठनीय है, खासकर यदि आपके पास कई बदलाव हैं। नुकसान यह है कि आपको एक अतिरिक्त फाइल पर कॉपी करने की आवश्यकता होगी यदि आप अपने विम सेटअप को अलग-अलग मशीनों में मिरर करना चाहते हैं (यह एक महत्वपूर्ण कारण है कि कई लोग अपनी विम फ़ाइलों को गीथब रेपो में रखते हैं, इसलिए इसे आसानी से मशीनों में देखा जा सकता है )।
~/.vim/after/syntax/c.vimइसके बजाय इसे जोड़ने का प्रयास करें ।