在英国键盘上,井号(#,在其他地方也称为磅号)有自己的键(上方带有波浪号)。
大概是因为它不是美国键盘上的标准键,所以它没有被列在文档中的命名键列表用于自定义按键。
有没有办法在创建自定义键绑定时引用它?
答案1
对你的问题的简短回答是,这是可能的,但是由于你的键盘布局和/或你可能没有想到 Sublime 映射键的方式存在一些逻辑上的“障碍”,你需要的绑定可能不是你所期望的。
然而,解释这个原因以及如何确定这个键(或任何其他键)的绑定需要是什么样子则有点复杂。
一般来说,Sublime 使用扫描码来确定您按下了哪个键。扫描码基于键盘上按键的位置,而不是实际创建的字符。
这样做的结果是,即使您按下的键不在美国键盘上,Sublime 也会将其视为美国键盘上的键;您在问题中提到的列表中的按键列表假定采用标准的美国键盘布局。
为了诊断键绑定问题或查看 Sublime 如何读取您的输入,您可以通过从View > Show Console
菜单中打开 Sublime 控制台并输入以下命令来打开输入日志记录:
sublime.log_input(True)
启用输入日志记录后,Sublime 将在控制台中报告有关其看到的每个输入事件的消息。输入日志记录将一直有效,直到您运行相同的命令False
或重新启动 Sublime。
您通常会看到下列内容之一:
chr evt: #
,它告诉你你按下了特点key evt: backspace
,它告诉你你按下了钥匙key evt
后面跟着chr evt
,这意味着你按下的键类似于死键即尝试给字符添加变音符号。- 如果该键确实已失效,或者 Sublime 之外的某些东西(例如操作系统)在 Sublime 有机会看到它之前吞噬了键盘事件,则什么也不会发生
要将键绑定到报告chr
事件的事物,您的映射应该仅包含字符:
{ "keys": ["#"], "command": "echo"},
要绑定报告为事件的键key
,您可以使用事件中报告的键,包括任何修饰符(control
以及ctrl
):
{ "keys": ["backspace"], "command": "echo"},
尽管如此,输入日志报告的内容可能并不总是您最初期望的那样,这是您原始问题的评论中提到的项目之一。
生成字符的按键组合会被报告为chr
事件,这意味着它们会考虑换档状态。不会生成字符的按键会被报告为key
事件,其中包括修饰键和按下的键。
强调这一点是因为它可能不是您最初期望的。
举例来说,在美国键盘布局上,#
共享3
一个键,是#
该键的移位版本。
因此:
- 3:
chr evt: 3 (0x33)
- shift+3:
chr evt: # (0x23)
这在逻辑上说得通;3
单独按下 键会得到一个文字3
,而使用 Shift 会得到一个井号字符。
但请注意以下几点:
- Ctrl+3:
key evt: control+3
- Ctrl+#:
key evt: control+3
- Ctrl+Shift+3:
shift+control+3
也就是说;为了获取#
字符,我需要按下 shift 键,但报告的键事件是针对该3
键的,因为那实际上是我按下的键。