vim dentro da tela: recuo exibido incorretamente

1

Quando eu usei o vim fora de uma tela unix para editar um arquivo, o vim exibe o arquivo corretamente. No entanto, quando abro o mesmo arquivo dentro de uma tela unix, o recuo "parece" se tornar confuso.

Eu digo "parece" porque o recuo está realmente correto (se você vir o cursor destacado na segunda imagem, ele está realmente no início da linha correto)

Qual pode ser o problema aqui?

EDIT: Não apenas o meu arquivo, até mesmo as mensagens vim parece confuso Eutenteitodasascoisaspossíveis,tambémcodifiqueiocódigoparaoCRLFnocódigodetela,masnãoconseguimelivrardesseproblema.Finalmentemudouparaotmuxefuncionabem.

Foradatela:

Dentrodatela:

    
por amisax 13.10.2016 / 12:19

1 resposta

1

A imagem aparece para mostrar esses recursos funcionando :

  • cor (talvez)
  • cursor-addressing ( algo moveu o cursor para o lugar certo)
  • Guias
  • (desconhecido: se o terminal foi reivindicado para suportar as guias de hardware, mas não fez nada, essa segunda linha começaria na margem esquerda)

Mas essa segunda linha é o problema. O Vim poderia ter tentado mover o cursor diretamente para baixo a partir da chave (com um avanço de linha) e obter um retorno de linha / retorno de carro. Isso poderia explicar o espaço, e o vim faz esse tipo de otimização em screen.c :

    else if (plan == PLAN_NL)
    {
        if (noinvcurs)
        screen_stop_highlight();
        while (screen_cur_row < row)
        {
        out_char('\n');
        ++screen_cur_row;
        }
        screen_cur_col = 0;
    }

Nas suas configurações de stty , isso seria onlcr :

 onlcr (-onlcr)
             Map (do not map) NL to CR-NL on output.

que parece estar desligado normalmente. Uma de suas configurações stty pode ter confundido vim (ou tela), então o resultado é como mostrado.

Por exemplo, em uma verificação rápida, eu fiz isso (com um caractere de tabulação literal)

$ stty ocrnl
$ cat >foo
$ cat >foo <<EOF
if(a) {
        /*then b */
}
EOF
$ vim foo

e veja isso (demonstrando que o vim pode ser confundido pela configuração de ocrnl ):

if(a) {
        /*then b */

                   }

Mas então (sair do vim) e

$ stty -ocrnl
$ vim foo

mostra

if(a) {
        /*then b */
}

Por que vale a pena, o vi-like-emacs faz a coisa certa neste caso.

    
por 13.10.2016 / 23:52