如何创建使用转义字符插入\ {\}的代码段?

时间:2018-05-25 13:23:48

标签: sublimetext3 key-bindings code-snippets

我正在尝试创建一个崇高文本的片段,当我按下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 个答案:

答案 0 :(得分:2)

尽管看起来不直观,但使用以下键绑定将插入\{\}

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

原因解释如下:https://github.com/SublimeTextIssues/Core/issues/1878#issuecomment-328133400

  

由于与TextMate代码段的兼容性,必须将以下字符转义为字面值:

     

\${}

     

任何其他\{CHAR}将逐字生成。这解释了为什么单个反斜杠很好,但是两个变为单个反斜杠。

如果有帮助,您还可以在ST控制台中执行以下操作,以查看JSON额外转义所产生的差异(例如,与.sublime-snippet文件中的相同内容相比):< / p>

view.run_command('insert_snippet', { 'contents': r'\\{\\}' })