2012-09-21 11 views
14

मैं खोज परिणामों के लिए सब्लिमे टेक्स्ट 2 के लिए एक सिंटैक्स परिभाषा फ़ाइल लिखना चाहता हूं जो प्रत्येक स्थान के लिए फ़ाइल एक्सटेंशन का सम्मान करता है, जिसे यह शब्द की खोज में पाता है। दस्तावेज में उल्लेख किया गया है कि "Syntax definitions from separate files can be combined" लेकिन इसका उल्लेख नहीं है कि कैसे।SublimeText2 में सिंटेक्स परिभाषाओं का संयोजन

क्या किसी के पास कोई काम है कि यह कैसे काम करता है? इस प्रश्न का उत्तर: Sublime Text 2: Setting file syntax inside the file itself (as Vim modelines) भी काम करेगा।

संपादित

ठीक है, तो टिप एक दोस्त से: http://manual.macromates.com/en/language_grammars

एक नाम के साथ 'शामिल' टैग का उपयोग करता है कि किसी अन्य भाषा के संदर्भ के लिए। यह मेरे लिए काम करेगा, लेकिन दुर्भाग्यवश मुझे हर बार जब सुब्लीम टेक्स्ट खोला जाता है और इसे विभिन्न भाषा एक्सटेंशन के साथ फिर से लिखने के लिए फ़ाइल को फिर से संकलित करने के लिए एक प्लगइन लिखना होगा ... किसी भी मौके पर आपके पास एक बेहतर विचार है?

+0

यह वाक्यविन्यास परिभाषा नहीं है, लेकिन यह मदद कर सकता है: [http://css-tricks.com/exclude-compiled-css-from-sublime-text-2-projects/](http://css -tricks.com/exclude-compiled-css-from-sublime-text-2-projects/) – runningRhetoric

+0

काफी कुछ नहीं जो मैं ढूंढ रहा था ... मैं "परिणाम ढूंढें" से खुश हूं .. ओह, 'परिणाम। ' मैं – Crisfole

+0

को हाइलाइट करने वाले बेहतर सिंटैक्स की उम्मीद कर रहा था, मैं कुछ इसी तरह की खोज कर रहा हूं, और इस http://blog.macromates.com/2012/injection-grammars-project-variables/ पर आया। हालांकि, प्रवेश मेरे लिए बहुत स्पष्ट नहीं है। मैं अभी भी पच रहा हूँ। यहां तक ​​कि इस पर भी आया (https://groups.google.com/forum/?fromgroups=#!msg/textmate/cEXeWHjEXNk/EWqV5L2CWQAJ), लेकिन फिर भी, अभी भी बहुत अस्पष्ट है। – sntran

उत्तर

21

हाल ही में, मैंने अपने एसटी 2 सीएसएस सिंटैक्स हाइलाइटिंग को जुनून से धोखा दिया। इन * .tmLanguage फ़ाइलों की मेरी समझ परीक्षण और त्रुटि पर आधारित है - ज्यादातर त्रुटि। मैं इस बात का उल्लेख करने के लिए उल्लेख करता हूं कि मेरी समझ स्पॉटी है।

मुझे लगता है कि फ़ाइल को संशोधित करना चाहते ~/Library/Application Support/Sublime Text 2/Packages/Default/Find Results.hidden-tmLanguage

लंबी कहानी कम है, मुझे लगता है कि आप इस सार की तरह इसे सेट अप करना चाहते हैं (जो टिप्पणी उदार है):

https://gist.github.com/4333623#file-find-results-hidden-tmlanguage

एक फ़ाइलों परिणामों में ठेठ ढूँढें कुछ इस तरह दिखेगा:

Searching 11 files for "feedback-assistance-form" (regex) 

/_projects/___/group_reg.js: 
    60  }); 
    61 
    62:  $asstForm = $help.find('#feedback-assistance-form'); 
    63 
    64  if (!$asstForm.length) { 
    65:   console.log('WARN: Feedback assistance: #feedback-assistance-form not found'); 
    66   return; 
    67  } 

/_projects/___/group_register_help_tmpl.html: 
    6 <div id="group-reg-help"> 
    7 
    8: <form id="feedback-assistance-form" class="js-popover help-content hide" action="{% url info.views.assistance_request %}" method="post"> 
    9  
    10  <legend>Need Assistance?</legend> 

3 matches across 2 files 

Find Results.hidden-tmLanguage वें पार्स 3 प्रासंगिक भागों में ई परिणाम:

  • फ़ाइल नाम के साथ लाइन
  • एक मैच बिना एक अंश लाइन
  • एक मैच

इस के लिए नियम <patterns> में हैं के साथ एक कुछ अंश लाइन खंड:

<key>patterns</key> 
<array> 
    <dict> 
     <key>match</key> 
     <string>^([^ ].*):$</string> 
     <key>captures</key> 
     <dict> 
      <key>1</key> 
      <dict> 
       <key>name</key> 
       <string>entity.name.filename.find-in-files</string> 
      </dict> 
     </dict> 
    </dict> 
    <dict> 
     <key>match</key> 
     <string>^ +([0-9]+) </string> 
     <key>captures</key> 
     <dict> 
      <key>1</key> 
      <dict> 
       <key>name</key> 
       <string>constant.numeric.line-number.find-in-files</string> 
      </dict> 
     </dict> 
    </dict> 
    <dict> 
     <key>match</key> 
     <string>^ +([0-9]+):</string> 
     <key>captures</key> 
     <dict> 
      <key>1</key> <!-- capture group 1 --> 
      <dict> 
       <key>name</key> <!-- name it so it can be colored --> 
       <string>constant.numeric.line-number.match.find-in-files</string> 
      </dict> 
     </dict> 
    </dict> 
</array> 

ये सिर्फ फ़ाइल के माध्यम से जाते हैं, लाइन-दर-रेखा, और देखो f या एक मैच। यदि कोई मिलान मिलता है, तो एक या अधिक <key>name</key> मिलान के कैप्चरिंग समूह (ओं) पर परिभाषा लागू होती है, यदि कोई हो। ये name परिभाषाओं को विषय परिभाषा फ़ाइल (उदाहरण के लिए, मोनोकै) में संदर्भित किया गया है और रंग नामित कैप्चरिंग समूह द्वारा मिलान किए गए वर्णों पर लागू होता है।

उपरोक्त पैटर्न केवल कैप्चरिंग समूहों के साथ मेल खाते हैं। मुझे लगता है कि इसका एक सीमा मैच (या यह कैप्चरिंग समूह) है और आगे संसाधित नहीं किया जा सकता है। ,

<key>patterns</key> 
<array> 
    <dict> 
     <key>begin</key> 

<!-- add the filetype extensions, here --> 
<!-- these are XML formatted files: --> 

     <string>^([^ ].*\.(?:xml|tmLanguage|hidden-tmLanguage|tmTheme):)$</string> 
     <key>beginCaptures</key> 
     <dict> 
      <key>1</key> 
      <dict> 
       <key>name</key> 
       <string>entity.name.filename.find-in-files</string> 
      </dict> 
     </dict> 
     <key>end</key> 
     <string>^[^ ]</string> 
     <key>patterns</key> 
     <array> 
      <dict> 
       <key>include</key> 
       <string>#line-numbers</string> 
      </dict> 
      <dict> 
       <key>include</key> 


<!-- which syntax should match up to the filetype extensions listed above: --> 
<!-- to find out what the "scopeName" is, refer to the corresponding *.tmLanguage file --> 
<!-- for XML, this is ~/Library/Application Support/Sublime Text 2/Packages/XML/XSL.tmLanguage --> 

       <string>text.xml</string> 
      </dict> 
     </array> 
    </dict> 
    <!-- ... can have many more --> 
</array> 

पैटर्न के इस प्रकार के साथ मुख्य बात यह एक <begin> और एक <end> है तो यह यह खुद <pattern> अनुभाग है है:

क्या सार में लागू की गई प्रारूप के पैटर्न हैं।जब <begin> regex मिलान किया जाता है, <patterns> की सामग्री तब तक लागू होती है जब तक (यह वह जगह है जहां मुझे वास्तव में स्पॉटी मिलती है) एक बेजोड़ टोकन का सामना करना पड़ता है, जिस बिंदु पर <end> का परीक्षण किया जाता है। मुझे लगता है।

किसी भी घटना में, गिस्ट इन प्रारंभिक अंत-पैटर्न ब्लॉक में से कई को परिभाषित करता है, प्रत्येक एक्सएमएल, एचटीएमएल, जावास्क्रिप्ट और सीएसएस फ़ाइल प्रकारों और वाक्यविन्यासों में से एक। <being> regex फ़ाइल नाम और एक विशेष फ़ाइल एक्सटेंशन के साथ लाइन से मेल खाता है। इसका उपयोग किसी दिए गए वाक्यविन्यास के लिए "संदर्भ" की शुरुआत बनाने के लिए किया जाता है। संदर्भ तब समाप्त होता है जब बाद के <patterns> ब्लॉक स्टॉप मिलान और <end> रेगेक्स मैचों में तत्व होते हैं। मुझे लगता है कि आप मूल रूप से बस वाक्यविन्यास इनमें से जो भी आप खोज परिणामों में हाइलाइट करना चाहते हैं के लिए इस शरीर से बाहर करना चाहते हैं ...

यहाँ की वाक्य रचना-प्रकाश डाला खोजने के परिणाम मुझे लगता है कि सार का उपयोग कर रहा हूँ एक स्क्रीनशॉट है:

Blingwear

मुझे ध्यान रखना चाहिए कि एक बड़ा मुद्दा सामने आया है जब एक ब्लॉक-टिप्पणी एक अंश में शुरू होती है लेकिन अंश में ब्लॉक-टिप्पणी समाप्त करने वाले वर्ण शामिल नहीं होते हैं। ब्लॉक-टिप्पणी तब तक जारी रहती है जब तक कि खोज परिणामों में समाप्ति टोकन कहीं और नहीं आती है। यह बाद की खोजों में भी विस्तारित है।

अद्यतन:

मैं जोड़ने के लिए है कि आप स्टार्टअप पर कुछ भी पुन: संयोजित करने की जरूरत नहीं चाहिए था। हालांकि, यह उल्लेख करने लायक है कि आपको प्रभाव लेने के लिए Find Results.hidden-tmLanguage में परिवर्तनों के लिए उत्कृष्टता को पुनरारंभ करना होगा। यदि आप इसे किसी प्रकार की प्लगइन बनाते हैं, ऐसा लगता है कि परिवर्तन मुख्य रूप से नई भाषाओं को जोड़ने में शामिल होंगे, जो कि केवल एक कम प्लगइन-अपडेट हो सकता है।

+0

वाह, जाने का रास्ता! – Crisfole

+0

'उपरोक्त 1000 प्रतिनिधि' दुनिया में भी आपका स्वागत है! – Crisfole

+0

@CristopherPfohl धन्यवाद! हाँ, मैं काफी stoked हूँ। और, यदि आपको ब्लॉक टिप्पणियों के साथ इस मुद्दे के आसपास कोई रास्ता मिल गया है, तो कृपया एक अद्यतन पोस्ट करें। – tiffon

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