Die kurze Antwort auf Ihre Frage ist, dass dies möglich ist, aber die Bindung, die Sie benötigen, könnte aufgrund Ihres Tastaturlayouts und / oder eines logischen "Schluckaufs", den Sie nicht erwarten, möglicherweise nicht das sein, was Sie erwarten dass Sublime Schlüssel abbildet.
Den Grund dafür zu erklären und wie Sie bestimmen, wie Ihre Bindung für diesen (oder einen anderen) Schlüssel aussehen muss, ist etwas komplizierter.
Im Allgemeinen verwendet Sublime Scancodes, um zu bestimmen, welche Taste Sie drücken. Scancodes basieren auf der Position der Taste auf der Tastatur und nicht auf den tatsächlich erstellten Zeichen.
Das Ergebnis davon ist, dass Sublime Tasten sieht, die Sie drücken, als ob sie auf einer US-Tastatur wären, auch wenn sie es nicht sind. Die Liste der Tasten in der Liste, die Sie in Ihrer Frage erwähnen, setzt ein Standardlayout der US-Tastatur voraus.
Um Probleme mit der Tastenbindung zu diagnostizieren oder um zu sehen, wie Sublime Ihre Eingabe liest, können Sie die Eingabeprotokollierung aktivieren, indem Sie die Sublime-Konsole mit View > Show Console
im Menü öffnen und den folgenden Befehl eingeben:
sublime.log_input(True)
Während die Eingabeprotokollierung aktiviert ist, meldet Sublime in der Konsole eine Meldung zu jedem eingegebenen Ereignis. Die Eingabeprotokollierung bleibt in Kraft, bis Sie denselben Befehl mit False
Sublime ausführen oder neu starten.
Im Allgemeinen sehen Sie eine der folgenden Optionen:
chr evt: #
, das sagt Ihnen, dass Sie einen Charakter gedrückt habenkey evt: backspace
, was Ihnen mitteilt, dass Sie eine Taste gedrückt habenkey evt
gefolgt vonchr evt
, was bedeutet, dass die Taste, die Sie gedrückt haben, einer toten Taste ähnelt, die versucht, einem Buchstaben einen Diakriten hinzuzufügen.- Nichts, wenn der Schlüssel wirklich tot ist oder etwas außerhalb von Sublime (z. B. das Betriebssystem) das Tastaturereignis verzehrt hat, bevor Sublime die Gelegenheit hatte, es zu sehen
Um einen Schlüssel an etwas zu binden, das ein chr
Ereignis meldet, sollte Ihr Mapping nur den Charakter enthalten:
{ "keys": ["#"], "command": "echo"},
Um einen Schlüssel zu binden, der als key
Ereignis gemeldet wird, würden Sie den Schlüssel so verwenden, wie er im Ereignis gemeldet wird, einschließlich aller Modifizierer ( control
funktioniert ebenso wie ctrl
):
{ "keys": ["backspace"], "command": "echo"},
Bei allem, was gesagt wird, sind die Berichte zur Eingabeprotokollierung möglicherweise nicht immer das, was Sie ursprünglich erwarten würden. Dies ist einer der Punkte, die in den Kommentaren zu Ihrer ursprünglichen Frage erwähnt werden.
Tastenkombinationen, die Zeichen generieren, werden als chr
Ereignisse gemeldet, d. H. Sie berücksichtigen den Schichtzustand. Tasten, die keinen Charakter generieren, werden als key
Ereignisse gemeldet und enthalten den Modifikator und die gedrückte Taste .
Dieses Bit wird betont, weil es vielleicht nicht das ist, was Sie anfangs erwarten.
Zum Beispiel auf einem US-Tastaturlayout #
und 3
teilen Sie sich eine Taste mit #
der verschobenen Version der Taste.
Somit:
- 3:
chr evt: 3 (0x33)
- shift+3:
chr evt: # (0x23)
Das macht logisch Sinn. Wenn Sie nur die 3
Taste drücken, erhalten Sie ein Literal 3
, während Sie mit shift einen Hash-Charakter erhalten.
Beachten Sie jedoch Folgendes:
- Ctrl+3:
key evt: control+3
- Ctrl+#:
key evt: control+3
- Ctrl+Shift+3:
shift+control+3
Das ist; Um den #
Charakter zu erhalten, muss ich die Umschalttaste drücken, aber das gemeldete Schlüsselereignis bezieht sich auf die 3
Taste, da dies wirklich die Taste ist, die ich drücke.