Problema com o entendimento das ligações de chaves

0

Eu tenho configurações e uma sessão zsh

~ bindkey | grep help    
"^[H" run-help
"^[h" run-help

Por que quando eu pressiono "Control + [+ h" palavra sob cursor remove e nada acontece, mas se eu pressionar "Alt + h" página man abre corretamente?

    
por Pavel Patrin 26.04.2016 / 08:40

2 respostas

1

^[ significa, na verdade, caractere de escape. Verifique aqui: link

No seu caso, parece que sua tecla ALT funciona como sinônimo de tecla Escape: link

    
por 26.04.2016 / 09:06
5

Tente pressionar Controle + [ imediatamente seguido por h .

Os terminais não enviam pressionamentos de teclas diretamente para o shell (como em Control foi pressionado / liberado). Em vez disso, o terminal envia sequências de caracteres, dependendo das teclas pressionadas. As teclas em uma seqüência devem ser pressionadas - bem - em seqüência, não todas de uma vez. A grande exceção a isso são as teclas Control e as teclas Alt que são pressionadas ao mesmo tempo com outras teclas para criar uma sequência específica.

Como você já sabe / observou ^ é usado como símbolo para a tecla Control , mas só tem este significado em conjunto com o caractere seguinte. ^A means Controle + a ou Controle + A , a seqüência de teclas é a mesma para as partes superior e inferior Caracteres de caso em combinação com Controle (essa também é a razão pela qual os terminais geralmente usam Controle + Deslocamento + SOMEKEY para seus próprios atalhos não relacionados ao shell).

^[ significa literalmente Controle + [. Também é enviado pelo Escape . Então ^[a significa Controle + [ seguido por a (minúsculo!). Além disso, a tecla Alt também envia a seqüência ^[ seguida pela tecla que foi pressionada. Então Alt + a também envia ^[a . Alt + Deslocamento + a envia ^[A .

Portanto, para o seu exemplo, pode premir qualquer um destes ('+' significa "ao mesmo tempo", ',' significa "em sequência"):

  • para ^[h
    • Alt + h
    • Escape , h
    • Controle + [, h
  • para ^[H
    • Controle + [, Deslocamento + h
    • Alt + Deslocamento + h
    • Escape , Deslocamento + h

Teclas especiais como PgUp , Backspace , Retornar ou KP_Enter também enviam sequências de chaves. Estes geralmente dependem do emulador de terminal. Você pode usar os widgets quoted-insert ou vi-quoted-insert para mostrar a sequência de teclas. Por padrão, eles estão vinculados a ^V em seus respectivos modos. Então pressionando Controle + v seguido pela combinação de teclas em questão irá mostrar a seqüência que você pode usar para bindkey . Por termite na minha máquina eu recebo:

  • PgUp : ^[[5~ , que também é Controle + [, [, 5 , ~ ou Escape , [, 5 , ~ ou Alt + [, 5 , ~
  • Backspace : ^? , que também é Controle + ?
  • Retorna : ^M , que também é Controle + m
  • KP_Enter : ^[OM , que também é Controle + [, Deslocamento + o , Shift + m ou Alt + Deslocamento + o , Shift + m

Em teoria, as seqüências-chave podem ser arbitrariamente longas e complicadas. Por exemplo com:

bindkey '^[xfooba^r' run-help

Alt + x , f , o , o , b , a , Controle + r executará o widget run-help .

Há um pouco de limite, pois zsh só aguarda um certo tempo por outro caractere, antes de aceitar uma sequência de vários caracteres. Esse tempo limite pode ser configurado no parâmetro KEYTIMEOUT em centésimos de segundos. O padrão é 40 , portanto, 0,4 segundo.

    
por 26.04.2016 / 11:23