Por que o vim não está sendo aberto em sua própria tela?

2

Quando eu digito vim em xterm , o programa não é aberto em sua própria tela, mas exatamente na mesma em que escrevo comandos. Deixe-me explicar: por exemplo, digamos que eu digite o terminal ls -l /usr/bin e obter uma lista grande de programas. Depois disso, eu digito vim e o programa é aberto, mas se eu rolar para cima, ainda poderei ver a lista de programas em /usr/bin . Tanto quanto me lembro, quando eu abri vim iria começar em uma tela limpa, sem nada por trás disso, então se eu quisesse voltar para o terminal eu tive que sair.

Por que o vim está se comportando assim e como posso alterá-lo?

    
por Carlos Diaz 08.01.2014 / 03:01

3 respostas

1

A questão é sobre o comportamento do aplicativo versus o recurso tela alternativa do xterm.

vim é um aplicativo termcap. Ele usa o banco de dados do terminal (possivelmente fornecido por ncurses), mas faz todo o seu próprio gerenciamento de tela (como qualquer outro aplicativo termcap).

Por convenção, os aplicativos termcap e curses enviam sequências de escape na inicialização e ao retornar do modo de tela inteira. Essas seqüências de escape vêm de capacidades de terminal (a origem do nome "termcap").

Os recursos para iniciar e finalizar o modo de endereçamento de cursor em tela inteira são denominados smcup e rmcup respectivamente (em terminfo, enquanto ti e te para termcap). Por convenção, aqueles podem ter as seqüências de escape para alternar de / para a tela alternativa. Enquanto a tela alternativa está ativa, o xterm não permite a rolagem.

No entanto, a convenção não garante que todas as descrições de terminal para xterm sejam as mesmas. Alguns empacotadores modificam a descrição porque

  • cerca de metade dos usuários gostam do recurso, meio que não gostam dele (cada metade insiste que é a maioria) e
  • nem todos os terminais são configuráveis como xterm.

    No xterm, você pode ativar / desativar a mudança para / da tela alternativa. Uma minoria de outros terminais que configuram TERM=xterm permitem que você faça isso. Essa falta de configurabilidade agrava a metade dos usuários que não gostam do recurso.

Dependendo de qual pacote tenha modificado as coisas, você pode descobrir que TERM=xterm faz uma coisa com a tela alternativa, enquanto TERM=xterm-256color faz a outra. Se você usar infocmp para procurar, uma descrição não modificada terá esses recursos configurados para informar ao aplicativo como usar a tela alternativa:

rmcup=\E[?1049l, smcup=\E[?1049h, 

Leitura adicional:

por 28.10.2016 / 01:10
0

UPDATE : Aparentemente eu interpretei mal a pergunta, e a resposta abaixo está errada. No entanto, alguns comentários sobre esta resposta esclarecem a questão, por isso estou deixando isso.

vim é um "programa de terminal". Ou seja, ele não sabe nada sobre o X Window ou qualquer outra interface gráfica. Se você executar vim digitando vim em um xterm, ele será executado corretamente. O Xterm tem uma exibição endereçável por célula de caracteres, então vim irá trabalhar com isso.

Você pode obter vim para executar em seu próprio xterm: xterm -e vim whatever.file.name & .

Ou você pode executar uma variante de vim que entenda o sistema de janelas X: gvim . Quando digito gvim text.file.name em um xterm e o executo, recebo uma janela separada contendo uma versão da GUI de vim .

    
por 08.01.2014 / 03:32
0

Depois que entendi a pergunta, descobri uma possível resposta, porque percebi essa mudança de comportamento há algum tempo.

Acredito que isso vem de uma diferença nos recursos "terminfo" entre xterm e xterm-256color. Vim usa ncurses para fazer a manipulação de caracteres na janela, e "terminfo" é parte disso. Dado isso, você poderia olhar para datas (ctime, provavelmente) dos arquivos de capacidade terminfo fornecidos abaixo. Isso explicaria por que você não fez nada, mas ainda viu uma mudança - os arquivos terminfo foram alterados.

Eu encontrei arquivos terminfo para xterm e xterm-256color em /usr/share/terminfo/x/xterm e /usr/share/terminfo/xterm-256color , respectivamente. Esses são arquivos binários, mas você pode descompactá-los com: infocmp -L /usr/share/terminfo/x/xterm > ~/xterm.ti . Você pode recompilar o arquivo de texto xterm.ti com o comando tic . Eu acredito que o que você está falando está relacionado aos recursos "enter_ca_mode" e "exit_ca_mode". Para testar isso, fiz uma entrada terminada alternativa do xterm para mim:

mkdir ~/.TERMINFO
infocmp -L /usr/share/terminfo/x/xterm > ~/xterm.ti
// edit termifo.ti to remove enter_ca_mode" and "exit_ca_mode"
tic ~/xterm.ti

Isso deixa um arquivo ~/.TERMINFO/x/xterm no meu diretório $ HOME. A variável de ambiente TERM tinha um valor de "xterm" naquela janela do xterm. Disparar vim novamente fez com que vim se comportasse mais ou menos ao descrever o comportamento novo e indesejável. Você provavelmente terá que excluir ~/.TERMINFO e o conteúdo para se livrar dos efeitos do arquivo de recursos do xterm modificados.

Meu pensamento seria decompilar as entradas terminográficas xterm e xterm-256color usando infocmp -L e ver se elas têm valores "enter_ca_mode" e "exit_ca_mode" diferentes, ou se o xterm está ausente, e xterm-256color, alguma coisa. Então prossiga de lá. Por que vale a pena, no meu laptop Arch linux atualizado, o xterm e o xterm-256color tinham recursos termcap quase idênticos.

    
por 10.01.2014 / 04:54