【问题标题】:How to select commands based on file syntax in Sublime Text如何在 Sublime Text 中根据文件语法选择命令
【发布时间】:2015-09-10 20:58:44
【问题描述】:

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

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

问题:

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

我想要 JSCS

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

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

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

【问题讨论】:

    标签: syntax sublimetext3 key-bindings prettify jscs


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 2020-07-23
      • 1970-01-01
      • 2014-04-12
      • 2013-10-07
      • 1970-01-01
      • 2016-01-30
      相关资源
      最近更新 更多