0

我花了太多时间来研究如何在编辑 JavaScript 时准确地覆盖特定的代码格式化工具以支持另一个工具,但将另一个用于格式化 HTML 和 CSS。

我没有在 SO 或其他地方找到任何完整的说明,所以我决定在这里发布问答。

问题:

HTMLPrettify 侦听特定的键绑定(super-shift-h),然后根据文件语法运行 Prettify 脚本变体。它处理 HTML、CSS、JS 和 JSON。

我想要JSCS

我找到了 JSCS,并喜欢它不仅可以轻松匹配和处理基础知识,而且还有大量的编码风格选项。

对我来说最酷的事情是用户可以简单地选择一个众所周知的 JS 样式指南,如 airbnb 或 jquery,JSCS 会将其格式化代码的样式与该样式相匹配。

无论如何,我想用它来代替。但是我想为 HTML 和 CSS 保留 HTMLPrettify,但找不到一种方法来为 JS 和 JSON 选择一个,而为 HTML 和 CSS 选择另一个。

4

1 回答 1

1

解释

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 插件。或者,按照惯例,插件开发人员可以简单地小心地将上下文添加到他们的键绑定中,并为其他语法打开绑定“命名空间”。

于 2015-09-10T20:58:44.093 回答