Entendendo o que está acontecendo quando despejo uma sequência de caracteres do terminal com Ctrl-v?

Entendendo o que está acontecendo quando despejo uma sequência de caracteres do terminal com Ctrl-v?

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
  • pegue ^X^Ee 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 bindkeydocumentaçã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 o screenmanual bindkey.

informação relacionada