टी एल; डॉ:
यह विम के PHP और HTML सिंटैक्स फ़ाइलों में परिभाषित किया गया है। यह देखने के लिए कि सीएसएस के लिए नियम कैसे जोड़े जाएं, अनुभाग पर जाएं और मैं उन्हें कैसे जोड़ूं? नीचे, या यह कैसे काम करता है, इसकी व्याख्या के लिए पढ़ें।
इन वाक्यविन्यास नियमों को कहाँ परिभाषित किया जा रहा है?
जावास्क्रिप्ट हेरेडोक को विम के सिंटैक्स contains1 फीचर का उपयोग करके हाइलाइट किया गया है , जो सिंटैक्स समूहों को अन्य सिंटैक्स समूहों को शामिल करने की अनुमति देता है।
यह कहाँ परिभाषित किया गया है यह जानने के लिए, पहले PHP के लिए सिंटैक्स हाइलाइटिंग फ़ाइल खोलें:
:e $VIMRUNTIME/syntax/php.vim
अब, संभवतः वाक्यविन्यास फ़ाइल स्ट्रिंग "जावास्क्रिप्ट" के एक मैच के आधार पर जावास्क्रिप्ट हेरेडोक ढूंढ रही है, इसलिए उसको खोजने का प्रयास करें:
/javascript
तीसरा मैच यह टिप्पणी है:
" including HTML,JavaScript,SQL even if not enabled via options
उम्मीद तो दिखती है! आइए प्रासंगिक सिंटैक्स रेखा पर एक नज़र डालें:
syn region phpHereDoc matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend
( आसान पढ़ने के लिए लाइन निरंतरता )
ठीक है, इसलिए यह वाक्यविन्यास क्षेत्र एक नियमित रूप से अभिव्यक्ति के साथ जावास्क्रिप्ट हेरेडोक पाता है, और तर्क के भीतर जावास्क्रिप्ट को @htmlJavascriptसिंटैक्स cluster2 को शामिल करके क्षेत्र के भीतर हाइलाइटिंग की अनुमति देता containsहै।
लेकिन CSS heredocs की कोई समान परिभाषा नहीं है! एक जोड़ देता है। इसलिए पहली बात यह है कि startनियमित अभिव्यक्ति। सीधे शब्दों में बदलने javascriptमें css:
start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
यह आसान है!
लेकिन हम नहीं चाहते हैं कि हमारे सीएसएस heredoc में जावास्क्रिप्ट हाइलाइटिंग हो। इसलिए हमें @htmlJavascriptसीएसएस समकक्ष को भी बदलना होगा । लेकिन CSS समतुल्य क्या है ? (आप अनुमान लगाने में सक्षम हो सकते हैं, लेकिन आइए सुनिश्चित होने के लिए गतियों के माध्यम से चलते हैं।)
यह देखने के लिए htmljavascript3 खोजें कि कहां परिभाषित किया गया है:
/htmljavascript
हममम। अन्य कोई परिणाम नहीं। इसे कहीं और परिभाषित किया जाना चाहिए! चलो फ़ाइल के शीर्ष पर एक त्वरित नज़र रखते हैं कि क्या हम किसी को भी शामिल कर सकते हैं:
runtime! syntax/html.vim
ऐसा लग रहा है कि यह 4 हो सकता है ।
:e $VIMRUNTIME/syntax/html.vim
इस फ़ाइल में फिर से खोज चलाएँ, और हमें यह पंक्ति 5 मिली :
syn cluster htmlJavaScript add=@htmlPreproc
तो htmlJavaScript एक clusterपरिभाषित है , में है html.vim। क्या सीएसएस के लिए एक समान क्लस्टर है जिसका हम उपयोग कर सकते हैं?
/htmlcss
हाँ!
syn include @htmlCss syntax/css.vim
तो हम बस प्रतिस्थापित करने की आवश्यकता @htmlJavascriptके साथ @htmlCssमें containsतर्क:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
और मैं उन्हें कैसे जोड़ूं?
फ़ाइल में नीचे दिए गए पूरे सिंटैक्स कमांड को सेव करें ~/after/syntax/php.vimताकि यह शेष PHP सिंटैक्स प्रोसेसिंग के बाद चलाया जाए, और आपका काम हो गया!
syn region phpHereDoc matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlCss,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend
1: :help :syn-containsविवरण के लिए देखें।
2: देखें :help :syn-cluster।
3: मैंने 'ignorecase'स्विच ऑन कर लिया है । इसके बिना, आपको
4 htmlJavascriptया खोज करने की आवश्यकता होगी \chtmljavascript
: वास्तव में, विम सिंटैक्स फ़ाइलों में उपयोग की जाने वाली नामकरण योजना के आधार पर, हम शायद इसे केवल htmlJavascriptनाम के आधार पर समझ सकते हैं।
5: "जावास्क्रिप्ट" के साथ इस बार अलग-अलग पूंजीकृत। भाग्यशाली हम 'ignorecase'पर बदल गया है, एह?
// This should be syntax-highlightedएक वैध सीएसएस टिप्पणी नहीं है, और इसलिए सिंटैक्स को एक टिप्पणी के अलावा किसी अन्य चीज़ के रूप में हाइलाइट किया जाना चाहिए। CSS केवल/* */मल्टी-लाइन टिप्पणियों का समर्थन करता है ।//एकल-पंक्ति टिप्पणियों का समर्थन केवल तभी किया जाता है यदि आप Sass या Stylus जैसी पूर्वप्रक्रमक भाषाओं का उपयोग करते हैं।