Sublime Text 3 のキーバインディングでハッシュ (#、ポンド) キーを使用することは可能ですか?

Sublime Text 3 のキーバインディングでハッシュ (#、ポンド) キーを使用することは可能ですか?

英国のキーボードでは、ハッシュ記号 (#、他の地域ではポンド) には独自のキー (上にチルダ付き) があります。

おそらく米国のキーボードの標準キーではないため、ドキュメント内の名前付きキーのリストカスタムキーストロークで使用します。

カスタム キー バインディングを作成するときにそれを参照する方法はありますか?

答え1

質問に対する簡単な答えは、これは可能ですが、必要なバインディングは、キーボード レイアウトや、Sublime がキーをマッピングする方法で予期しない論理的な「問題」により、期待どおりにならない可能性があるということです。

ただし、その理由と、そのキー (または他のキー) のバインディングをどのように決定する必要があるかを説明するのは、もう少し複雑です。

一般的に、Sublime はスキャン コードを使用して、どのキーが押されているかを判断します。スキャン コードは、キーボード上のキーの位置に基づいており、実際に作成される文字に基づいているわけではありません。

その結果、Sublime は、実際に US キーボードで押されたキーが US キーボードで押されたキーではない場合でも、そのキーを US キーボードで押されたキーとして認識します。質問で言及されているキーのリストは、標準的な US キーボード レイアウトを想定しています。

キーバインディングの問題を診断したり、Sublime が入力をどのように読み取っているかを確認したりするには、View > Show Consoleメニューから Sublime コンソールを開き、次のコマンドを入力して入力ログをオンにします。

sublime.log_input(True)

入力ログがオンになっている間、Sublime は確認したすべての入力イベントに関するメッセージをコンソールに報告します。入力ログは、同じコマンドを実行するかFalse、Sublime を再起動するまで有効のままです。

一般的には、次のいずれかが表示されます。

  • chr evt: #を押したことを示しますキャラクター
  • key evt: backspaceを押したことを示します
  • key evtが続く場合chr evt、押したキーはデッドキー文字に分音記号を追加しようとしています。
  • キーが本当に死んでいたり、Sublime が認識する前に Sublime の外部 (OS など) がキーボード イベントを消費していたり​​する場合は、何も起こりません。

イベントを報告するものにキーをバインドするにはchr、マッピングに次の文字だけを含める必要があります。

{ "keys": ["#"], "command": "echo"},

イベントとして報告されるキーをバインドするには、修飾子 (も として機能します)keyを含め、イベントで報告されたキーを使用します。controlctrl

{ "keys": ["backspace"], "command": "echo"},

そうは言っても、入力ログが報告する内容は、必ずしも当初期待していたものとは異なる場合があります。これは、元の質問のコメントで言及されている項目の 1 つです。

文字を生成するキーの組み合わせは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キーに対するものです。なぜなら、実際に押しているのはキーだからです。

関連情報