O que é '“^ [b” backward-word' Ao tentar configurar o ZSH?

3

Estou em um MAC e estou tentando descobrir atalhos para o meu ZSH em execução na Iterm2.

Quando eu digito bindkey no shell, vejo (entre outros mapeamentos), o seguinte:

"^[b" backward-word
"^[f" forward-word

Eu sei ^ é a tecla Control. Mas e se eu pressionar Ctrl + [+ f, ele não avança uma palavra.

O que estou perdendo?

    
por Hommer Smith 18.10.2014 / 17:58

4 respostas

4

^ geralmente é controle, mas ^[ significa, na verdade, Escape ou Alt (ou meta, se você gosta de emacs).

Então você pode pressionar Esc b ou Esc f para estas combinações de teclas.

Por padrão, o Alt não funciona em terminais Mac, mas o iTerm2 tem uma configuração: "A opção atua como [] Normal [] Meta [] + Esc". Você quer + Esc.

    
por 18.10.2014 / 18:21
2

Na verdade, ^[ é a tecla Alt. Portanto, no seu caso, o terminal (Iterm2) usa Alt + be Alt + f para retroceder e encaminhar uma palavra. Isso é controlado pelo seu terminal e não tem nada a ver com o zsh.

    
por 18.10.2014 / 18:16
2

Para ampliar a resposta mrb :

De fato, ^[b é ESC + b ou ( Meta / Alt + b ). Você pode exibir caracteres literalmente, continuando com Ctrl + v . Neste caso, você encontrará o seguinte:

  • Ctrl + v Ctrl + b

    ^B

  • Ctrl + v Meta + b

    ^[b

  • Ctrl + v ESC b

    ^[b

Além disso, você encontrará no manual do zsh:

backward-word (ESC-B ESC-b) (unbound) (unbound)
    Move to the beginning of the previous word.

e de forma semelhante para forward-word :

forward-word (ESC-F ESC-f) (unbound) (unbound)
              Move to the beginning of the next word.
    
por 18.10.2014 / 18:33
1

A notação ^ é comumente usada no mundo GNU para caracteres de controle, onde ^a é Ctrl-A (ASCII 1 onde A é ASCII 65). Em outras palavras, é uma abreviação para "usar o personagem 64 slots antes disso".

A chave ESC é ASCII 27, que é 64 passos antes de [ , portanto, ^[ é uma abreviação para ESC.

No editor GNU Emacs foram usadas várias teclas modificadoras, CTRL, META e outras. Por exemplo, CTRL-f move o cursor para um caractere para frente e META-f move o cursor para uma palavra para frente.

Para acomodar os muitos teclados sem uma chave META, uma convenção de "ESC significa que o próximo caractere deve ser considerado pressionado com a tecla META". Portanto, no GNU Emacs, pressionar ESC-f move o cursor uma palavra para frente.

Note que atualmente é muito raro que Ctrl-[ dê um caractere ESC, mas pode estar escondido em alguma outra combinação Ctrl. Por exemplo, ^^ ainda é usado em sessões de telnet para escapar para o modo de comando, por isso é útil ser capaz de encontrá-lo.

    
por 18.10.2014 / 18:29