跳至内容

键绑定

键绑定将按键映射到命令。

文件格式

键绑定存储在 .sublime-keymap 文件中,并使用 JSON 定义。键映射文件可以位于包中的任何位置。

键映射文件命名

任何名为 Default.sublime-keymap 的键映射始终在所有平台上应用。

此外,每个平台可以选择拥有自己的键映射

  • Default (Windows).sublime-keymap
  • Default (OSX).sublime-keymap
  • Default (Linux).sublime-keymap

Sublime Text 会忽略任何名称不符合上述模式的 .sublime-keymap 文件。

键绑定的结构

键映射是键绑定的数组。这些都是键绑定中的有效元素

keys : 一个区分大小写的按键数组。可以使用 + 符号指定修饰符。可以通过向数组添加元素来构建和弦(例如,["ctrl+k","ctrl+j"])。模糊和弦通过超时来解决。

command : 要执行的命令的名称。

args : 要传递给 command 的参数字典。键必须是 command 的参数名称。

context : 确定特定上下文的条件数组。所有条件必须评估为 true,上下文才能处于活动状态。有关更多信息,请参见下面的 上下文结构

以下是一个示例

json
{ "keys": ["shift+enter"], "command": "insert_snippet", "args": {"contents": "\n\t$0\n"}, "context":
   [
      { "key": "setting.auto_indent", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
   ]
}

上下文结构

key : 要查询其值的上下文的名称。

operator : 要对 key 的值执行的测试类型。默认为 equal

operand : key 返回的结果将针对此值进行测试。

match_all : 要求测试对所有选择都成功。默认为 false

上下文键

插件可以提供任意键。因此,本节仅介绍 Sublime Text 自身提供的键。

auto_complete_visible : 如果自动完成列表可见,则返回 true

has_next_field : 如果有下一个片段字段可用,则返回 true

has_prev_field : 如果有上一个片段字段可用,则返回 true

last_command : 返回最后运行的命令的名称。

num_selections : 返回选择的数量。

overlay_visible : 如果任何叠加层可见,则返回 true

panel_visible : 如果任何面板可见,则返回 true

following_text : 对选定文本及其后的文本(直到行尾)进行测试。

preceding_text : 对行上的文本(直到并包括选择)进行测试。

selection_empty : 如果选择是空区域,则返回 true

setting.x : 返回 x 设置的值。x 可以是任何字符串。

text : 将测试范围限制在选定的文本。

selector : 返回当前作用域的名称。

panel_has_focus : 如果面板具有输入焦点,则返回 true

panel : 如果作为 operand 给定的面板可见,则返回 true

上下文运算符

equal, not_equal : 测试相等性。

regex_match, not_regex_match : 与正则表达式匹配(完全匹配)。

regex_contains, not_regex_contains : 与正则表达式匹配(部分匹配)。

可绑定键

键绑定中的键可以通过符号或特殊键的名称来指定。符号不能与修饰符组合。例如,B 将捕获任何插入 B 字符的键序列,但 ctrl+B 无效,需要写成 ctrl+shift+b

以下是特殊键的名称列表

upkeypad0f1
downkeypad1f2
rightkeypad2f3
leftkeypad3f4
insertkeypad4f5
homekeypad5f6
endkeypad6f7
pageupkeypad7f8
pagedownkeypad8f9
backspacekeypad9f10
deletekeypad_periodf11
tabkeypad_dividef12
enterkeypad_multiplyf13
pausekeypad_minusf14
escapekeypad_plusf15
spacekeypad_enterf16
clearf17
sysreqbrowser_backf18
breakbrowser_forwardf19
context_menubrowser_refreshf20
browser_stopf21
browser_searchf22
browser_favoritesf23
browser_homef24

修饰符

  • shift
  • ctrlcontrol
  • alt
  • super (**Windows**:Windows 键,**MacOS**:Command 键)
  • primary (**Windows**:Control 键,**MacOS**:Command 键)
  • command (**仅限 MacOS**)
  • option (**仅限 MacOS**:与 alt 相同)

任意字符绑定

<character>(带尖括号,无修饰符)添加绑定会导致 Sublime Text 为其提供的**所有**字符绑定给定的命令。因此,您应该只将此绑定与伴随的上下文过滤器一起使用。

然后,指定的命令将接收一个额外的 character 参数,其中包含捕获的字符。

关于可绑定键的警告

如果您正在开发一个包,请记住这一点

  • Ctrl+Alt+<alphanum> 绝不应在任何 Windows 键绑定中使用。
  • Option+<alphanum> 绝不应在任何 macOS 键绑定中使用。

在这两种情况下,否则用户插入非 ASCII 字符的能力将受到影响。

最终用户可以自由地重新映射任何键组合。

命令模式

Sublime Text 提供了一个 command_mode 设置来阻止按键发送到缓冲区。例如,这对于模拟 Vim 的模态行为很有用。

不打算用于命令模式的键绑定(通常是所有键绑定)应包含这样的上下文

json
{"key": "setting.command_mode", "operand": false}

这样,合法使用命令模式的插件就可以定义适当的键绑定,而不会受到干扰。

键绑定的优先级顺序

键映射文件中的键绑定从底部到顶部进行评估。第一个匹配的上下文获胜。

保持键映射井然有序

Sublime Text 在 Packages/Default 下提供默认键映射。其他包可能包含它们自己的键映射文件。

建议将您的个人键映射文件存储在Packages/User目录中。

另请参阅

合并和优先级

国际键盘

由于 Sublime Text 将键名映射到物理键的方式,键名可能与除美式英语以外的键盘布局中的物理键不对应。

故障排除

要启用与键映射相关的日志记录,请参阅文档了解

  • sublime.log_commands(flag)
  • sublime.log_input(flag)

这些可能有助于调试键映射。当键组合不触发输入日志时,另一个应用程序或您的操作系统可能在键到达 Sublime Text 之前就捕获了该键。