キーボードの機能は、
「一般」>「キー」設定ページを使用して Eclipse で広範囲にカスタマイズすることができます。
Eclipse では、キー・ストロークおよびキー・シーケンスは特定のコマンドを起動するために割り当てられています。
「キー・ストローク」とはキーボードを押すことで、Ctrl、Alt (前面)、(Macintosh では
Option)、Shift、または Command (Macintosh のみ) などの修飾キーを 1 つ以上押しながら
使う場合もあります。
例えば、Ctrl を押しながら A を押すと、キー・ストロークは Ctrl+A となります。
修飾キー自体を押してもキー・ストロークを構成することはありません。
「キー・シーケンス」とは、1 つ以上のキー・ストロークのことです。
従来より、Emacs は、2 つまたは 3 つのキー・ストローク・キー・シーケンスを特定のコマンドに割り当てていました。
例えば、Emacs で「すべて閉じる」に割り当てられている通常のキー・シーケンスは Ctrl+X Ctrl+C です。
このキー・シーケンスを入力するには、キー・ストローク Ctrl+X を押した後、キー・ストローク Ctrl+C を押します。
Eclipse では任意の長さのキー・シーケンスがサポートされますが、
キーボード・ショートカットは、4 キー・ストロークの長さ (またはそれ以下) を推奨します。
「キー・バインディング」とは、キー・シーケンスをコマンドに割り当てたものです。
「スキーム」とはバインディングのセットのことです。 Eclipse には、以下の 2 つのスキームが組み込まれています。
デフォルト・スキームは、一般的なセットのバインディングを含み、多くの場合、よく知られているコマンドの従来のキー・シーケンスとして認識することができます。例えば、Ctrl+A は「すべて選択」に、そして Ctrl+S は「保存」に割り当てられています。
Emacs スキームには、Emacs ユーザーによく知られているキー・バインディングのセットが入っています。
例えば、Ctrl+X H は「すべて選択」に、そして Ctrl+X
S は「保存」に割り当てられています。
Emacs スキームがなぜ「デフォルトを拡張」したものであるかを理解することは重要です。
Emacs スキームは、デフォルト・スキームのような、バインディングの完全セットではありません。
正しくは、可能な部分についてはデフォルト・スキーマから借用し、デフォルト・スキーマとは異なるバインディングについてのみ、明示的な Emacs スタイルのバインディングを定義しています。
一般に、「すべて選択」、「保存」などのようによく知られている
コマンドのみに、特定の Emacs キー・シーケンスが関連付けられています。
キー設定ページの「スキーム」設定を変更することにより、適切なスキームを選択します。デフォルト・スキームを選択した場合は、すべての Emacs バインディングが無視されます。Emacs スキームを選択した場合は、明示的な Emacs スタイルのキー・シーケンス割り当てが、デフォルト・スキームの競合する割り当てよりも優先されます。
キー・バインディングは、Eclipse の現行コンテキストによって異なる場合があります。
アクティブ・パーツが Java ファイル・エディターである可能性も時にはあります。
例えば、アクティブ・パーツが HTML ファイル・エディターである場合よりも、
別のキー・シーケンス割り当てセットの方が適する場合などです。
具体的な例として、HTML ファイル編集などのコンテキストでは Ctrl+B
は「テキストを太字にする」に割り当てられますが、Java ファイル編集などのコンテキストでは
Ctrl+B は一般的に 「ビルド」に割り当てられます。
このコンテキストは通常、アクティブ・パーツによって決定されますが、
アクティブなウィンドウやダイアログによっても影響されます。
アクティブ・パーツが特定のコンテキストを選択しない場合、
ワークベンチはアクティブなコンテキストをウィンドウ に設定します。
Eclipse には、さまざまなコンテキストがあります。 以下の例を示します。
構成とほぼ同様に、コンテキストは他のコンテキストを拡張することができます。 例えば、Java ソースの編集 コンテキストは、テキストの編集 コンテキストからキー・バインディングを借用し、同様にテキストの編集 コンテキストは、ウィンドウ ・コンテキストからキー・バインディングを借用します。
注: キー・バインディングを、キー・バインディングが拡張するコンテキストにプロモートすることは推奨しません。 例えば、テキストの編集 のキー・バインディングをダイアログまたはウィンドウ ・コンテキストに移動することは推奨しません。 これは、予期しない結果を生じる可能性があります。
キー・バインディングの一部をダイアログで機能させることは可能です。 それらのキー・バインディングは、ダイアログまたはウィンドウ ・コンテキストに割り当てられます。 そのようなキー・バインディングの 1 つの例は、「切り取り」のキー・バインディングです。 これらのキー・バインディングを変更することは可能です。 例えば、Ctrl+X をダイアログで切り取りとし、Ctrl+W をウィンドウで切り取りとすることができます。
キー・バインディングは、プラットフォームおよびロケールによっても異なります。
Macintosh プラットフォームでは、通常の Ctrl+S の代わりに、command+S が
「保存」に割り当てられています。
中国語ロケール (zh) では、通常の Ctrl+Space の代わりに、Alt+/ が
「コンテンツ・アシスト」に割り当てられています。
現行プラットフォームおよびロケールは Eclipse 開始時に決定され、Eclipse インスタンスの進行中に変更されることはありません。
マルチ・ストローク・キー・シーケンス、スキーム、およびコンテキストとともに、
キー・バインディングをカスタマイズする際には多くの注意点があります。
より簡単に行うには、すべてのキー・カスタマイズを
「一般」>「キー」設定ページで行います。
このサンプルでは、CTRL+5 を「バージョン情報」コマンドにバインドします。デフォルトにより、すべてのキー・バインディング候補が「キー」設定ページに表示されます。「ヘルプ」カテゴリーにリストされている「バージョン情報」コマンドを表示できます。 「バインディング」テキスト・ボックスにフォーカスを置き、コマンドを実行するときのようにして CTRL と 5 を押すことにより、コマンドをバインドできます。

CTRL+5 と入力すると、「バージョン情報」のバインディングが作成されます。右端の列に U が表示されていることから、 これはユーザー・バインディングであることが分かります。 別のキーとの競合がある場合は、この列に C も表示されます。このバインディングは、デフォルト・コンテキストの「ウィンドウ」にあります。 「場合」コンボ・ボックスを使用すれば、キー・バインディング・コンテキストを変更する (例えば、このバインディングを「テキストの編集」に移動する) ことができます。
2 番目のキー・バインディングを「バージョン情報」に追加する場合は、「コマンドのコピー」ボタンを使用して 2 番目のコマンド・エントリーを作成し、別のキーをバインドできます。バインディングを削除する場合は、「バインディングの削除」ボタンを使用するか、または「バインディング」テキスト・ボックスにフォーカスを置いて Backspace を押すことができます。
キー・バインディングはプラグインによって提供されています。
Eclipse では、プラグインを追加または削除することができます。
これにより、これらのプラグインで宣言されたキー・バインディングが、追加または削除されることがあります。
Eclipse では、カスタム・キー・バインディングはこれを補正する方法で保管されます。
Default スキームで、CTRL+6 が「バージョン情報」に割り当てられている、上の例を考えてみましょう。CTRL+6 を特定のコマンドに割り当てる新規プラグインをインストールすると仮定します。Eclipse は、「バージョン情報」への割り当てを保持します。
多くのコマンドに対して割り当て可能で、簡単な共通キー・ストロークは数に限りがあります。
スキーム、コンテキスト、プラットフォーム、およびロケールがすべて、
相互に競合しないドメインにキー・シーケンス割り当てを区分化することは説明しました。
コンテキストが存在しなかったとして、上の Ctrl+B のケースを考えてみましょう。
あるプラグインで Ctrl+B を「ビルド」に割り当てようとしたときに、他のプラグインでも
Ctrl+B を「テキストを太字にする」に割り当てようとしたとします。
Eclipse はどのようにしてこの競合を解決するでしょうか?
上の機構を使用することにより競合は大幅に削減されますが、それでもやはり競合は発生します。
2 つのプラグインは互いに独立しており、同じコンテキスト、スキーム、プラットフォーム、およびロケールをもつ別のコマンドに同じキー・シーケンスを割り当てる可能性があります。
プラグインがウィンドウ・コンテキストおよびデフォルト・スキームでコマンドの 1 つに Ctrl+F4 を割り当てたとします。
これは、同じコンテキストおよびスキーム内で Eclipse の「閉じる」コマンドに対する Ctrl+F4 の割り当てと直接競合します。
これは競合です。 両方のコマンドとも起動することは適切でありませんし、そのキー・ストロークを受け取る 2 つのコマンドのうち 1 つを選択することも適切ではありません。 競合するコマンドを示したキー・アシスト・ダイアログがポップアップ表示されるので、ユーザーはコマンドを 1 つ選択できます。キー・アシスト・ダイアログは、複数キー・ストロークのキー・バインディングによるコマンド選択肢を表示するときと同じダイアログです。例えば、2 つのコマンドが F12 にバインドされている場合は、次のように表示されます。

ユーザーがキー・バインディングを設定して、競合を作成すると、 競合バインディングが競合リストに表示されます。 このリストを使用して競合バインディング間を移動し、それらを変更することができます。

このような競合は、キー・シーケンスをコマンドの 1 つに明示的に割り当てることによって解決することができます。あるいは、他方から削除することもできます。
もう 1 つのタイプの競合は、マルチ・キー・ストロークのキー・シーケンスによって発生する可能性があります。
例えば、Emacs スキームでは、キー・ストローク Ctrl+X で始まる多くのマルチ・キー・ストロークのキー・シーケンスがあります。Ctrl+X K は「閉じる」に割り当てられています。
Ctrl+X H は「すべて選択」に割り当てられています。
前述のように、Emacs スキームはキー・バインディングをデフォルト・スキームから借用しています。
デフォルト・スキームでは、Ctrl+X は「切り取り」に割り当てられています。
Emacs スキームでは明示的に Ctrl+X は再定義されませんが、その多数あるキー・バインディングの一環として Ctrl+X を押す必要がある場合があります。
Emacs スキームでは、誰かが Ctrl+X を押したときは、使用可能な多数の割り当てキー・シーケンスのうちの 1 つの入力の途中であるということです。
そのとき、その誰かは、「切り取り」アクションを起動しようとしているわけではありません。
このような競合の場合、「切り取り」に割り当てられている Ctrl+X キー・シーケンスは
無視される、というのがルールです。
そうでなければ、Emacs 構成のキー・バインディングの多くを完了することができません。