在 Eclipse 中可以大量定制键盘的功能。在 Eclipse 内,通过指定击键和键序列来调用特定命令。

击键、键序列和键绑定

“击键”就是按键盘上的某一键,同时可选择按住以下一个或多个组合键:CtrlAlt(在 Macintosh 上是 Option)、ShiftCommand(仅在 Macintosh 上)。例如,按住 Ctrl 而后按下 A 会组成击键 Ctrl+A。按下这些组合键本身并不构成击键。

“键序列”就是一个或多个击键。传统上,Emacs 将两个或三个击键键序列指定给特定的命令。例如,在 emacs 中指定给 Close All 的正常键序列为 Ctrl+X Ctrl+C。要输入此键序列,可按击键 Ctrl+X,随后按击键 Ctrl+C。虽然 Eclipse 支持任意长度的键序列,但建议键盘快捷键不要超过四个击键。

“键绑定”是将键序列指定给命令。

方案

“方案”是一组绑定。Eclipse 提供了两个方案:

缺省值方案包含一组通用绑定,在许多情况下,可被用户认为是传统的键序列。例如,Ctrl+A 被指定为 Select All,而 Ctrl+S 被指定为 Save

Emacs 方案包含 Emacs 用户熟悉的一组键绑定。例如,Ctrl+X H 被指定给 Select All,而 Ctrl+X S 被指定给 Save

了解 Emacs 方案为什么是“扩展缺省值”很重要。Emacs 方案不是一组完整的绑定,它与缺省值方案不同。但是,它尽可能地借用缺省值方案的内容,只是在定义显式 Emacs 样式绑定方面不同于缺省值配置。通常,只有熟知的命令(例如,Select AllSave 等等)才具有与它们相关联的特定 Emacs 键序列。

用户通过在键首选项页面上更改“方案”设置来决定哪个方案最适合。如果用户选择缺省值方案,则将忽略所有 Emacs 绑定。如果用户选择 Emacs 方案,则显式 Emacs 样式键序列指定优先于缺省值方案中任何冲突的指定。

上下文

根据 Eclipse 当前上下文的不同,键绑定会有所不同。

活动的部件有时可能是一个 Java 文件编辑器(例如,在以下情况下就是如此:另外一组键序列指定可能会比活动部件是 html 文件编辑器的情况更合适)。作为特定示例,通常将 Ctrl+B 指定给诸如 Java 文件编辑之类的上下文中的 Build,而将 Ctrl+B 指定给诸如 HTML 文件编辑之类的上下文中的 Make Text Bold。此上下文通常通过活动部件来确定,但它也可能会受活动窗口或对话框影响。如果活动部件不选择特定上下文,则工作台会将活动上下文设置为在窗口中

Eclipse 包括九个不同的上下文。它们是:

与配置很相似,上下文可以扩展其它上下文。例如,编辑 Java 源代码上下文从编辑文本上下文借用键绑定,而后者又从在窗口中上下文借用键绑定。

注意:建议不要将键绑定提升为它扩展的上下文。例如,建议不要将编辑文本键绑定移至在对话框和窗口中上下文。这可能会产生意外的结果。

一些键绑定在多个对话框中工作是有可能的。这些键绑定被指定给在对话框和窗口中上下文。此类键绑定的一个示例是“cut”的键绑定。可以更改这些键绑定。例如,可以使用 Ctrl+X 作为对话框中 cut 的键绑定,但使用 trl+W 作为窗口中 cut 的键绑定。

平台和语言环境

键绑定也会随平台和语言环境的不同而有所不同。在 Macintosh 平台上,Command+S(而不是通常的 Ctrl+S)被指定给 Save。在“中文”语言环境(zh)中,Alt+/(而不是通常的“Ctrl+空格”)被指定给 Content Assist

当前平台和语言环境是在 Eclipse 启动时确定的,在 Eclipse 实例的进行过程中不会有改变。

定制键绑定

对于多个击键键序列、方案和上下文,在定制键绑定时要考虑很多事项。为了使工作更易于进行,所有键定制都是在“键”首选项页面上完成的。

选择“键”首选项页面的窗口 > 首选项 > 常规 > 键

将 Emacs 显示为活动配置且选择了 Close 命令的“键”首选项页面

在此示例中,我们已选择将 Emacs 作为方案,并且已从命令的列表中选择命令 Close。将显示有关此命令的信息以及它的当前键绑定。

注意,Close 具有三个指定给它的键序列:Ctrl+F4Ctrl+W(在缺省值方案中)和 Ctrl+X K(在 Emacs 方案中)。这两个配置都是在在窗口中上下文中指定的。因此,如果用户将方案设置为缺省值,则会将 Ctrl+F4Ctrl+W(而非 Ctrl+X K)指定给 Close。但是,如果用户将方案设置为 Emacs,则会将 Ctrl+X K 指定给 Close。另外,由于 Emacs 方案也从缺省值方案借用键绑定,所以也会将 Ctrl+F4Ctrl+W 指定给 Close(假定这些键绑定尚未被指定给 Emacs 方案中的其它命令)。在此示例中,“Ctrl+W”被绑定至 Emacs 模式中的 Cut

在指定给 Close 的键序列的列表下面,有一个地方用来添加或除去键绑定。缺省情况下,选择在窗口中上下文。

输入键序列 Ctrl+W,这样“添加”按钮就变为启用的。另外,已对其指定键序列 Ctrl+W 的所有命令的列表都显示在“添加”按钮下面。我们可以看到 Ctrl+W 当前被指定给在窗口和对话框中上下文中的命令 Cut。单击“添加”按钮将 Ctrl+W 指定给 Close

键绑定的动态性质

键绑定是由插件提供的,在 Eclipse 中,可以添加或除去插件。这会导致添加或除去由这些插件所声明的键绑定。Eclipse 以某种方法存储定制键绑定以补偿这一点。考虑上面的示例,Ctrl+Alt+W 已在 Emacs 模式中指定给 Cut。考虑用户安装新的插件,该插件将 Ctrl+Alt+W 指定给特定命令。Eclipse 将保留用户对 Cut 的指定。

冲突解决

只有有限数量的简单的常用击键可用于指定给众多命令。我们看到的有模式、上下文、平台和语言环境,所有这些分区键序列都指定到相互不冲突的域中。如果上下文不存在,则考虑上面的 Ctrl+B 的情况。一个插件会将 Ctrl+B 指定给 Build,而另一个插件则会将 Ctrl+B 指定给 Make Bold Text。Eclipse 将如何正确解决此冲突呢?

虽然通过应用上面的机制大大减少了冲突,但是它们仍然可能发生。两个插件(相互无关)可将同一键序列指定给具有相同上下文、模式、平台和语言环境的不同命令。考虑插件是否已在在窗口中上下文和缺省值模式中将 Ctrl+F4 指定给它的其中一条命令。这与在同一上下文和模式中将 Ctrl+F4 指定给 close(关闭)命令的 Eclipse 直接冲突。

这就是一个冲突。同时调用这两条命令是不正确的,只选择这两条命令中的其中一条来接收击键也是不正确的。唯一正确的做法是忽略两个键绑定,使 Ctrl+F4 在此上下文和模式中确实不起作用。

这些冲突类型可以由用户显式地将键序列指定给其中一条命令来解决。

另一种冲突类型可由多个击键键序列导致。例如,在 Emacs 模式中,有许多多个击键键序列以击键 Ctrl+X 开头。Ctrl+X K 被指定给 CloseCtrl+X H 被指定给 Select All

如前面所提到的那样,Emacs 模式从缺省值模式借用键绑定。在缺省值模式中,Ctrl+X 被指定给 Cut。虽然 Emacs 模式不显式地重定义 Ctrl+X,但是作为该配置的许多键绑定的一部分,按 Ctrl+X 则是必需的。在 Emacs 模式中,当按 Ctrl+X 时,您就在输入许多可能的指定键序列中的其中一个。您不会期望此时调用 Cut 操作。

对于此冲突类型,规则是将忽略指定给 CutCtrl+X 键序列。否则,就不可能完成 Emacs 配置中的许多键绑定。

相关概念
Eclipse 中的辅助功能部件
更改键绑定
联机帮助系统

相关参考
Eclipse 中的字体和颜色设置