解释
HTMLPrettify 在它自己的配置文件中捕获键绑定,该文件在之后加载,因此会覆盖默认和用户键绑定。
JSCS 默认使用与 HTMLPrettify 相同的键绑定,因此它最终成为谁被调用的斗争。
要解决此问题,有必要在其设置中从 HTMLPrettify 中删除键绑定,然后添加一些使用条件上下文查看语法类型的自定义用户键绑定。
将 HTMLPrettify 设置中的第一个选项更改为:
[{
"keys": [""],
"command": "htmlprettify"
},
然后将以下内容添加到 SublimeText 中的 User Key Bindings 文件中:
[
{
"keys": ["super+shift+h"],
"command": "format_javascript",
"context": [
{ "key": "selector", "operator": "equal", "operand": "source.js" },
{ "key": "selector", "operator": "equal", "operand": "source.json" },
]
},
{
"keys": ["super+shift+h"],
"command": "htmlprettify",
"context": [
{ "key": "selector", "operator": "not_equal", "operand": "source.js" },
{ "key": "selector", "operator": "not_equal", "operand": "source.json" },
]
}
]
请注意,“not_equal”部分是必要的,因为 Sublime Text(至少在 OSX 上)似乎有一个错误,需要明确排除任何其他匹配项,否则它会简单(在这种情况下)对所有内容运行 JSCS。
我还没有测试过,但我想如果你想包含其他格式化程序,你可以为它们中的每一个使用“equal”模式,匹配源类型,然后使用“not_equal”模式来匹配到一个空的命令。
个人笔记
代码格式化是一个很常见的功能。用于格式化特定语法的特定引擎应该与键绑定分离,以便单个键绑定可以用于所有“格式”命令,并且语法将根据用户分配的引擎确定使用哪个引擎。
这很可能可以很容易地做成一个 SublimeText 插件。或者,按照惯例,插件开发人员可以简单地小心地将上下文添加到他们的键绑定中,并为其他语法打开绑定“命名空间”。