На клавиатурах Великобритании символ решетки (#, в других странах он же фунт) имеет собственную клавишу (с тильдой над ней).
Вероятно, поскольку эта клавиша не является стандартной на клавиатурах США, она не указана всписок именованных ключей в документациидля использования в пользовательских сочетаниях клавиш.
Есть ли способ ссылаться на него при создании пользовательских сочетаний клавиш?
решение1
Короткий ответ на ваш вопрос: это возможно, но нужная вам привязка может оказаться не такой, какой вы ожидаете, из-за раскладки вашей клавиатуры и/или небольшой логической «ситуации», которую вы, возможно, не ожидаете от того, как Sublime сопоставляет клавиши.
Однако объяснение причины этого и того, как вы определяете, как должна выглядеть ваша привязка для этой (или любой другой) клавиши, немного сложнее.
Вообще говоря, Sublime использует скан-коды, чтобы определить, какую клавишу вы нажимаете. Скан-коды основаны на положении клавиши на клавиатуре, а не на символах, которые они фактически создают.
Результатом этого является то, что Sublime видит клавиши, которые вы нажимаете, как если бы они были на американской клавиатуре, даже если это не так; список клавиш в списке, который вы упомянули в своем вопросе, предполагает стандартную американскую раскладку клавиатуры.
Чтобы диагностировать проблемы с привязкой клавиш или увидеть, как Sublime считывает вводимые данные, вы можете включить регистрацию ввода, открыв консоль Sublime с помощью View > Show Console
меню и введя следующую команду:
sublime.log_input(True)
Если включено ведение журнала ввода, Sublime будет выводить сообщение в консоль относительно каждого события ввода, которое он видит. Ведение журнала ввода остается в силе до тех пор, пока вы не выполните ту же команду False
или не перезапустите Sublime.
Обычно вы увидите что-то из следующего:
chr evt: #
, который сообщает вам, что вы нажалихарактерkey evt: backspace
, который сообщает вам, что вы нажалиключkey evt
за которым следуетchr evt
, что означает, что нажатая вами клавиша похожа намертвый ключкоторый пытается добавить диакритический знак к символу.- вообще ничего, если клавиша действительно неисправна или что-то за пределами Sublime (например, ОС) съело событие клавиатуры до того, как Sublime успел его увидеть
Чтобы привязать клавишу к чему-то, что сообщает о chr
событии, ваше сопоставление должно включать только символ:
{ "keys": ["#"], "command": "echo"},
Чтобы привязать клавишу, которая сообщается как key
событие, вы должны использовать клавишу так, как она сообщается в событии, включая любые модификаторы ( control
работает также ctrl
):
{ "keys": ["backspace"], "command": "echo"},
Учитывая все вышесказанное, отчеты журнала входных данных не всегда могут быть такими, какими вы изначально их ожидаете, что является одним из пунктов, упомянутых в комментариях к вашему исходному вопросу.
Комбинации клавиш, которые генерируют символы, сообщаются как chr
события, что означает, что они учитывают состояние shift. Клавиши, которые не генерируют символ, сообщаются как 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
клавиши, потому что это действительно та клавиша, которую я нажимаю.