Se eu quiser vincular um mapeamento de teclas a uma função ou widget no zsh, aprendi que primeiro preciso pressionar Ctrl+ v- em um prompt, inserir a sequência de teclas que desejo usar e usar a saída em meu atalho de teclado comando.
Por exemplo, se eu quiser mapear a ação de abrir o conteúdo atual da linha de comando em um editor, precisoCtrl+xCtrl+v
- pressione Ctrl+ v- para entrar no "modo de tecla de despejo"
- baterCtrl+xCtrl+v
- No meu caso isso produz
^X^E
- No meu caso isso produz
- pegue
^X^E
e use-o no meu comando de atalho de teclado, por exemplo
bindkey "^X^E" edit-command-line
Por que isso é necessário e o que realmente está acontecendo “nos bastidores” quando faço isso?
Responder1
Quando você pressiona Ctrl- V, o shell começará ignorando as interrupções do teclado e simplesmente tomará a combinação de teclas pressionadas como caractere de entrada. Isso é facilmente possível, pois o ASCII foi projetado para conter todos os caracteres de controle.
É claro que, na exibição, ele precisa trapacear um pouco e mostrar ^
seguido pela tecla correspondente ou, caso contrário, geraria caracteres de controle em vez do que você precisa ver.
Observe que a bindkey
documentação mostra que ela suporta duas notações para caracteres de controle: (exemplos referem-se a Ctrl- X)
- notação de acento circunflexo que consiste em escrever explicitamente o acento circunflexo ( ^) seguido do caractere de controle correspondente textualmente (não necessitando do método Ctrl- Vnesta questão); exemplo:
^X
C-
seguido pelo caractere de controle; exemplo:C-x
. Isso faz com que algumas combinações de teclas exijam escape (mesmo que você não o use). Você provavelmente deveria ler todo oscreen
manualbindkey
.