Sublime Text 3 Keymap仅运行最后定义的命令

时间:2018-10-02 17:41:22

标签: sublimetext3

我正在尝试创建两个快捷方式,以便在我按下这些键时将这些代码添加到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><?"
    }
}]

1 个答案:

答案 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><?"
        },
    },
]

在这里,我对第二个示例进行了重新格式化,并附加了其他修复程序,以帮助澄清是{}定义了各个键绑定,[]字符用于包装绑定列表在文件中。