【问题标题】:How do I create a snippet that inserts \{\} using escape characters?如何创建使用转义字符插入 \{\} 的片段?
【发布时间】:2018-05-25 13:23:48
【问题描述】:

我正在尝试在 sublime 文本中创建一个 sn-p,当我按下 ctrl+shift+[ 时,它会插入 sn-p \{\},但我无法弄清楚如何使用转义字符来做到这一点。

这是我所拥有的:

{
    "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 撤消操作,它将一次删除每个字符,而不是删除整个 sn-p,这很烦人。还有,这只是事情的原理,我相信我应该可以在一个sn-p中完成!

有谁知道我怎样才能让它工作?

【问题讨论】:

  • 如果您不想插入 sn-p(即不要使用 $1、$2、...),您也可以使用 insert 和“普通”json 转义:@987654328 @
  • 啊酷,很高兴知道!非常感谢

标签: sublimetext3 key-bindings code-snippets


【解决方案1】:

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

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

原因在:https://github.com/SublimeTextIssues/Core/issues/1878#issuecomment-328133400:

由于与TextMate sn-ps的兼容性,以下字符必须转义为文字:

\${}

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

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

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

【讨论】:

  • 啊好吧,有道理,所以你需要转义转义字符,然后转义{ 字符!我想看看我是否可以用"\\\{\\\}" 逃脱转义字符,但它没有用,我应该再去一个!非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2021-09-10
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多