2008-09-26 9 views
10

मैं विम और इसके सिंटैक्स हाइलाइटिंग के बारे में अधिक जानने का निर्णय लेता हूं। दूसरों के लिए उदाहरणों का उपयोग करके, मैं मार्कडाउन के लिए अपनी खुद की वाक्यविन्यास फ़ाइल बना रहा हूं। मैंने mkd.vim देखा है और इसमें भी यह समस्या है। मेरी समस्या सूची आइटम और कोड ब्लॉक हाइलाइटिंग के बीच है।विम मार्कडाउन हाइलाइटिंग (सूची आइटम और कोड ब्लॉक विवाद)

कोड ब्लॉक definition:

  • पहली पंक्ति खाली
  • दूसरी पंक्ति कम से कम 4 रिक्त स्थान या 1 टैब
  • ब्लॉक एक रिक्त पंक्ति

उदाहरण के साथ समाप्त हो गया है के साथ शुरू होता है:

Regular text 

    this is code, monospaced and left untouched by markdown 
    another line of code 

Regular Text 

मेरे विम वाक्य रचना कोड ब्लॉक के लिए:

syn match mkdCodeBlock /\(\s\{4,}\|\t\{1,}\).*\n/ contained nextgroup=mkdCodeBlock 

hi link mkdCodeBlock comment 

Unorder सूची आइटम definition:

  • पहली पंक्ति खाली है
  • दूसरी पंक्ति के साथ शुरू होता है एक [- + *] फिर एक रिक्ति
  • सूची रिक्त रेखा के साथ समाप्त हो जाती है, फिर एक सामान्य (गैर-सूची) रेखा
  • लाइन आइटमों के बीच में रिक्त लाइनों को जोड़ा जा सकता है
  • एक उप सूची इंडेंट (4 अंतरिक्ष या 1 टैब) द्वारा निर्दिष्ट किया जाता
  • एक सूची आइटम के बाद सामान्य पाठ की एक पंक्ति है कि सूची आइटम के एक निरंतरता के रूप में शामिल है

उदाहरण:

Regular text 

- item 1 

    - sub item 1 
    - sub item 2 
- item 2 
this is part of item 2 
so is this 


- item 3, still in the same list 
    - sub item 1 
    - sub item 2 

Regular text, list ends above 

unorder सूची आइटम परिभाषा के लिए मेरे विम वाक्य रचना (मैं केवल [-+*] पर प्रकाश डाला):

syn region mkdListItem start=/\s*[-*+]\s\+/ matchgroup=pdcListText end=".*" contained nextgroup=mkdListItem,mkdListSkipNL [email protected] skipnl 
syn match mkdListSkipNL /\s*\n/ contained nextgroup=mkdListItem,mkdListSkipNL skipnl 

hi link mkdListItem operator 

मैं highli नहीं मिल सकता है सूची के लिए और कोड ब्लॉक के साथ पिछले दो नियमों के साथ काम करने के लिए गेटिंग।

यह एक उदाहरण है कि मेरे वाक्य रचना हाइलाइटिंग टूट जाता है:

Regular text 

- Item 1 
- Item 2 
part of item 2 

    - these 2 line should be highlighted as a list item 
    - but they are highlighted as a code block 

मैं वर्तमान को समझ नहीं सकता कैसे हाइलाइटिंग तरीके से काम करने के लिए मैं चाहता हूँ कि यह बहुत


एक जोड़ने के लिए भूल "वैश्विक" वाक्यविन्यास नियम नीचे सूचीबद्ध दोनों नियमों में उपयोग किया जाता है। यह सुनिश्चित करना है कि वे एक खाली रेखा से शुरू करें।

syn match mkdBlankLine /^\s*\n/ nextgroup=mkdCodeBlock,mkdListItem transparent 

एक और नोट: मैं और अधिक स्पष्ट किया जाना चाहिए था।

syn match mkdCodeBlock /\(\s\{4,}\|\t\{1,}\).*\n/ contained nextgroup=mkdCodeBlock 
hi link mkdCodeBlock comment 

syn region mkdListItem start=/\s*[-*+]\s\+/ matchgroup=pdcListText end=".*" contained nextgroup=mkdListItem,mkdListSkipNL [email protected] skipnl 
syn match mkdListSkipNL /\s*\n/ contained nextgroup=mkdListItem,mkdListSkipNL skipnl 
hi link mkdListItem operator 

syn match mkdBlankLine /^\s*\n/ nextgroup=mkdCodeBlock,mkdListItem transparent 

विम प्रलेखन :help :syn-define में कहते हैं: मेरी वाक्य रचना फ़ाइल में सूची नियमों से पहले Blockquote नियम


+0

कूल। अंततः मुझे विम स्क्रिप्टिंग सीखना चाहता है। :) – jop

उत्तर

6

बस सुनिश्चित करें कि mkdListItem की परिभाषा, mkdCodeBlock की परिभाषा के बाद है इस तरह बनाने के दिखाई देते हैं :

"मामले में एक से अधिक आइटम एक ही स्थिति है, जो था परिभाषित अंतिम जीत में से मेल खाता है इस प्रकार आप एक मैं का उपयोग कर द्वारा पहले से परिभाषित वाक्य रचना वस्तुओं पर हावी हो सकते हैं। टेम्प जो एक ही पाठ से मेल खाता है। लेकिन एक कीवर्ड हमेशा मैच या क्षेत्र से पहले चला जाता है। और मिलान मामले के साथ एक कीवर्ड हर मामले की अनदेखी के साथ एक कीवर्ड से पहले चला जाता है। "

+0

आप सही हैं। मैंने अपना प्रश्न (नीचे) अपडेट किया है, मेरी सूची नियम मेरे ब्लॉककोट नियम से पहले है। क्या आप अपना उदाहरण चारों ओर फ़्लिप कर सकते हैं, इसलिए ब्लॉकक्वाट सूची से पहले है। तो मैं आपका जवाब स्वीकार कर सकता हूं। –

+0

आप सही हैं, मूल रूप से मैंने "रिवर्स समस्या" हल की है :) – hcs42

1

hcs42 सही था। अब मैं उस अनुभाग पढ़ने याद करते हैं, लेकिन जब तक hcs24 मुझे इसके बारे में याद दिलाया मैं इसके बारे में भूल गया था।

यहाँ मेरे अद्यतन वाक्य रचना (कुछ अन्य तोड़ मरोड़) है कि काम करता है:

 
""""""""""""""""""""""""""""""""""""""" 
" Code Blocks: 

" Indent with at least 4 space or 1 tab 
" This rule must appear for mkdListItem, or highlighting gets messed up 
syn match mkdCodeBlock /\(\s\{4,}\|\t\{1,}\).*\n/ contained nextgroup=mkdCodeBlock 

""""""""""""""""""""""""""""""""""""""" 
" Lists: 

" These first two rules need to be first or the highlighting will be 
" incorrect 

" Continue a list on the current line or next line 
syn match mkdListCont /\s*[^-+*].*/ contained nextgroup=mkdListCont,mkdListItem,mkdListSkipNL [email protected] skipnl transparent 

" Skip empty lines 
syn match mkdListSkipNL /\s*\n/ contained nextgroup=mkdListItem,mkdListSkipNL 

" Unorder list 
syn match mkdListItem /\s*[-*+]\s\+/ contained nextgroup=mkdListSkipNL,mkdListCont skipnl 
0

ताओ Zhyn, कि हो सकता है आपके उपयोग के मामलों को शामिल किया गया है, लेकिन यह Markdown वाक्य रचना को कवर नहीं करता Markdown में किसी सूची आइटम एक कोड खंड हो सकता है। आप मेरे समाधान here पर एक नज़र डाल सकते हैं

टीएल; डीआर; समस्या यह है कि vim आपको कुछ ऐसा नहीं कहने देता है: एक ब्लॉक जिसमें उसके कंटेनर + 4 रिक्त स्थान के समान इंडेंटेशन है। मुझे मिला एकमात्र समाधान प्रत्येक प्रकार के ब्लॉक के लिए नियम उत्पन्न करना है जो इंडेंटेशन के प्रत्येक स्तर के लिए एक सूची आइटम में निहित हो सकता है (वास्तव में मैं इंडेंटेशन के 42 स्तर का समर्थन करता हूं लेकिन यह मनमाना संख्या है)

तो मेरे पास मार्कडाउनकोडब्लॉकइनलिस्ट ItemAtLevel1 है एक markdownListItemAtLevel1 में समाहित किया जाना चाहिए और यह कम से कम 8 प्रमुख रिक्त स्थान, एक तो markdownCodeBlockInListItemAtLevel2 कि एक markdownListItemAtLevel2 कि एक markdownListItemAtLevel1 चींटी में समाहित किया जाना चाहिए, कम से कम 10 प्रमुख रिक्त स्थान के लिए ecc की जरूरत में समाहित किया जाना चाहिए की जरूरत है। ..

मुझे पता है कि कुछ साल बीत चुके हैं लेकिन शायद कोई इस पर विचार करेगा जवाब उपयोगी है क्योंकि इंडेंटेशन पर आधारित सभी वाक्यविन्यास एक ही समस्या के पीड़ित हैं

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