मैं उदात्त पाठ में एक स्निपेट बनाने की कोशिश कर रहा हूं कि जब मैं ctrl+shift+ दबाता हूं [यह स्निपेट \{\} को सम्मिलित करता है, लेकिन मुझे यह पता लगाने में परेशानी हो रही है कि इसे करने के लिए एस्केप वर्णों का उपयोग कैसे करें।

यही सब कुछ मेरे पास है:

{
    "keys": ["ctrl+shift+["], 
    "command": "insert_snippet", 
    "args": {
        "contents": "\\{\\}"
    }
}

लेकिन जब मैं कीबोर्ड शॉर्टकट का उपयोग करता हूं, तो यह बिना बैकस्लैश के केवल {} सम्मिलित करता है! यह अजीब है क्योंकि जब मैं इसे केवल "\\" में बदलता हूं तो आउटपुट \ होता है, लेकिन जब दो बैकस्लैश के बाद कुछ आता है, तो यह बैकस्लैश को अनदेखा कर देता है।

मुझे ChainOfCommand पैकेज का उपयोग करके एक तरह का काम मिला है जो प्रत्येक वर्ण को अलग से इस तरह सम्मिलित करता है:

{ 
    "keys": ["ctrl+shift+["], 
    "command": "chain", 
    "args": {
        "commands": [
            ["insert_snippet", {"contents": "\\"}],
            ["insert_snippet", {"contents": "{"}],
            ["insert_snippet", {"contents": "\\"}],
            ["insert_snippet", {"contents": "}"}]
        ]
    }
}

लेकिन इसके साथ समस्या यह है कि अगर मैं एक ctrl-z पूर्ववत करता हूं, तो यह पूरे स्निपेट को हटाने के बजाय प्रत्येक वर्ण को एक बार में हटा देगा, जो परेशान है। इसके अलावा, यह सिर्फ बात का सिद्धांत है, मुझे इसे एक स्निपेट में करने में सक्षम होना चाहिए, मुझे यकीन है!

क्या किसी के पास कोई विचार है कि मैं इसे कैसे काम कर सकता हूं?

1
guskenny83 25 मई 2018, 16:23

1 उत्तर

सबसे बढ़िया उत्तर

यह जितना सहज नहीं लग सकता है, निम्न कीबाइंडिंग का उपयोग करने से \{\} सम्मिलित हो जाएगा:

{
    "keys": ["ctrl+shift+["], 
    "command": "insert_snippet", 
    "args": {
        "contents": "\\\\{\\\\}"
    }
},

इसका कारण यहां बताया गया है: https://github.com/SublimeTextIssues/ कोर/मुद्दों/1878#इश्यू कमेंट-328133400:

TextMate स्निपेट के साथ संगतता के कारण, निम्नलिखित वर्णों को शाब्दिक होने से बचना चाहिए:

\, $, {, }

कोई अन्य \{CHAR} शब्दशः तैयार किया जाएगा। यह बताता है कि क्यों एक बैकस्लैश ठीक है, लेकिन दो एकल हो जाते हैं।

यदि यह मदद करता है, तो आप एसटी कंसोल में निम्नलिखित को भी निष्पादित कर सकते हैं ताकि जेएसओएन अतिरिक्त-एस्केपिंग के अंतर को देख सकें (उदाहरण के लिए, .sublime-snippet फ़ाइल के अंदर समान सामग्री की तुलना में):

view.run_command('insert_snippet', { 'contents': r'\\{\\}' })
2
Community 20 जून 2020, 12:12