
Estou em um MAC e estou tentando descobrir atalhos para meu ZSH rodando no Iterm2.
Quando digito bindkey no shell, vejo (entre outros mapeamentos) o seguinte:
"^[b" backward-word
"^[f" forward-word
Eu sei que ^ é a tecla Control. Mas e se eu pressionar Ctrl + [ + f, não avançará uma palavra.
o que estou perdendo?
Responder1
^
geralmente é control, mas ^[
na verdade significa Escape ou Alt (ou meta, se você gosta de emacs).
Então você pode pressionar Escbou Escfpara essas combinações de teclas.
Por padrão, Alt não funciona em terminais Mac, mas o iTerm2 possui uma configuração: "A opção atua como [] Normal [] Meta [] +Esc". Você quer + Esc.
Responder2
Na verdade ^[
é a tecla Alt. Portanto, no seu caso, o terminal (Iterm2) usa Alt + b e Alt + f para retroceder e avançar uma palavra. Isso é controlado pelo seu terminal e não tem nada a ver com zsh.
Responder3
Para estendermrbresponder:
Na verdade ^[b
é ESC+ bou ( Meta/Alt+ b). Você pode exibir o caractere literalmente procedendo 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 da mesma forma para forward-word
:
forward-word (ESC-F ESC-f) (unbound) (unbound)
Move to the beginning of the next word.
Responder4
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 caractere 64 slots antes de ativar".
A ESC
chave é ASCII 27, que tem 64 etapas antes [
, portanto, ^[
é uma abreviação de ESC.
No editor GNU Emacs foram utilizadas diversas teclas modificadoras, CTRL, META e outras. Por exemplo, CTRL-f move o cursor um caractere para frente e META-f move o cursor uma palavra para frente.
Para acomodar muitos teclados sem tecla 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.
Observe que hoje em dia é muito raro Ctrl-[
exibir um caractere ESC, mas pode estar oculto em alguma outra combinação de Ctrl. Por exemplo, ^^
ainda é usado em sessões telnet para escapar para o modo de comando, por isso é útil poder encontrá-lo.