macos - 如何取消映射 Sublime Text 键绑定(bind),以便发生标准的os操作?

标签 macos sublimetext3 sublimetext2 keyboard-shortcuts sublimetext

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

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

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

基于与How to unbind a key binding in Sublime Text 2?相关
我继续进行,并在我的用户键盘绑定(bind)中覆盖了它们的键盘绑定(bind)。这是我的用户Default (OSX).sublime-keymap文件。
[
    { "keys": ["super+shift+/"], "command": "noop" }
]

当我按按键顺序时,这会使程序包从打开设置中停止。如果我对命令使用unbound(不包括命令文件包的键盘绑定(bind)),则行为相同。但是,它并不会弹出Mac层,后者会打开帮助搜索菜单。

通过直接修改软件包的 key 绑定(bind)文件,我可以按照我想要的方式工作,但是下次软件包升级时,它将被覆盖。

有一种受支持的方法来删除键绑定(bind),而又不会阻止它从气泡上升到操作系统吗?

最佳答案

以Sublime不会做出任何 react 的方式完全删除键绑定(bind)的唯一方法是将其从sublime-keymap文件中删除。无论您是要从Sublime附带的Default/Default (PLATFORM).sublime-keymap(每个平台都有一个)中完全删除文件以删除默认 key 绑定(bind)还是第三方软件包可能添加的任何文件,都是如此。

只要 key 保留在sublime-keymap中的任何位置,即使 key 已绑定(bind)到不存在的命令(例如noop),Sublime都会看到它并尝试对其进行处理(尽管这是阻止a如果这是您的最终目标,则不要执行任何操作的默认 key )。

编辑包文件

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

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

覆盖包文件

一种更安全的方法是创建一个程序包覆盖文件。仅当有问题的软件包作为sublime-package文件安装时才有效,该文件涵盖了Sublime随附的所有软件包以及大多数第三方软件包。

为此,您将在Sublime Packages文件夹中以与包相同的名称创建一个文件夹,您可以通过“首选项”菜单项Browse Packages...来获得该文件夹。完成后,仅提取要覆盖的文件并将其放入该文件夹,然后根据需要进行编辑。

当Sublime从sublime-package文件加载程序包时,在加载每个文件时,它会检查Packages/PackageName/文件夹中是否存在任何类似名称的“未打包”文件。如果存在这样的文件,则sublime-package文件内部的版本将被忽略,而改用解压缩的文件。

这意味着即使软件包已更新,由于解压缩后的版本仍然存在,因此仍将使用它,因此您的更改将保留在原位。

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

此过程有两个注意事项:

  • 如果问题包已在Packages文件夹中解压,则无法创建替代。在这种情况下,除了在文件更新时谨慎地重新修改文件外,您无能为力。

    大多数软件包不会受到此限制,因为实际上很少需要以这种方式安装(只有包含需要在Sublime外部公开的文件的软件包才需要以这种方式安装)。

    还要注意,Sublime Text 2仅以未打包的形式安装软件包,因此在这种情况下,您也不能这样做。
  • 如果存在程序包替代,则无论使用哪种方式,它总是代替同名的打包文件。不幸的是,如果软件包更新实际上以任何方式修改了您要更新的文件,这些更改都会被屏蔽,而不会发出警告。

    请问我是写程序包的人的完整警告/披露吗,Sublime的OverrideAudit程序包可以通过每次检查软件包的更新来查看打包文件的版本是否比您覆盖的版本新,从而警告您版本,以便您知道这种情况的发生,并可以采取适当的措施。

  • Sublime Text 2笔记

    您的问题是标记Sublime Text 2和Sublime Text3。在Sublime Text 2的情况下,上述有关需要完全删除键绑定(bind)以允许OS看到的信息仍然存在。

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

    至此,Sublime Text 3正式发布,并没有太多令人信服的理由继续使用ST2。如果您在2013年中后期或以后购买了ST2许可证,则该许可证应对ST3有效。

    这一点特别重要,因为不再支持ST2,并且自从Apple删除Python 2.6的High Sierra起,各种Sublime软件包现在将不再起作用。

    关于macos - 如何取消映射 Sublime Text 键绑定(bind),以便发生标准的os操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48548886/

    相关文章:

    javascript - Eslint:如何在 Node.js 中禁用 "unexpected console statement"?

    css - Sublime Text 2 上的自动前缀错误

    sublimetext2 - 如何清除 Sublime 2 中的 SublimeREPL 窗口

    macos - flutter 医生 : ERROR: Could not connect to lockdownd, 错误代码 -21

    ios - 通过没有 TLS 或类似协议(protocol)的套接字与 localhost 通信是否安全?

    ( 后的正则表达式匹配数

    python - 获取 Sublime Text 3 上的所有作用域名称

    settings - 每个项目的 Sublime Text 2 设置

    macos - FMOD Ex 掉落声音,最终变得无声

    macos - Vagrant 不会仅转发端口 80