キーボードの機能は、
「一般」>「キー」設定ページを使用して 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 には、9 つの異なるコンテキストがあります。以下のとおりです。
構成とほぼ同様に、コンテキストは他のコンテキストを拡張することができます。例えば、Java ソースの編集 コンテキストは、テキストの編集 コンテキストからキー・バインディングを借用し、同様にテキストの編集 コンテキストは、ウィンドウ ・コンテキストからキー・バインディングを借用します。
注: キー・バインディングを、キー・バインディングが拡張するコンテキストにプロモートすることは推奨しません。例えば、テキストの編集 のキー・バインディングをダイアログまたはウィンドウ ・コンテキストに移動することは推奨しません。これは、予期しない結果を生じる可能性があります。
キー・バインディングの一部をダイアログで機能させることは可能です。それらのキー・バインディングは、ダイアログまたはウィンドウ ・コンテキストに割り当てられます。そのようなキー・バインディングの 1 つの例は、「切り取り」のキー・バインディングです。これらのキー・バインディングを変更することは可能です。例えば、Ctrl+X をダイアログで切り取りとし、Ctrl+W をウィンドウで切り取りとすることができます。
キー・バインディングは、プラットフォームおよびロケールによっても異なります。
Macintosh プラットフォームでは、通常の Ctrl+S
の代わりに、command+S
が「保管
」に割り当てられています。中国語ロケール (zh) では、通常の Ctrl+Space
の代わりに、Alt+/
が「コンテンツ・アシスト
」に割り当てられています。
現行プラットフォームおよびロケールは Eclipse 開始時に決定され、Eclipse インスタンスの進行中に変更されることはありません。
マルチ・ストローク・キー・シーケンス、スキーム、およびコンテキストとともに、キー・バインディングをカスタマイズする際には多くの注意点があります。より簡単に行うには、すべてのキー・カスタマイズを
「一般」>「キー」設定ページで行います。
この例では、スキームとして Emacs が選択されており、コマンド・リストから「閉じる
」コマンドが選択されています。このコマンドに関する情報が現行のキー・バインディングとともに表示されます。
「閉じる
」には、デフォルト・スキームで Ctrl+F4
と Ctrl+W
、そして Emacs スキーマで Ctrl+X K
という 3 つのキー・シーケンスが割り当てられていることに注意してください。どちらも、ウィンドウ・コンテキストで割り当てられています。したがって、ユーザーがスキームをデフォルト に設定すると、
Ctrl+F4
と Ctrl+W
が「閉じる
」に割り当てられ、
Ctrl+X K
は割り当てられません。
ただし、スキームを Emacs に設定した場合、Ctrl+X
K
は「閉じる
」に割り当てられます。同様に、Emacs スキームはデフォルト・スキームからキー・バインディングを借用するため、これらのキー・バインディングが Emacs スキームで他のコマンドに割り当てられていなければ、Ctrl+F4
と Ctrl+W
も「閉じる
」に割り当てられます。この例では、「Ctrl+W」は、Emacs スキームで「切り取り
」に結び付けられます。
以下は「閉じる
」に割り当てられているキー・シーケンスのリストです。キー・バインディングを追加または除去する場所があります。デフォルトでは、コンテキストはウィンドウ として選択されます。
キー・シーケンス Ctrl+W
を入力すると、「追加」ボタンが使用可能になります。また、キー・シーケンス Ctrl+W
が既に割り当てられているすべてのコマンド・リストが「追加」ボタンの下に表示されます。現在、Ctrl+W
にはウィンドウとダイアログ
・コンテキストで「切り取り
」コマンドが割り当てられていることが分かります。
Ctrl+W
を「閉じる
」に割り当てるため、「追加」ボタンをクリックします。
キー・バインディングはプラグインによって提供されています。
Eclipse では、プラグインを追加または除去することができます。これにより、これらのプラグインで宣言されたキー・バインディングが、追加または除去されることがあります。
Eclipse では、カスタム・キー・バインディングはこれを補正する方法で保管されます。
Emacs スキームで、Ctrl+Alt+W
が「切り取り
」に割り当てられている、上の例を考えてみましょう。
Ctrl+Alt+W
を特定のコマンドに割り当てる新規プラグインをインストールすると仮定します。Eclipse は、「切り取り
」への割り当てを保持します。
多くのコマンドに対して割り当て可能で、簡単な共通キー・ストロークは数に限りがあります。スキーム、コンテキスト、プラットフォーム、およびロケールがすべて、相互に競合しないドメインにキー・シーケンス割り当てを区分化することは説明しました。コンテキストが存在しなかったとして、上の Ctrl+B
のケースを考えてみましょう。あるプラグインで Ctrl+B
を「ビルド
」に割り当てようとしたときに、他のプラグインでも
Ctrl+B
を「テキストを太字にする
」に割り当てようとしたとします。
Eclipse はどのようにしてこの競合を解決するでしょうか?
上の機構を使用することにより競合は大幅に削減されますが、それでもやはり競合は発生します。
2 つのプラグインは互いに独立しており、同じコンテキスト、スキーム、プラットフォーム、およびロケールをもつ別のコマンドに同じキー・シーケンスを割り当てる可能性があります。プラグインがウィンドウ・コンテキストおよびデフォルト・スキームでコマンドの 1 つに Ctrl+F4
を割り当てたとします。これは、同じコンテキストおよびスキーム内で Eclipse の「閉じる」コマンドに対する Ctrl+F4
の割り当てと直接競合します。
これは競合です。両方のコマンドとも起動することは適切でありませんし、そのキー・ストロークを受け取る 2 つのコマンドのうち
1 つを選択することも適切ではありません。唯一の適切な対処は両方のキー・バインディングを無視することであり、事実上
Ctrl+F4
はこのコンテキストおよびスキームでは使用できなくなります。
これらのタイプの競合は、キー・シーケンスをコマンドの 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 構成のキー・バインディングの多くを完了することができません。