Usando putty, as teclas Esquerda e Direita movem uma palavra para o cursor, em vez de um caractere

1

Eu procurei uma solução para esse problema OhMyZSH! por alguns dias agora, mas não consigo encontrar uma solução. Admito que não entendo como zle realmente funciona, mesmo para bindkey . O mesmo vale para o modo como os emuladores de terminal enviam "seqüências de controle" e o que significa "tipo de terminal" ( xterm , versus xterm-256-color e outros). O mesmo para o "modo de aplicação"

A configuração

Eu tenho 2 máquinas onde a versão mais recente do OhMyZSH está instalada, confirme c3b072 :

  • máquina A: SLES 11 SP4, executando zsh 4.3.6 (x86_64-suse-linux-gnu)
  • máquina B: Ubuntu 16.04, executando zsh 5.1.1 (x86_64-ubuntu-linux-gnu)

Eu conecto a qualquer uma das máquinas usando Putty em execução no Windows, com o tipo de terminal xterm e no modo de tradução UTF-8.

Meus arquivos zshrc são praticamente modelos baunilha OhMyZSH , acabei de alterar o prompt para dieter na máquina A e powerlevel-9k [ link na máquina B.

O que eu observo na máquina A (também conhecida como "ruim")

Quando edito minha linha de comando, as teclas de cursor Esquerda e Direita movem uma palavra inteira (em vez de 1 caractere único).

Entretanto, as chaves

Home e End trazem o cursor para o começo e o fim da linha, como esperado.

Este comportamento descrito se aplica quando no modo emacs ( bindkey -e ).

Quando vou para o modo vim ( bindkey -v ), as setas Esquerda e Direita movem 1 caractere, mas o Início e as teclas End não movem o cursor para o começo e o fim da linha. Em vez disso, eles mudam o caso do caractere sob o cursor.

O que eu observo na máquina B (também conhecida como "boa")

As teclas

Esquerda e Direita movem o cursor um único caractere. As teclas inicial e final movem o cursor para o início e fim da linha resp. As combinações Ctrl + A e Ctrl + E trazem o cursor para o começo e fim resp.

Este é o comportamento que eu gostaria para todos os meus shells.

O que eu encontrei até agora

Acho que é um problema de bindkey . Mas eu não sei quase nada sobre isso, e tive dificuldade em encontrar qualquer documento sobre esse zsh embutido.

A execução de zsh -v em ambas as máquinas no momento do login dá resultados muito diferentes, apesar dos arquivos .zshrc semelhantes.

Alguém poderia me explicar o que está causando essas duas máquinas se comportando de maneira tão diferente, e como eu posso mudar minha configuração para que a consistência seja recuperada, e todos os meus shells se comportem como na máquina B (também conhecida como "boa")?

Tenho certeza de que você me informará se precisar de mais informações que eu não saiba que são necessárias.

Muito obrigado

    
por Gunee 23.01.2018 / 13:58

2 respostas

1

Você deve configurar seu tipo de terminal como putty , putty-256color ou putty-sco ao usar o PuTTY. Eles são os únicos tipos de terminal cujas entradas no banco de dados terminfo descrevem corretamente o PuTTY .

É uma suposição incorreta difundida de que os emuladores de terminal são todos compatíveis com o XTerm, e que as entradas xterm e xterm-256color no banco de dados terminfo as descrevem corretamente.

Esse pensamento errôneo é chamado em XTerm FAQ de Thomas Dickey e vale a pena observando que as entradas xterm e xterm-256color nem sequer descrevem todas as versões do XTerm, quanto mais outros emuladores de terminal.

O doco de PuTTY, como a página com hiperlink de M. Dickey, ainda hoje 16 anos desde que o putty entry foi adicionado ao terminfo , infelizmente promove o uso indevido do tipo de terminal xterm , mas é um mau uso, e esse é o tipo de mau comportamento do aplicativo que ocorre.

A comparação das entradas do banco de dados terminfo para xterm-256color e putty-256color revela o que está acontecendo com as chaves ⇱ Início e ⇲ Fim :

% infocmp xterm-256color putty-256color|grep -F kend
    kend: '\EOF', '\E[4~'.
% infocmp xterm-256color putty-256color|grep -F khome
    khome: '\EOH', '\E[1~'.
%

Como você pode ver, um aplicativo que está dizendo que está lidando com o XTerm espera receber (do terminal) a seqüência de controle ␛OH para a chave ⇱ Início e a seqüência de controle ␛OF para a tecla ⇲ End . Mas o PuTTY realmente envia as seqüências de controle ␛[1~ e ␛[4~ (respectivamente).

Seu aplicativo, o shell Z, esperando as seqüências de controle do teclado XTerm (porque você erroneamente disse que seu terminal tem o tipo xterm ), não reconhece as seqüências de controle do PuTTY e, de fato, divide-as em os comandos vi -mode para sair do modo de inserção ( ) e trocar o caso do caractere atual ( ~ ).

Leitura adicional

por 23.01.2018 / 15:11
0

Como gentilmente apontado pelo JdeBP, meu TERM foi erroneamente definido.

Finalmente, consegui que tudo funcionasse de maneira consistente com as etapas a seguir:

  1. Defina o tipo de terminal em massa para putty
  2. Desativar o modo de aplicativo para cursor e teclado no Putty
  3. Adicione as seguintes linhas ao meu arquivo .tmux.conf
    • set -g default-terminal "$TERM" para impedir que o tmux use screen por padrão
    • set -g terminal-overrides "putty*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@" para ter as teclas Esquerda e Direita movidas por um caractere, ao invés de uma palavra
por 25.01.2018 / 10:59