我正在尝试创建一个崇高文本的片段,当我按下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撤消,它将一次删除一个角色,而不是删除整个片段,这很烦人。此外,它只是事情的原则,我应该能够在一个片段中做到我确定!
有谁知道我怎么能让它发挥作用?
答案 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'\\{\\}' })