Como substituir o buffer de tela do vim pela atividade anterior do bash após sair?

14

Estou tentando descobrir o que é um recurso bash (ou vim). Aqui está o cenário. Estou em um terminal do bash, edite algo com o vim e depois volte para o bash. Em alguns terminais, a tela da sessão do vim desaparece para mostrar a atividade anterior do shell bash (é isso que eu quero?).

Em outros, o buffer da tela da sessão do vim permanece (ocultando a atividade antiga do shell bash). Terei que limpar a tela ou esperar até que minha atividade do bash empurre esse buffer de sessão do vim para fora da tela.

Como posso controlar esse comportamento para substituir o buffer de sessão do vim pela atividade anterior do bash?

Obrigado Tim

Comunidade
fonte
superuser.com/questions/871170 está relacionado.
JdeBP

Respostas:

10

O Vim envia t_tie t_kspara o terminal quando uma sessão é iniciada t_tee t_kequando termina. As seqüências t_tie t_tefazem com que o terminal mude para sua tela alternativa.

No seu ~/.vimrcarquivo, você pode vimdeixar o documento na tela quando ele sair incluindo esta linha:

set t_ti=""

se você tiver uma linha semelhante a essa, removê-la deve fazer com que o conteúdo do terminal anterior apareça quando você sair vim.

Pausado até novo aviso.
fonte
4

Uma causa para esse problema pode estar usando o programa screen. Acho que quando estou em uma screensessão, o vim não pode retornar o estado do terminal.

Não tenho certeza se é específico para tela ou para a combinação tela / vim no Ubuntu 15.10. Mesma causa, como descrito acima, acho que screentem termcap diferente.

teknopaul
fonte
2
Adicionar altscreen onao arquivo ~ / .screenrc resolve o problema da tela.
BartBiczBoży
3

Basta adicionar uma linha ao seu ~/.bash_profilearquivo para exportar TERM como xterm cada vez que você fizer login. Faça o seguinte;

echo "TERM=xterm; export TERM" >> ~/.bash_profile

Agora, da próxima vez que você fizer o login, o seu problema será corrigido e, se você não quiser fazer o login novamente, poderá ...

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile
ekerner
fonte
1
não seria export $TERM?
chrsblck
1
@chrsblck: Não, porque exportexporta o nome (por exemplo TERM, neste caso) como uma variável de ambiente em vez de uma variável local. Se você usasse export $TERMneste exemplo, o $TERMvar resolveria para xtermdefinir o env var $xterm, que provavelmente não está definido. Boa pergunta, porém, sempre parece errado para mim também.
ekerner
2

Tim. Ambas as respostas acima estão corretas. O Vim muda o terminal para uma "tela alternativa" se a capacidade de fazer isso estiver definida na entrada termcap para $ TERM.

Você diz "em alguns terminais (... funciona bem ...)" e "em outros (... funciona errado ...)"

Você está executando exatamente o mesmo emulador de terminal para todos esses terminais?

Por exemplo, na minha caixa Linux doméstica, eu tenho o gnome-terminal, xterm, Konsole, yakuake e provavelmente mais alguns que eu esqueci, junto com os "terminais virtuais" associados ao ctrl-alt-F1 ... Ctrl-Alt-F6 ou mais. A maioria deles pode funcionar com a entrada termcap "padrão" para "xterm" - exceto os terminais virtuais que possuem uma definição de terminal chamada "linux".

Verifique o próprio emulador de terminal e o valor de $ TERM nos terminais que funcionam e nos que não funcionam, para ver o que é diferente. Além disso, se você estiver conectado como um usuário diferente às vezes, isso pode estar no centro do problema - já que cada usuário tem seu próprio .bashrc, várias configurações podem diferir de usuário para usuário.

Espero que ajude!
-pbr

pbr
fonte
1

Isso tem a ver com o seu terminal e as configurações do seu equipamento que lidam com as informações do terminal. Uma solução portátil é usar o GNU Screen. Abra uma janela para o Vim e outra para o Bash, separando as duas sessões. Se você estiver usando um terminal gráfico como xterm no X11, Gnome Terminal no Gnome ou Terminal.app no ​​OS X, poderá abrir uma nova janela ou guia para obter o mesmo efeito.

wilhelmtell
fonte