Fazendo o vim usar a tela alternativa

4

Essa coisa está me deixando louco. Eu já pesquisei na internet e no SE e encontrei muitas questões relacionadas, mas nenhuma resolveu o meu problema.

Estou usando o Zsh dentro do tmux. Até alguns dias atrás, tudo estava funcionando bem, mas agora, quando saio do vim, o conteúdo do buffer permanece na tela. Eu não quero isso. Eu obtenho esse comportamento em menos passando a opção -X . O problema é que as configurações do terminal vim parecem bem:

:set t_ti? : t_ti=^[[?1049h :set t_te? : t_te=^[[?1049l

A opção alternate-screen do tmux é on .

Não sei onde ver agora.

FWIW, aqui estão meus dotfiles: link

    
por Fuad Saud 08.01.2014 / 14:36

1 resposta

1

Primeiro, as configurações t_ti e t_te parecem boas.

Mas, para verificar o que é óbvio (desculpe) ...

Quando você diz ^[ , este deve ser um único caracter de controle (Escape), não dois caracteres ( ^ e [ ). Não sei como verificar isso especificamente de dentro do vim, mas no meu vim com :set t_ti? mostra o ^[ em uma cor diferente, o que sugere que é um caractere de controle.

Além disso, você não mencionou qual emulador de terminal e plataforma está sendo executado. Pode ter um impacto e você deve colocá-lo em sua pergunta, junto com versões do vim e tmux. No entanto, se você está dizendo que você já pode demonstrar os dois tipos de comportamento (desejado e indesejado) no mesmo problema terminal usando o comando less ( sem e com -X , respectivamente), então isso sugeriria que suas configurações de emulador de terminal e tmux estão corretas, e minha suspeita vai para o vim.

Confirme isto da seguinte maneira (lembre-se que ^[ deve ser inserido como um controle caractere, e. Ctrl-v seguido por Escape ):

less /etc/hosts         # should use alternate screen (desired)

less -X /etc/hosts     # should leave it's output on screen (undesired)

echo -n "^[[?1049h"; less -X /etc/hosts; echo -n "^[[?1049l"
    # should use alternate screen (desired)

Se esse último comando der o comportamento desejado com menos. Tente a mesma abordagem com o vim:

echo -n "^[[?1049h"; vim /etc/hosts; echo -n "^[[?1049l"
    # should use alternate screen (desired)

Depois de sair do vim, a tela deve ser restaurada para o conteúdo anterior (seu comportamento desejado). Se assim for, então você poderia usar isso para montar um solução muito cludenta com um alias ou um script de wrapper. Mas se você chegar a esta fase em seu diagnóstico, é quase certamente um problema com o vim ou parte de sua configuração não enviando o t_te sequência que sai, e eu começaria movendo meu .vimrc e .vim para fora do caminho e testando com uma configuração limpa:

cd
mv .vimrc .vimrc-safe
mv .vim .vim-safe

Então é o tempo de corte binário, que deve ser divertido. :-) Espero que isso ajude.

    
por 30.04.2014 / 14:00

Tags