可以在 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 编辑器作用域从文本编辑器作用域借用键绑定,而后者又从全局作用域借用键绑定。

平台和语言环境

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

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

定制键绑定

对于多击键键序列、配置和作用域,在定制键绑定时要记住很多事项。要使工作更易于进行,所有键定制都是在“键”首选项页面上完成的。

选择“键”首选项页面的窗口 > 首选项 > 工作台 > 键

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

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

注意,Close 具有两个指定给它的键序列:Ctrl+F4(在标准配置中)和 Ctrl+X K(在 Emacs 配置中)。两个都是在全局作用域中指定的。这样,如果用户将活动配置设置为标准,则会将 Ctrl+F4(而非 Ctrl+X K)指定给 Close。但是,如果用户将活动配置设置为 Emacs,则会将 Ctrl+X K 指定给 Close。另外,由于 Emacs 配置也从标准配置借用键绑定,所以也会将 Ctrl+F4 指定给 Close(假定 Ctrl+F4 尚未被指定给 Emacs 配置中的另一个命令)。

在指定给 Close 的键序列的列表下面,有一个地方用来添加或除去键绑定。缺省情况下,它选择的作用域为全局,而选择的配置则为用户活动配置(回忆一下前面我们将此配置更改为 Emacs 的情形)。

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

“键”首选项页面 — 将键序列 Ctrl+W 指定给命令 Close

现在我们看到 Ctrl+W 被添加至指定给 Close 的键序列的列表。请留意小“更改”图 表示“更改”的小图,它指示此键绑定更改现有键绑定。新的键绑定有效地除去了 Ctrl+W 的上一个指定,即指定给 Cut。我们可以通过选择新的键绑定并单击“除去”按钮来在任何时候除去此更改。将会自动恢复 Ctrl+W 的上一个指定,即指定给 Cut

显示新的指定的“键”首选项页面(包括“更改”图)

通过选择命令 Cut,可以看到更改的结果。请留意小“减号”图 表示“减号”的小图,它指示除去了键绑定。可以在任何时候通过在此处选择此键绑定并单击“恢复”按钮来恢复此键绑定(从而有效地除去在前一步骤中添加的新键绑定)。

显示 Cut 命令的“键”首选项页面

也许,我们在 Emacs 配置中选择将另一个键(比如,Ctrl+Alt+W)指定给 Cut。以上述前一种方式添加它会产生以下结果。请留意小“加号”图 表示“加号”的小图,它指示键绑定由用户添加,且先前未指定此键绑定。

将键序列 Ctrl+Alt+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 在此作用域和配置中确实不起作用。

此性质的冲突显示在“键”首选项页面中,如下所示。请留意红色文本和词语“[冲突]”(conflict):

显示键序列 Ctrl+F4 冲突的“键”首选项页面

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

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

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

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

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

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

Copyright IBM Corporation and others 2000, 2003. All Rights Reserved.