我正在尝试创建两个快捷方式,以便在我按下这些键时将这些代码添加到sublime上,但是只有第二个有效,就像它会覆盖第一个一样。 有人对如何使它起作用有任何想法吗?
我尝试过:
[{
"keys": ["ctrl+."],
"command": "insert_snippet",
"args": {
"contents": "<pre><?print_r()?></pre>"
},
"keys": ["ctrl+alt+."],
"command": "insert_snippet",
"args": {
"contents": "?><pre><?print_r()?></pre><?"
},
}]
这:
[{
"keys": ["ctrl+.", "ctrl+alt+."],
"command": "insert_snippet",
"args": {
"contents": "<pre><?print_r()?></pre>",
"contents": "?><pre><?print_r()?></pre><?"
}
}]
答案 0 :(得分:0)
每个单独的键绑定都必须是它自己独特的JSON对象(即在{}
字符内),其中keys
指定触发它的键,command
指定执行什么和args
指定命令参数。
假设它不是某种复制/粘贴错误,您的示例无法按您希望的方式工作是因为尽管它们包含有效的JSON,但它们不包含有效的键绑定。因此,文件的结构是有效的,但是Sublime解释文件的方式与您预期的不同。
为直观起见,这是您的第一个示例,其中删除了[]
个字符:
{
"keys": ["ctrl+."],
"command": "insert_snippet",
"args": {
"contents": "<pre><?print_r()?></pre>"
},
"keys": ["ctrl+alt+."],
"command": "insert_snippet",
"args": {
"contents": "?><pre><?print_r()?></pre><?"
},
}
现在我们可以看到,第一个{
字符正在打开第一个键绑定,但是在该命令的}
之后没有匹配的args
字符;相反,我们看到了另一组键绑定对象键,最后一行的}
是键绑定的结尾。
在任何JSON对象(不是特定于Sublime Text)中,对象键都必须是唯一的;因此,这实际上是单个JSON对象,每个键都有重复。 Sublime对此的反应是忽略前三个键,而选择后三个键。
这将为您提供单个键绑定,而不是其中的两个,这是第二个键绑定,因此 ctrl + alt +。有效,但 ctrl +。却没有。 t,因为它被忽略了。
在第二个示例中,重复的对象键在键绑定的args
键中;这意味着当键绑定触发时,将执行insert_snippet
命令,但是它得到的参数将是第二个键的内容。
在这种情况下,此绑定有效,但是您(可能是无意间)做了一个定义键绑定的操作,该键绑定要求您依次按两个键才能触发它。也就是说,您需要先按 ctrl +。,然后按 ctrl + alt +。,以便触发键绑定。
我认为,根据您的示例,您打算具有两个不同的键绑定,每个键绑定都插入不同的内容,第一个示例与此最接近;您只需要在第一个},
之后插入args
,在第二个{
之前插入keys
:
[
{
"keys": ["ctrl+."],
"command": "insert_snippet",
"args": {
"contents": "<pre><?print_r()?></pre>"
},
},
{
"keys": ["ctrl+alt+."],
"command": "insert_snippet",
"args": {
"contents": "?><pre><?print_r()?></pre><?"
},
},
]
在这里,我对第二个示例进行了重新格式化,并附加了其他修复程序,以帮助澄清是{}
定义了各个键绑定,[]
字符用于包装绑定列表在文件中。