Tecla de Seta Esquerda Não Funciona na Bash do Tmux

1

Problema

Quando estou no bash no tmux, não consigo usar a tecla de seta para a esquerda (no teclado) para mover o cursor para a esquerda sobre o texto que digitei. Nenhum outro personagem aparece, o cursor não se move, nada acontece.

Detalhes

Se eu inserir vim, a seta para a esquerda funciona para navegação. Portanto, não parece ser um problema geral dentro do tmux, mas apenas algo que aparece na linha de comando do bash. As setas para cima e para baixo funcionam no bash no tmux. A seta esquerda também funciona normalmente no bash fora do tmux. Quando estou no bash no tmux, apertar Shift Left move o cursor para a esquerda.

Configuração básica

Do PuTTY no Windows, estou ssh'e em uma caixa do Fedora 24. Então eu inicio o tmux.

Ambiente

Configuração de massa de vidraceiro

Terminal -> Keyboard -> keypad: ESC[n~
Terminal -> Features -> nothing checked
Connection -> Data -> term type string: putty-256color

Shell

Fora do tmux:

$ echo $0
-bash
$ help
GNU bash, version 4.3.42(1)-release (x86_64-redhat-linux-gnu)

Dentro do tmux:

$ echo $0
-bash
$ help
GNU bash, version 4.3.42(1)-release (x86_64-redhat-linux-gnu)

Variáveis Bash

Fora do tmux:

$ echo $TERM
putty-256color

Dentro do tmux:

$ echo $TERM
screen-256color

Eu também tentei definir outros valores para $TERM dentro do tmux, como screen.putty-256color que eu encontrei com ls -1 /usr/share/terminfo/s/screen* - não parece fazer diferença.

Despejo das configurações da opção bash, que são as mesmas dentro ou fora do tmux:

$ shopt -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       on
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          off

Eu não tenho um .inputrc pessoal, mas vejo que o emacs está acima, e o / etc / inputrc tem esta seção:

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# commented out keymappings for pgup/pgdown to reach begin/end of history
#"\e[5~": beginning-of-history
#"\e[6~": end-of-history
"\e[5~": history-search-backward
"\e[6~": history-search-forward
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line
"\eOc": forward-word
"\eOd": backward-word

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif

Notas

Acho que isso funcionou há uma semana. Diferenças desde então eu pensei:

  • Eu tinha uma configuração diferente do PuTTY (posso tentar recuperar isso, não é facilmente acessível agora)
  • Eu instalei as cores Solarized para o vim e experimentei as cores do PuTTY também. Eu dei outra olhada nas opções do $ TERM quando fiz isso, mas não acho que fiz nenhuma mudança significativa que eu ainda não tenha feito.
  • os cabeçalhos do kernel foram atualizados, a glibc foi atualizada.

Resolução de problemas

A instalação de zsh e a configuração set-option -g default-shell /bin/zsh in ~/.tmux.conf não resolveram o problema.

su 'ing para root e iniciar o tmux do root não resolveu o problema.

    
por jrefior 28.06.2017 / 01:33

1 resposta

3

Resolvi o problema esta manhã, por isso estou postando esta resposta com minha correção:

Corrigir

Alterar a configuração do PuTTY Connection -> Data -> Terminal-type string para xterm-256color .

Explicação

Bem, eis a diferença entre os valores de terminfo para kLFT, que man terminfo diz ser a tecla de seta para a esquerda:

$ infocmp xterm-256color putty-256color | grep '\E\[D'
kLFT: '\E[1;2D', '\E[D'

Eu acho que o Bash entende \E[D como o comando para mover o cursor para a esquerda, então faz sentido que a shift-left-arrow funcione para mover o cursor para a esquerda. Mas não há outra entrada para \E[D e

$ infocmp xterm-256color | grep '\E\[D'

não encontra nada, então não parece que o xterm-256color tenha vinculado mais nada a isso, e kLFT é a única correspondência em putty-256color. man terminfo diz

The codes sent by the left arrow, right arrow, up arrow, down arrow, and home keys can be given as kcub1, kcuf1, kcuu1, kcud1, and khome respectively.

E em outros lugares lista o kcub1 como a tecla de seta para a esquerda, então eu devo procurar por kcub1:

$ infocmp xterm-256color | grep kcub1
kbs=7, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,

$ infocmp putty-256color | grep kcub1
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,

Mas está definido com o mesmo valor, \EOD , em ambos.

Na tela-256 cores, o valor de kcub1 é o mesmo e kLFT não está definido.

Além disso, eu não tenho muita explicação - se tudo isso somar e fizer sentido para você, por favor poste uma resposta.

Nota: Eu pensei que isso estava funcionando há uma semana com putty-256color, mas lembro de ter mudado algumas opções $ TERM quando eu instalei o Solarized, então eu acho que eu mudei para putty-256color naquele momento e esqueci .

    
por 28.06.2017 / 16:11