键绑定

Sublime Text 中的键绑定由以 .sublime-keymap 结尾的文件定义。键绑定使用 JSON,顶层结构为数组。每个绑定都是一个 JSON 对象。

示例🔗

以下是一个 .sublime-keymap 文件格式的示例。

[
    {
        "keys": ["super+ctrl+m"],
        "command": "convert_syntax"
    },
    {
        "keys": ["super+shift+9"],
        "command": "set_layout",
        "args":
        {
            "cols": [0.0, 0.33, 0.66, 1.0],
            "rows": [0.0, 0.33, 0.66, 1.0],
            "cells":
            [
                [0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1],
                [0, 1, 1, 2], [1, 1, 2, 2], [2, 1, 3, 2],
                [0, 2, 1, 3], [1, 2, 2, 3], [2, 2, 3, 3]
            ]
        }
    },
    {
        "keys": ["super+alt+up"],
        "command": "noop",
        "context":
        [
            {"key": "panel", "operand": "find"},
            {"key": "panel_has_focus"},
        ]
    }
]

绑定🔗

每个键绑定需要两个键,"keys""command"。要将参数传递给命令,应指定 "args" 键。要将键绑定限制在特定情况下,必须包含 "context" 键。

"keys"🔗

"keys" 值必须是一个字符串数组,其中每个字符串包含一个按键,由一个键和任何修饰符组成。当数组中存在多个按键时,只有按顺序执行这些按键才会调用命令。

用于 Escape 键的键绑定

{
    "keys": ["escape"],
    "command": "noop"
}

用于带有修饰符 Ctrl 的键 A 的键绑定

{
    "keys": ["ctrl+a"],
    "command": "noop"
}

修饰符🔗

以下修饰符可以与每个按键的键名组合使用。

  • ctrl

  • control

  • alt

  • option - Mac

  • command - Mac

  • super - Windows 和 Linux 上的 Windows 键,或 Mac 上的

  • primary - Windows 和 Linux 上的 Ctrl,或 Mac 上的

键名🔗

键名由(非移位)字符指定

打印在键上,或键名

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
0
1
2
3
4
5
6
7
8
9
,
.
\
/
;
'
`
+
-
=
[
]
up
down
left
right
insert
home
end
pageup
pagedown
backspace
delete
tab
enter
pause
escape
space
keypad0
keypad1
keypad2
keypad3
keypad4
keypad5
keypad6
keypad7
keypad8
keypad9
keypad_period
keypad_divide
keypad_multiply
keypad_minus
keypad_plus
keypad_enter
clear
f1
f2
f3
f4
f5
f6
f7
f8
f9
f10
f11
f12
f13
f14
f15
f16
f17
f18
f19
f20

"command"🔗

"command" 键指定要执行的命令的名称

检测到按键时执行。该命令可以是内置命令,也可以是插件实现的命令。

{
    "keys": ["ctrl+a"],
    "command": "select_all"
}

目前还没有所有内置命令的编译列表。许多命令的名称可以通过查看 Default ({PLATFORM_NAME}).sublime-keymap 文件中的 Default/ 包来找到。

"args"🔗

要发送到 "command" 键的参数可以通过 "args" 键下的 JSON 对象指定。

{
    "keys": ["primary+shift+b"],
    "command": "build",
    "args": {"select": true}
}

"context"🔗

为了允许键绑定根据情况的不同而做出不同的反应,"context" 键允许指定一个或多个必须评估为真的条件,以便键绑定处于活动状态。

context” 值是一个对象数组。每个对象必须包含一个 key 键,该键具有字符串值。键是预定义值列表中的一个,可以使用 operatoroperand 进行比较。

如果 key 支持相等运算符,则 operator 必须是以下之一:equalnot_equal。对于匹配,它必须是以下之一:regex_matchnot_regex_matchregex_containsnot_regex_contains。默认的 operatorequal,默认的 operandtrue

对于处理选择的 key 值,支持一个额外的键 match_all。默认值为 false,这意味着条件只需要对单个选择求值为真。如果 match_alltrue,则条件必须对所有选择求值为真。

以下是有效的上下文 key 值列表

操作数

运算符

匹配所有

描述

"auto_complete_visible"

布尔值

相等

如果自动完成下拉菜单可见

"eol_selector"

字符串

相等

一个 选择器,用于匹配当前行末尾的范围名称

"following_text"

字符串

匹配

选择后的文本

"has_next_field"

布尔值

相等

如果选择是片段中的一个字段,并且存在后续字段

"has_prev_field"

布尔值

相等

如果选择是片段中的一个字段,并且存在前一个字段

"is_recording_macro"

布尔值

相等

如果用户当前正在录制宏

"last_command"

字符串

相等

最后运行的命令的名称

"last_modifying_command"

字符串

相等

最后运行的修改缓冲区的命令的名称

"num_selections"

整数

相等

当前缓冲区中的选择数量

"popup_visible"

布尔值

相等

如果当前正在显示弹出窗口

"preceding_text"

字符串

匹配

选择前的文本

"read_only"

布尔值

相等

如果缓冲区被标记为只读

"selection_empty"

布尔值

相等

如果当前选择不包含任何字符

"selector"

字符串

相等

一个 选择器,用于匹配选择的范围名称

"text"

字符串

匹配

选择的文本

"panel"

字符串

相等

当前面板的名称

"panel_visible"

布尔值

相等

如果面板可见

"panel_has_focus"

布尔值

相等

如果面板可见且具有焦点

"overlay_visible"

布尔值

相等

如果快速面板可见

用户绑定🔗

用户可以通过在他们的 Packages/User/ 目录中创建一个名为 Default.sublime-keymap 的文件来自定义他们的键绑定。

例如,以下操作将创建一个键绑定,用于通过 Ctrl+Shift+` 显示未保存的更改(如果有)。

[
    {
        "keys": ["ctrl+shift+`"],
        "command": "diff_changes"
    }
]