A resposta curta para a sua pergunta é que isso é possível, mas a ligação que você precisa pode não ser o que você espera que seja devido ao layout do teclado e / ou um pouco de "problema" lógico que talvez você não espere da maneira que o Sublime mapeia as chaves.
Explicar a razão para isso e como você determina como a sua ligação deve ser para essa (ou qualquer outra) chave está um pouco mais envolvida.
Em geral, o Sublime usa códigos de verificação para determinar qual tecla você está pressionando. Os scancodes são baseados na posição da tecla no teclado e não nos caracteres que eles realmente criam.
O resultado disso é que o Sublime vê as teclas que você pressiona como se estivessem em um teclado dos EUA, mesmo que não estejam; a lista de chaves na lista mencionada na sua pergunta pressupõe um layout de teclado padrão nos EUA.
Para diagnosticar problemas de ligação de chaves ou ver como o Sublime está lendo sua entrada, você pode ativar o registro de entrada abrindo o console do Sublime com View > Show Console
no menu e digitando o seguinte comando:
sublime.log_input(True)
Enquanto o log de entrada está ativado, o Sublime reportará uma mensagem no console referente a cada evento de entrada que está sendo exibido. O registro de entrada permanece em vigor até que você execute o mesmo comando com False
ou reinicie o Sublime.
Você geralmente verá um dos itens a seguir:
-
chr evt: #
, que informa que você pressionou um caractere -
key evt: backspace
, que informa que você pressionou uma tecla -
key evt
seguido porchr evt
, o que significa que a tecla que você pressionou é algo parecido com uma chave morta que está tentando adicionar um diacrítico a um caractere. - nada se a chave estiver realmente morta ou algo fora do Sublime (por exemplo, o SO) comeu o evento do teclado antes que o Sublime tivesse a chance de vê-lo
Para associar uma chave a algo que está relatando um evento chr
, seu mapeamento deve incluir apenas o caractere:
{ "keys": ["#"], "command": "echo"},
Para vincular uma chave que está relatando como um evento key
, use a chave conforme relatado no evento, incluindo quaisquer modificadores ( control
funciona assim como ctrl
):
{ "keys": ["backspace"], "command": "echo"},
Com tudo isso dito, o que os relatórios de registro de entrada podem não ser sempre o que você esperaria inicialmente, que é um dos itens mencionados nos comentários da sua pergunta original.
As combinações de chaves que geram caracteres são relatadas como chr
events, o que significa que elas levam em consideração o estado de mudança. As chaves que não geram um caractere são informadas como key
events e incluem o modificador e a chave que foi pressionada .
Esse bit é enfatizado porque pode não ser o que você espera inicialmente.
Por exemplo, em um layout de teclado dos EUA, #
e 3
compartilham uma chave, com #
sendo a versão deslocada da chave.
Assim:
-
3 :
chr evt: 3 (0x33)
-
shift + 3 :
chr evt: # (0x23)
Isso faz sentido lógico; Pressionar a tecla 3
obtém apenas um literal 3
, enquanto o uso de deslocamento gera um caractere hash.
No entanto, observe o seguinte:
-
Ctrl + 3 :
key evt: control+3
-
Ctrl + # :
key evt: control+3
-
Ctrl + Shift + 3 :
shift+control+3
Isso é; Para obter o caractere #
, preciso pressionar shift, mas o evento principal relatado é para a chave 3
, porque essa é realmente a chave que estou pressionando.