Screen - comportamento estranho depois de sair do Vim

3

Estou enfrentando problemas com minha tela de configuração.

Meu screen.rc é muito simples e se parece com isso:

altscreen on
termcapinfo xterm ti@:te@

Eu queria configurar a tela para ter o mesmo comportamento como se eu estivesse conectado diretamente usando o cliente SSH como MobaXterm . Então, o que eu queria alcançar era:

  • Uma possibilidade de rolar em vim (sem usar o conjunto de mouse a ) com o mouse
  • Rolagem da saída do terminal com o mouse (sem Ctrl + A Esc )
  • Após sair de vim e outros editores, etc. Quero ver meus comandos anteriores, não a saída vim nem minha tela limpa.

Também é impossível configurar .vimrc (e arquivos de configuração local semelhantes) porque estou usando a tela para me conectar a muitas máquinas e não consigo modificar .vimrc em todas elas.

Eu descobri que conseguir tudo isso é impossível. Então, com essas duas linhas no meu .screenrc eu sou capaz de rolar a saída do terminal, mas em vim eu tenho que usar o teclado - ok.

Então, indo direto para o problema.

Quando fecho vim , obtenho um comportamento muito estranho. A saída do console é como era antes de abrir vim , então é o que eu quero. Mas o prompt está no topo da janela, em vez de estar após o último comando (executando vim ). Então, estou escrevendo em cima de alguma saída anterior.

Espero que você entenda. Sabes como arranjar isso? Qualquer ajuda seria apreciada.

Não sei se é significativo, mas estou conectando usando MobaXterm a uma máquina virtual quando tenho minha tela configurada. Talvez seja também relacionado ao SSH, quem sabe.

Edit: eu tentei também outros clientes ssh como Putty e é o mesmo

    
por damian 19.11.2015 / 12:07

3 respostas

1

Descobrimos que o problema foi causado por uma linha estúpida em .bashrc

TERM=xterm; export $TERM

então, depois de executar a tela, ela tinha TERM=xterm em vez de TERM=screen . Depois de remover esta linha, o problema desapareceu.

    
por 01.12.2015 / 10:46
2

O sintoma descrito é de uma sequência de escape rc (restaurar o cursor). Pensando nisso, a fonte provável do problema é o vim:

  • com o .screenrc fornecido, o programa screen simula o recurso de tela alternativa do xterm.
  • isso é feito usando as seqüências de controle terminfo smcup e rmcup (termcap ti e te )
  • ao alternar para a tela alternativa, o xterm (a) salva a posição do cursor, (b) limpa a tela alternativa e (c) exibe a tela alternativa.
  • ao alternar de a tela alternativa, xterm (a) restaura a posição do cursor para a tela normal e (b) exibe a tela normal.
  • essas operações são feitas em seqüências de controle único, não divididas. Na descrição do terminal, você pode (saída infocmp) ver um 1049 .
  • o programa screen simula essas operações.
  • no entanto, ao contrário xterm, ele não usa uma única variável para a posição do cursor salva / restaurada: uma verificação rápida mostra que, se
    • eu salvo a posição do cursor (com tput sc ),
    • alternar para / da tela alternativa ( tput smcup
    • seguido por tput rmcup ) e, finalmente,
    • restaura a posição do cursor ( tput rc ),
    • , o cursor vai para a posição salva por tput sc .

vim - e plugins do vim - podem enviar seqüências de escape. Parece que algo durante a saída do vim está enviando a seqüência de escape para restaurar o cursor. Em uma verificação rápida aqui, o vim se comportou corretamente (mas as configurações e as versões são diferentes). Então eu checo os plugins.

Se eu estivesse depurando este caso, eu capturaria os caracteres enviados para a tela (usando script , por exemplo) e procuraria as sequências mais usadas para rc :

  • escape 7
  • escape [ u

Seria bom se screen correspondesse mais de perto ao comportamento do xterm, mas no final das contas parece haver um problema com vim enviando seqüências inesperadas de cursores de salvar / restaurar.

Leitura relacionada:

por 20.11.2015 / 03:12
0

Encontrei um tipo de solução aqui: Como configurar restauração de tela em um terminal? então para vim:

For vim you can include something like

set t_ti= t_te=

in you ~/.vimrc.

    
por 30.01.2018 / 07:13