Comportamento de retrocesso no terminal

1

Eu abri um zsh em um computador remoto rodando o Fedora 13 (sim, é antigo). Ao digitar backspace tudo funciona bem, mas nada acontece quando eu digito home ( Ctrl + A faz o trabalho como esperado). Mas ao lançar um subshell python 2.7, meu backspace imprime ^? ao invés de remover o último caractere e home imprime ^[OH e Ctrl + A imprime ^A .

Esse não é o comportamento que vejo quando estou no Linux Mint habitual na máquina local, onde tudo funciona bem. Alguém sabe como isso acontece e o que eu poderia fazer para resolver isso? Obrigado

    
por rafa 16.07.2013 / 11:13

1 resposta

0

Como o @BrandonInvergo apontou nos comentários, estas são duas questões diferentes. Como não sei python, apenas me concentro no problema específico de zsh .

O shell Z usa o editor de linha Z (zle) para interagir com o usuário. As combinações de teclas são configuradas com o bindkey builtin (consulte man zshzle para obter informações mais detalhadas). Existem mapas de chave diferentes, por ex. quando você digita no prompt, o mapa de teclado main está ativo, se você usar zed (um editor de arquivos simples, mas geralmente muito conveniente), o mapa de teclado zed está ativo, etc.

Você pode exibir os atalhos de teclado atuais com bindkey -M [keymap] , o main keymap é o padrão, portanto, em mais casos, você pode simplesmente omitir o parâmetro -M [keymap] .

Agora, vamos dar uma olhada no seu problema específico:

CTRL+A (representado por ^A ) pula para o início da linha, então você provavelmente usou bindkey -e em algum lugar dos seus arquivos RC (no seu ~/.zshrc pessoal, mas também pode ser emitido em alguns configuração do sistema como /etc/zshrc ) para ativar as associações de teclas emacs :

$ zsh -f
$ bindkey -e
$ bindkey | head -n 3
"^@" set-mark-command
"^A" beginning-of-line
"^B" backward-char

Para ter o mesmo comportamento para a chave HOME , você precisa identificar a string produzida (que depende do emulador de terminal que você usa). Um truque simples é ativar cat e pressionar a tecla desejada. Esta é a saída usando xterm para a chave HOME e END :

$ cat
^[[H^[[F

Portanto, texto longo, mensagem curta - você deseja colocar essas linhas no arquivo ~/.zshrc (mas após o comando bindkey -e ):

bindkey "^[[F" end-of-line
bindkey "^[[H" beginning-of-line

E, por favor, não esqueça de source ~/.zshrc ... então essas duas chaves devem funcionar como desejado.

    
por 16.07.2013 / 19:21