2013-04-06 3 views
15

कीबोर्ड शॉर्टकट को परिभाषित करने के लिए सिंटैक्स प्रकार प्राप्त करने का कोई तरीका है या सिंटैक्स प्रकार (शायद "context" के तहत) सेटिंग पर निर्भर करने के लिए कीबोर्ड शॉर्टकट सेट करने का कोई तरीका है?सब्लिमे टेक्स्ट और क्लोजर: सिंगल कोट्स को न मिलाएं

मेरी उद्धृत सूचियां '(1 2 3) इस तरह दर्ज की गई हैं: '(1 2 3)' क्योंकि सब्लिम इस सहायक (लेकिन इस मामले में नहीं) व्यवहार को लागू करता है।

यहाँ, Default (OSX).sublime-keymap फ़ाइल के प्रासंगिक बिट

// Auto-pair single quotes 
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'$0'"}, "context": 
    [ 
     { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, 
     { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, 
     { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true }, 
     { "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true }, 
     { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single", "match_all": true } 
    ] 
}, 
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context": 
    [ 
     { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, 
     { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true } 
    ] 
}, 
{ "keys": ["'"], "command": "move", "args": {"by": "characters", "forward": true}, "context": 
    [ 
     { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, 
     { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, 
     { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true } 
    ] 
}, 

उत्तर

8

आप में सक्षम होना चाहिए है यह एक दर्द की तरह है, हालांकि। सबसे पहले, आपको अंतर्निहित ऑटो जोड़ी को अक्षम करना होगा (चिंता न करें, जब हम समाप्त कर लेंगे, तो बाकी सब कुछ के लिए ऑटो जोड़ी काम करनी चाहिए)। ऐसा करने के लिए, अपनी उपयोगकर्ता सेटिंग्स में निम्नलिखित सेट करें।

"auto_match_enabled": false 

फिर अपनी सेटिंग्स में निम्नलिखित जोड़ें।

"my_auto_match_enabled": false 

अगला, हमें कीबाइंडिंग का एक नया सेट जोड़ना होगा। मैंने केवल आपके द्वारा पोस्ट किए गए कार्यों में से एक किया है, लेकिन मैं समझाऊंगा कि मैंने क्या किया क्योंकि यह स्पष्ट नहीं हो सकता है।

{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context": 
    [ 
     { "key": "setting.my_auto_match_enabled", "operator": "equal", "operand": true }, 
     { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }, 
     { "key": "selector", "operator": "not_equal", "operand": "source.clojure", "match_all": true } 
    ] 
} 

सबसे पहले, ध्यान दें मैं setting.auto_match_enabled से setting.my_auto_match_enabled करने के लिए पहली संदर्भ कुंजी बंद है। इसके बाद, मैंने अंतिम संदर्भ प्रविष्टि को जोड़ा जो दायरे को सीमित करेगा। इसके साथ, स्निपेट केवल तभी चलाया जाएगा जब आप source.clojure दायरे में न हों। आपको इसे संशोधित करना पड़ सकता है क्योंकि मुझे नहीं पता कि क्लोजर में दायरा का नाम क्या है, मैंने अभी अनुमान लगाया है =)। आपको अपनी सभी एकल कोट प्रविष्टियों के लिए ऐसा करना होगा। अब, क्योंकि हमने निर्मित ऑटो जोड़ी को अक्षम कर दिया है, इसलिए हमें उन सभी प्रविष्टियों को भी पढ़ना होगा। इन प्रविष्टियों में, हम फिर से setting.auto_match_enabled से setting.my_auto_match_enabled बदल देंगे। उसके बाद, सबकुछ काम करना चाहिए। ध्यान दें कि यह वास्तव में my_auto_match_enabled नहीं होना चाहिए, जो मैंने चुना है। जब आप फिट देखते हैं तो आप इसे बदल सकते हैं।

जो भी कहा जा रहा है, मैंने पूरी तरह से इसका परीक्षण नहीं किया, इसलिए अगर आप मुद्दों में भाग लेते हैं तो टिप्पणी करें।

स्पष्टीकरण:

तो अब आप अपने आप को पूछ रहा हो सकता है, मैं क्यों ऑटो मिलान कोड में बनाया निष्क्रिय करने के लिए की जरूरत है? खैर यहाँ जवाब है। भले ही हम अपने उपयोगकर्ता सेटिंग्स में ऑटो को पूर्ण रूप से ब्लॉक करना चाहते थे, एक समान स्कोपिंग नियम का उपयोग करके, यह अभी भी डिफ़ॉल्ट पर वापस आ जाएगा, इस प्रकार ऑटो युग्मित उद्धरण डालने के बावजूद हम उपयोगकर्ता फ़ोल्डर में क्या करते हैं। अब आप सोच रहे होंगे, लेकिन अगर हम डिफ़ॉल्ट सेटिंग्स फ़ाइल को संशोधित करते हैं तो क्या होगा। यद्यपि हम ऐसा कर सकते हैं, फिर भी वही संदर्भ सेटिंग डालना, हमें यह सुनिश्चित करना होगा कि उस फ़ाइल को किसी भी बाद के अपडेट पर पुनर्स्थापित करना होगा। तो मुझे लगता है कि अंत में यह आपके ऊपर है। यदि आप डिफ़ॉल्ट फ़ाइल को संपादित करते हैं, तो बस ध्यान रखें कि यदि आपको कभी भी वापस करने की आवश्यकता है, तो आपको फ़ाइल को फिर से बदलना होगा।

उदात्त पाठ 3:

ST3 में, आप वास्तव में "डिफ़ॉल्ट" फ़ाइल को संशोधित कर सकते हैं। एसटी 3 में पैकेज कैसे लोड किए जाते हैं, इस बदलाव के कारण यह है। पैकेज फ़ोल्डर में निकालने की आवश्यकता के बजाय, प्लगइन्स सीधे .sublime-package फ़ाइलों से चलाए जाते हैं (जिन्हें केवल ज़िप नाम दिया जाता है)। इसके अतिरिक्त, पैकेज निर्देशिका में किसी भी फ़ाइल को .sublime-package फ़ाइल पर प्राथमिकता होती है। तो, एसटी 3 में, आप Packages/Default/Default (your os here).sublime-keymap बनाएंगे, और संदर्भ रेखा जोड़ेंगे। यह किसी भी बाद के अपडेट से सुरक्षित है क्योंकि अद्यतन अब पैकेज निर्देशिका को संशोधित नहीं करते हैं।

+0

क्या कोई आसान तरीका नहीं है? क्या आप शायद 'auto_match_enabled' का उपयोग जारी नहीं रखने के बारे में एक वाक्य या दो डाल सकते हैं? –

+0

मजेदार मैं सोच रहा था कि मुझे यह समझा जाना चाहिए। वैसे भी, मैंने जवाब अपडेट किया। मैंने एक वैकल्पिक विकल्प भी जोड़ा, जहां आप डिफ़ॉल्ट फ़ाइल को संपादित कर सकते थे। ध्यान देने योग्य एकमात्र चीज यह है कि यदि आपको कभी भी किसी भी प्रकार का अपडेट वापस करना या करना है, तो फ़ाइल मिटा दी जा सकती है। हालांकि एसटी 2 ऐसा नहीं दिखता है, लेकिन इसे कोई अपडेट प्राप्त होगा, इसलिए यह ठीक हो सकता है। डिफ़ॉल्ट फ़ाइल को संपादित करने से उस चयनकर्ता संदर्भ को डिफ़ॉल्ट प्रविष्टियों में जोड़ना शामिल होगा। – skuroda

+0

वैसे मैं निश्चित रूप से एसटी 3 पर रहूंगा लेकिन मैं एसटी 2 में विंडोज पर कुछ काम कर सकता हूं। उपयोगकर्ता फ़ाइल में इसे फिर से चलाकर डिफ़ॉल्ट कीमैपिंग को ओवरराइड करना संभव होना चाहिए। –

14

मैं इस सरल काम किया: अपने उपयोगकर्ता के कुंजी-बाइंडिंग में

// Singlequote for lisp 
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'"}, "context": 
    [ 
     { "key": "selector", "operator": "equal", "operand": "source.lisp"} 
    ] 
}, 

:
इस रखो।


चरण इसे एक पायदान:

अभी भी इस परिदृश्य में एक असामान्य बात है: '|' (पाइप कैरट का प्रतिनिधित्व करता है), बैकस्पेस दबाने के बाद, यह अभी भी दोनों singlequotes हटाना होगा।


इसे ठीक करने के जोड़ने इस अपने उपयोगकर्ता के मुख्य कीबाइंडिंग रहे हैं:

{ "keys": ["backspace"], "command": "left_delete", "context": 
    [ 
     { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, 
     { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, 
     { "key": "preceding_text", "operator": "regex_contains", "operand": "'$", "match_all": true }, 
     { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true }, 
     { "key": "selector", "operator": "equal", "operand": "source.lisp"} 
    ] 
}, 

महत्वपूर्ण नोट:

टिप्पणी में पिकविक द्वारा कहा गया है , आपको - निश्चित रूप से -

बदलना चाहिए
"source.<name-of-scope-the-syntax-you're-using-is-using>":

"source.lisp"

"source.<lisp-of-your-choice>"
या बल्कि
को "source.<name-of-syntax-of-your-choice>"
या यहाँ तक कि बजाय-er को ।


ScopeAlways एक प्लगइन आप देखेंगे कि आपके सिंटैक्स का उपयोग कर रहा है गुंजाइश का सही नाम दिखा सकते हैं। सीएल, "source.clojure" क्लोजर के लिए के लिएजैसे कुछ होने की संभावना है, शायद "source.scheme" यदि आप शांत बच्चों के साथ बाहर निकलते हैं, तो ...

+0

क्या आप यह समझा सकते हैं कि यह क्या करता है? धन्यवाद –

+0

उदात्त पाठ में, automatching पर ' '' '" ',' [ ',' '{और' (', युगल चालाक नियमों के साथ, डालने" इनलाइन के टुकड़े "(पता नहीं कैसे कॉल करने के लिए कीबाइंडिंग द्वारा किया जाता है यह है, यह भी कुंजीपटल शॉर्टकट फ़ाइल के अंदर परिभाषित) स्निपेट के ऊपर 'singlequote' पर सभी कीबाइंडिंग अधिलेखित कर देता है झलकी है, मामले में आप' source.lisp' संदर्भ में टाइप करें (तुतलाना वाक्य रचना हाइलाइटिंग)। – enrey

+0

और निश्चित रूप से, यह इसके मूल के साथ अधिलेखित कर देता है सिंगलक्वोट कुंजी का अर्थ - "एक सिंगल कोट डालना" – enrey

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