Sublime text 3,将 + 和 - 从 increase decrease font_size 重新分配为 fold unfold

Sublime text 3, reasign the + and - away from increase decrease font_size to fold unfold

我想分配以下键绑定(您在用户键映射中设置)

{ "keys": ["ctrl+-"], "command": "fold" },
{ "keys": ["ctrl++"], "command": "unfold" }

但默认值似乎仍然存在

{ "keys": ["ctrl++"], "command": "increase_font_size" },
{ "keys": ["ctrl+="], "command": "increase_font_size" },
{ "keys": ["ctrl+keypad_plus"], "command": "increase_font_size" },
{ "keys": ["ctrl+-"], "command": "decrease_font_size" },
{ "keys": ["ctrl+keypad_minus"], "command": "decrease_font_size" },

我想删除所有缩放效果,所以我尝试了这个

{ "keys": ["ctrl++"], "command": "null" },
{ "keys": ["ctrl+="], "command": "null" },
{ "keys": ["ctrl+keypad_plus"], "command": "null" },
{ "keys": ["ctrl+-"], "command": "null" },
{ "keys": ["ctrl+keypad_minus"], "command": "null" }

但是按键仍然缩放文本,我在这里做错了什么? 也许我可以将它们从默认键盘映射中删除,但那是不可编辑的。

TL;DR 对你的问题的回答是,你在这里遇到问题的原因是你尝试 运行 的命令的默认绑定比你上面提到的更多(由于 Sublime 中的一些怪异之处,我认为我之前没有 运行 ),所以你覆盖了一些但不是所有的默认绑定。

为了更详细的解释,我们可以注意到,如果您从命令面板使用 View Package File,则可以打开 Default (Linux).sublime-keymapDefault (Windows).sublime-keymapDefault (OSX).sublime-keymap;其中之一(根据您的问题,您似乎在 Windows 上)是当您使用 Preferences > Key Bindings 时出现在键绑定左侧窗格中的文件,另外两个用于Sublime text 支持的其他平台。

如果我们搜索默认绑定而不是您要重新定义的键,而是搜索绑定到这些键的命令,我们会得出以下结果:

Windows

    { "keys": ["ctrl++"], "command": "increase_font_size" },
    { "keys": ["ctrl+="], "command": "increase_font_size" },
    { "keys": ["ctrl+keypad_plus"], "command": "increase_font_size" },
    { "keys": ["ctrl+-"], "command": "decrease_font_size" },
    { "keys": ["ctrl+keypad_minus"], "command": "decrease_font_size" },

    { "keys": ["ctrl+equals"], "command": "increase_font_size" },
    { "keys": ["ctrl+shift+equals"], "command": "decrease_font_size" },
    { "keys": ["ctrl+shift+keypad_plus"], "command": "decrease_font_size" },

Linux

    { "keys": ["ctrl++"], "command": "increase_font_size" },
    { "keys": ["ctrl+="], "command": "increase_font_size" },
    { "keys": ["ctrl+-"], "command": "decrease_font_size" },

OSX

    { "keys": ["super+equals"], "command": "increase_font_size" },
    { "keys": ["super+plus"], "command": "increase_font_size" },
    { "keys": ["super+minus"], "command": "decrease_font_size" },

此处看到的绑定的一个区别是 Windows 和 Linux 使用 Ctrl 进行这些绑定,而 MacOS 使用 Super.

然而,还有一些其他事情也值得注意:

  • Linux 将命令绑定到 +-=
  • MacOS 绑定到 plusminusequals
  • Windows 绑定到 +-=equals(加上 keypad 等价物)

这里让您感到困惑的是 Windows 还使用 equals 键绑定命令,如上所示,根据您的问题,您没有覆盖。

=equals(以及其他对)之间存在内部等价性,导致 Sublime 选择 equals 而不是 =;您没有覆盖使用 equals 的命令版本,因此它仍然适用。

要真正覆盖默认值,您需要为键重新分配所有可能的绑定,看起来像这样:

{ "keys": ["ctrl+-"], "command": "fold" },
{ "keys": ["ctrl+="], "command": "unfold" },
{ "keys": ["ctrl++"], "command": "unfold" },
{ "keys": ["ctrl+equals"], "command": "unfold" },

{ "keys": ["ctrl+keypad_plus"], "command": "null" },
{ "keys": ["ctrl+keypad_minus"], "command": "null" },

{ "keys": ["ctrl+shift+equals"], "command": "null" },
{ "keys": ["ctrl+shift+keypad_plus"], "command": "null" },

为了完整性,这将 ctrl+=ctrl+equals 绑定到同一个命令,即使只有 ctrl+equals 总是会触发;这是一个很好的提醒,有多个键可以执行此操作。

我们也将 ctrl++ 绑定到该命令。但是,这通常只会触发具有不在数字小键盘上(如果有)的专用 + 键的键盘。

这是因为在美式键布局(Sublime 内部一直使用的布局)中,+ 键是 = 键的移位状态;因此你必须按 Shift 才能输入它,但 Sublime 似乎把它当作键 ctrl+shift+=;也就是说,它看到键及其所有修饰符,而不是带有 ctrl 修饰符的键的移位状态。