SSH garbling caracteres no vim / nano no servidor remoto

17

... e isso está me deixando louco.

Basicamente (isso vem acontecendo nos últimos dois meses), faço login em alguns servidores CentOS diferentes (um Linode, outro VPS e um host compartilhado para o qual tenho acesso ao shell), executando 5.5, 5.7 e 6 , do meu Mac rodando o OS X Lion, usando o Terminal.

Basicamente:

$ ssh [email protected]

[remote-host] $ nano somefile.txt

Uma vez que eu começo a editar o arquivo, se eu usar as setas do teclado para mover o cursor, ou começar a deletar, então digitando novamente, o cursor salta um pouco, e se eu salvar o arquivo e reabri-lo, é óbvio que o cursor era , de fato, pulando por toda parte em uma linha sem motivo aparente.

Acabo recebendo coisas como "Este é um texto novo". Quando eu tinha digitado (para o editor louco por cursor) "Esta é uma linha de texto".

É um grande problema quando se trata de editar arquivos de configuração, porque eu geralmente tenho que editar uma linha, salvar e fechar, depois reabrir só para ter certeza de que a linha está certa ... depois editar outra linha ... e é ficando muito chato.

Eu encontrei problemas de renderização do Linode Lish Shell Vim e Nano: linhas não aparecendo / posições do cursor erradas , mas eu não sei se isso se relaciona muito, já que isso se refere especificamente ao lish.

    
por geerlingguy 09.11.2011 / 04:29

7 respostas

14

[ Atualização: A partir do Mac OS X Mountain Lion 10.8, o Terminal suporta a seqüência de escape do Backtab, eliminando esse problema.]

A versão (s?) do nano nesses servidores às vezes envia um backtab (ESC [Z] ao mover o cursor deixado por um caractere, mas o Terminal não suporta esta sequência, então o nano acha que o cursor se moveu quando não tem e sua idéia sobre a posição atual do cursor está fora de sincronia com o terminal.

Por razões que não consigo entender, o nano envia um Backtab quando se move para a esquerda e o cursor é um caractere à direita de uma parada de tabulação. Da mesma forma, o IIRC envia um Tab (Controle-I) quando se move para a direita e o cursor é um caractere à esquerda de uma parada de tabulação. Não sei por que isso acontece ao redor de paradas de tabulação, em vez de sempre se mover para a esquerda / direita usando as mesmas seqüências de caracteres. A versão do nano enviada com o Mac OS X Lion 10.7 não faz isso.

O nano só faz isto quando o terminfo diz que a capacidade cbt é suportada. O terminfo padrão para o Terminal é xterm-256color , que declara esse recurso e o mapeia para a seqüência do Backtab. Uma solução alternativa é definir a variável de ambiente TERM como algo que não declara esse recurso. Você pode fazer isso na máquina local antes de chamar ssh ou no arquivo de inicialização do shell no host remoto. Configurá-lo para xterm-color será fácil, embora não seja recomendado, pois desativa outros comportamentos importantes (por exemplo, 256 cores, BCE, preservação alternativa do conteúdo da tela). (Uma abordagem mais pesada é personalizar o arquivo terminfo xterm-256color (ou xterm ) no host remoto para remover cbt .)

Recomenda-se personalizar o host remoto (de uma forma ou de outra) para que as personalizações não se apliquem localmente ou a outros hosts remotos, mas a solução mais simples é alterar a configuração de preferência do Terminal para usar xterm-color em vez de xterm-256color :

Terminal > Preferences > Settings > [profile] > Advanced > Declare terminal as:

Eu recomendo duplicar um perfil de configurações existente, personalizá-lo e usá-lo somente quando você estiver se conectando a esses hosts remotos.

    
por 09.11.2011 / 15:02
8

Eu estava tendo o mesmo problema. Eu encontrei este tópico que recomendou, entre outras soluções, uma variável de ambiente no servidor remoto :

export TERM=xterm-color

Adicionar isso ao ~ / .bash_profile resolveu o problema para mim. Essa solução é simples e tem o benefício de afetar apenas um usuário específico em um host específico.

    
por 19.06.2012 / 17:16
2

Eu tive o mesmo problema no programa MobaXTerm. A causa do problema era a tecla -K, que usei para ativar o numpad no Nano ao usar o PuTTY. Como eu descobri no MobaXTerm -K não é necessário (o teclado numérico funciona por padrão) e sem ele as teclas de seta funcionam corretamente e não insere o lixo aleatoriamente.

    
por 02.12.2013 / 15:24
1

OSX 10.7.4 com o Centos sendo executado como um sistema operacional convidado

Dentro das preferências do terminal OSX, configurações avançadas

Declare terminal as:xterm-color
Strict VT-100 keypad behaviour - TICKED!

Sem mais problemas:)

    
por 21.09.2012 / 07:36
1

Para usuários do MobaXterm. Se você não estiver usando -K e ainda estiver enfrentando o problema. Certifique-se de que as seguintes linhas estão comentadas no seu arquivo / etc / nanorc.

# set rebinddelete

# set rebindkeypad

    
por 11.06.2014 / 00:00
0

O provável problema é que, sim, tanto sua máquina local quanto seu servidor ESTÃO em sistemas unix que possuem nano, mas essas nano versões podem ser diferentes.

export TERM=xterm-color
    
por 16.09.2012 / 23:30
-1

Se o que você recebe é "Este é um texto neof" e o que você digitou é "Esta é uma linha de texto" (devo presumir que seu relatório está correto), então você tem uma chave de "controle" esquisito Mac (comando? Apple?). Porque o nano está usando control + keys para "pular" e você tem menos caracteres do que o digitado, então temos a) caracteres de desaparecimento b) seqüências de controle aparecendo do nada deduzindo que a) se torna b) é lógico.

Você também pode ter algum programa de hotkey / macro / whatnot desagradável. Eu suspeito que isso pertence ao superusuário e não ao serverfault, mas eu vou segurar a sinalização, talvez alguém tenha uma resposta realista, com SSH.

    
por 09.11.2011 / 09:13