代码之家  ›  专栏  ›  技术社区  ›  Ralph Callaway

如何取消映射升华文本键绑定,以便执行标准操作系统操作?

  •  1
  • Ralph Callaway  · 技术社区  · 7 年前

    的正常mac行为 command+shift+? 是打开帮助菜单搜索,无需鼠标即可非常方便地执行菜单命令。

    不幸的是,我安装的一个sublime文本包将该键绑定映射到了设置菜单。这是包裹的相关部分 Default (OSX).sublime-keymap 文件

    [
        {  "keys": ["super+shift+/"], "command": "open_settings" }
    ]
    

    基于与相关 How to unbind a key binding in Sublime Text 2? 我继续在我的用户密钥绑定中覆盖了它们的密钥绑定。这是我的用户 默认值(OSX)。sublime键图 文件

    [
        { "keys": ["super+shift+/"], "command": "noop" }
    ]
    

    当我按按键顺序时,这会阻止软件包打开设置。如果我使用 unbound 对于命令,不包括命令文件包keybinding。但是,它不会出现在打开帮助搜索菜单的Mac层上。

    我可以通过直接修改包的密钥绑定文件来实现我想要的工作方式,但这将在下次包升级时被覆盖。

    有没有一种受支持的方法可以在不阻止键绑定冒泡到操作系统的情况下删除它?

    1 回复  |  直到 7 年前
        1
  •  2
  •   OdatNurd    7 年前

    以Sublime不会做出任何反应的方式完全删除密钥绑定的唯一方法是将其从 sublime-keymap 文件无论您是否要从 Default/Default (PLATFORM).sublime-keymap (每个平台都有一个)与Sublime一起提供,用于删除默认密钥绑定以及任何可能由第三方软件包添加的密钥绑定。

    只要钥匙还在 sublime键图 在任何地方,Sublime都会看到它并尝试使用它做一些事情,即使该键绑定到一个不存在的命令,例如 noop (尽管这是阻止默认键执行任何操作的好方法,如果这是您的最终目标)。

    编辑程序包文件

    解决这个问题的一种方法是直接修改打包文件本身,正如您已经提到的那样。在大多数情况下,这意味着打开相关 sublime-package 文件(这只是一个 zip 文件),修改文件的内容,然后重新打包。

    正如您已经指出的,这不是一个好方法,因为当更新包时,整个 sublime软件包 文件被删除,所以您的更改也将被丢弃。

    覆盖包文件

    更安全的方法是创建一个包覆盖文件。仅当相关软件包安装为 sublime软件包 文件,它涵盖了Sublime附带的所有软件包以及大多数第三方软件包。

    为此,您需要在Sublime中创建一个与包同名的文件夹 Packages 文件夹,您可以通过首选项菜单项访问该文件夹 Browse Packages... . 完成后,只提取要覆盖的文件并将其放置到该文件夹中,然后根据需要对其进行编辑。

    当Supreme从 sublime软件包 文件,在加载每个文件时,它会检查中是否存在任何类似名称的“未打包”文件 Packages/PackageName/ 文件夹如果存在这样的文件,则 sublime软件包 文件将被忽略,而使用未打包的文件。

    这意味着,即使软件包得到更新,由于您的解包版本仍然存在,它仍将被使用,因此您的更改将保持不变。

    创建此类文件的最简单方法是使用 PackageResourceViewer 包裹你可以用它 PackageResourceViewer: Open Resource 命令选项板中的命令,以查找并打开有问题的文件。如果您更改并保存文件,PRV将自动为您创建替代。

    此过程有几个注意事项:

    1. 如果所述软件包已在 包装 文件夹,无法创建替代。在这种情况下,除了在文件更新时警惕地重新修改文件之外,您没有什么可以做的。

      大多数软件包不受此限制,因为实际上很少有软件包需要这样安装(只有包含需要在Sublime之外公开的文件的软件包需要这样安装)。

      还要注意的是,Sublime Text 2只安装未打包的软件包,所以在这种情况下,您也不能这样做。

    2. 当包重写存在时,无论发生什么情况,它总是用来代替同名的打包文件。这有一个不幸的副作用,即如果包更新实际上以任何方式修改了您正在更新的文件,那么这些更改将在没有警告的情况下对您进行屏蔽。

      完整的警告/披露是我写的包 OverrideAudit Sublime软件包可以在每次更新软件包时向您发出警告,查看打包文件的版本是否比覆盖的版本更新,以便您知道发生了这种情况,并可以采取适当的措施。

    升华文本2注释

    您的问题是标记升华文本2和升华文本3。对于Sublime Text 2,上面关于需要完全删除密钥绑定以允许操作系统看到它的信息仍然有效。

    然而,据我所知,Sublime Text 2不支持包覆盖的想法,因为它总是安装所有未打包的包。因此,在这种特殊情况下,唯一的解决方案是修改打包的文件,并密切注意更改。

    目前,随着Sublime Text 3的正式发布,没有太多令人信服的理由继续使用ST2。如果您在2013年中后期或更晚的某个时间购买了ST2的许可证,则您的许可证应该对ST3有效。

    这一点尤其重要,因为ST2不再受支持,而在High Sierra,当苹果删除Python 2.6时,各种Sublime软件包将不再工作。