ALT + seta se movendo entre as palavras em zsh e iTerm2

19

Entrei em um dos servidores de provedores de hospedagem e notei que ALT + esquerda e ALT + direita se moviam entre as palavras em um prompt de shell na tela GNU.

Que tipo de associações de teclas eu preciso configurar e onde obter esse comportamento no meu OS X zsh local em execução no iTerm2?

Mikko Ohtamaa
fonte
As pessoas interessadas nesta pergunta também podem estar interessadas em saber que as palavras zsh não são bash. FOO=BARé uma palavra para zsh e 2 palavras para bash. Da mesma forma, se você definir o cursor no final foo --bare pressionar alt + backspace, no bash você terá foo --e no zsh você terá foo . O Zsh adiciona muitos recursos ao bash, mas também possui muitos padrões insanos a serem substituídos.
Weberc2

Respostas:

28

Encontrei a solução aqui: https://coderwall.com/p/h6yfda . Irá copiar as partes mais importantes, caso o link seja desativado.

  1. Vá para Preferências, Perfil, Chaves.
  2. Defina a tecla left esquerda para atuar como um caractere de escape.
  3. Localize o atalho atual para ⌥ ← ou crie um novo, com as seguintes configurações:
    • Atalho do teclado: ⌥ ←
    • Ação: Enviar sequência de escape
    • Esc +: b
  4. repita para o atalho do teclado ⌥ → com as seguintes configurações:
    • Atalho do teclado: ⌥ →
    • Ação: Enviar sequência de escape
    • Esc +: f
Willington Vega
fonte
1
Vale ressaltar que é específico para um emulador de terminal específico - não para o zsh em geral.
Hi-Angel
6

Você está procurando as palavras backward-word- chave e forward-word. Portanto, se você estiver em um shell em que as combinações de teclas não estão funcionando, tente bindkey -L | grep backward-wordverificar se elas estão configuradas. Há mais informações sobre isso no zshzle (1) .

Você pode definir manualmente a combinação de teclas digitando algo como isto:

bindkey ' Ctrl+ v Alt+ Right' palavra direta

bindkey ' Ctrl+ v Alt+ Left' palavra inversa

Também tive alguns problemas com as combinações de teclas e o problema era quase sempre que a tecla Option / Alt enviava algo diferente do esperado Meta / Escape.

Sebastian Stumpf
fonte
Você também pode usar emacs-forward-worde emacs-backward-word. A diferença é que você pula para o final da palavra e recua para o início da palavra, em vez de pular sempre no início da palavra.
Aalex Gabi 25/09
Esta é a solução mais robusta e limpa. Ele pode se adaptar a diferentes tipos de mapeamento de teclas e / ou todo tipo de combinação ssh-tmux-zsh. Outras soluções que envolvem uma sequência de escape codificada apenas resolvem alguns dos casos em algum sistema específico.
HKTonyLee
3

Não posso falar pelo iTerm, mas estas são as combinações de teclas que usei para resolver esse problema no Terminal GNOME, no Fedora 19, executando o ZSH 5.0.7 com Oh-my-zsh:

bindkey "\e[1;3C" forward-word
bindkey "\e[1;3D" backward-word

onde \e== A seqüência de teclas de escape (conforme documentado na seção 4.1.1 )

e [== O(O maiúsculo; conforme documentado na seção 4.2.1 ), em alguns casos. Por exemplo, sob tmuxesta substituição é necessário para mim, no entanto, sem tmuxque seja necessário que nenhuma substituição seja feita e [==[

Os códigos das teclas para uma sequência podem ser obtidos usando cate pressionando a sequência desejada. Por exemplo, os resultados da prensagem <Alt+Right>devem ser interpretados da seguinte maneira:

$ cat
^[[1;3C

^[== \e== A sequência da tecla de escape

[== [sem tmuxOR [== O(o maiúsculo) comtmux

1;3 == Não tenho certeza sobre este, mas deve significar logicamente <Alt>

C == A tecla de seta para a direita

Então, essa sequência é fornecida bindkeyno ~/.zshrcarquivo para persistência, como o primeiro argumento, e é vinculada , o que significa que o pressionamento de tecla no argumento um executará um comando de editor específico (ou widget em termos zsh), para o widget, que no primeiro a linha de exemplo acima é forward-word.

Ele ~/.zshrcdeve ser recuperado depois que esses dois comandos forem anexados a ele com:

$ source ~/.zshrc

Agora, um aborrecimento no meu sistema é que essa combinação específica fez com que o emulador de terminal emitisse um sinal sonoro cada vez que o comando foi emitido, o que corrigi desabilitando o comando

'Edit'->'Profile Preferences'->'Terminal Bell' caixa de seleção.

rivanov
fonte
1

O que funcionou melhor para mim em relação a tornar a navegação na linha de comando do iTerm2 mais intuitiva para mim (eu sou um jovem adulto que não cresceu em uma linha de comando, mas passei muito tempo em editores de texto e IDEs) foi para:

  • Vá para Preferências -> Perfil -> Chaves
  • Na lista de mapeamentos de teclas, há uma caixa para adicionar / remover ou carregar predefinições (caixa de combinação)
  • Selecione a Natural Text Editingopção no menu suspenso Predefinições.

Isso padroniza as chaves do editor para um arranjo mais padrão, sem que eu precise modificar todas as opções individualmente.

loganjones16
fonte
0

Eu sugiro que você use zkbdpara configurar combinações de teclas. Eu o uso e Alt+ Left/ Alt+ Rightfunciona bem no iTerm2. Veja zshcontrib(1)para detalhes sobre zkbd.

Daniel Serodio
fonte