Como inserir caracteres especiais com o editor de linhas zsh?

2

No vim podemos digitar Ctrl + v então Número no modo de inserção para inserir caracteres especiais. Isso é usado principalmente para inserir caracteres de controle. Mas qualquer caractere pode ser inserido se soubermos o número ASCII. Por exemplo. digitando Ctrl + v então 1 , 2 , 6 irá inserir um '~ ' personagem. Consulte: link Eu gostaria de ter o mesmo comportamento ou similar com o editor de linhas zsh. Note que estou usando o zsh no modo vi, mas não acho que isso seja importante. Eu descobri que inserir um enter pode ser feito com Ctrl + v então Ctrl + j , veja: No editor de linha do ZSH, como inserir uma nova linha? . Mas como eu insiro um til?

Eu preciso disso, porque Eu estou trabalhando com um cliente citrix mudo, com o qual eu não posso digitar o caractere '~'.

    
por Gabor Marton 23.09.2015 / 18:08

1 resposta

1

Três possibilidades ( ~ tem o código ASCII 126 ou 176 em decimal ou notação octal, resp.):

  • use a sintaxe $'\OCT' , em que OCT é o código ASCII na notação octal:

    $ echo foo$'6'bar
    foo~bar
    
  • usar substituição de comando com printf:

    $ echo foo$(printf "6")bar
    foo~bar
    
  • use este widget zle para se assemelhar à entrada de caractere especial do vi:

    insert-special-char() {
      LBUFFER+=$(printf "\x$(printf %x $NUMERIC)")
    }
    zle -N insert-special-char
    

    em que emprestei a linha printf de amplie .

    Para usar este widget, vincule-o a S no vi-command-mode do zle (ou qualquer outra chave que você não use):

    bindkey -M vicmd "S" insert-special-char
    

    Em seguida, digite o código ASCII (em notação decimal) enquanto estiver no modo de comando vi do zle e pressione S . Em seguida, o caractere especial é inserido:

    ESC 1 2 6 S

por 27.09.2015 / 14:27