Ao executar o vim na tela GNU, estou descobrindo que combinações de CTRLcom as setas e as teclas Pg * não funcionam como esperado.
Estou usando o vim-gnome
pacote Ubuntu 10.10 .
Em uma máquina diferente, também executando o Ubuntu, isso funcionou sem problemas; infelizmente não tenho essa configuração disponível para mim agora.
Há uma pergunta relacionada aqui: Como corrigir setas Ctrl + no Vim?
No entanto, a solução sugerida é remapear as combinações de teclas do vim para trabalhar com o emulador de terminal, nesse caso o PuTTY. Não me lembro de fazer nada desse tipo e suspeito que exista uma opção de configuração de tela que resolva esse problema.
Há também um tópico na lista de discussão do gnu-screen que sugere que a execução do vim via $ TERM=xterm vim
é uma correção ou solução alternativa apropriada. Isso funciona, mas estou um pouco preocupado que possa haver efeitos colaterais. Também não parece familiar o suficiente para ser a solução que eu configurei na outra máquina (se for necessária uma solução).
fonte
term xterm
ao meu~/.screenrc
arquivo o corrigiu. Obrigado novamente!Respostas:
Conforme indicado na atualização, adicionar
term xterm
ao~/.screenrc
arquivo parece corrigir esse problema.fonte
screen
não apenas propagar a$TERM
variável de ambiente em vez de substituí-la"screen"
. Presumivelmente, existem algumas circunstâncias em que é importante ter$TERM == screen
.TERM=screen
é que os aplicativos em execução no interior estão se comunicando dentro de um terminal da Screen: as seqüências de controle que eles enviam e recebem são as da Screen, não as de qualquer terminal que a própria tela esteja sendo exibida. Como você pode desanexar uma sessão da Tela e recolocá-la em um tipo diferente de terminal, essa camada de indireção é necessária.xterm
?infocmp screen
einfocmp xterm
, e as seqüências de escape da tela com as seqüências de escape xterm . Eu não tenho um colapso para oferecer; a maioria dos aplicativos não se importa, mas alguns podem se comportar de maneira irritante.Existem algumas outras maneiras de configurar o terminal que funcionam nos processos em execução:
Em uma instância de tela em execução, pressionar
^A
-:
e emitir o comandoterm xterm
fará com que as telas recém-abertas nessa instância iniciem com a$TERM
variável de ambiente definida comoxterm
; isso, por sua vez, será propagado paravim
instâncias invocadas . Essas instâncias do vim exibirão um comportamento adequado em relação aos combos CTRL; Ainda não descobri nenhum efeito colateral dessa estratégia. Este comando não afeta as telas existentes. É claro que este comando pode ser usado em um~/.screenrc
arquivo, portanto, é possível que esse método tenha sido usado na outra máquina.Em uma instância do vim em execução, o comando
set term=xterm
fará com que os CTRL-combos funcionem nessa instância do vim. Isso tem o efeito colateral de desconectar a área de transferência do X (ie@*
e@+
) por razões que ainda não entendi. Curiosamente, o efeito colateral da área de transferência também acontece quando o comando:set term=screen
é executado em uma instância do vim iniciada$TERM=xterm
.fonte
O problema subjacente é que o mapeamento realizado
screen
entre o terminal real (identificado pelaTERM
variável de ambiente externascreen
) e a emulação internascreen
é incompleto.Se você testá-lo (usando vttest ou tack ), poderá notar deficiências no
A tentativa de corrigir esses problemas através da criação
term
em.screenrc
tem o inconveniente de que ele funciona apenas para um dado real-terminal, e não é portável para outras implementações do terminal. As notas da documentaçãoHá outra solução (com uma desvantagem diferente), usando esse recurso da
screen
documentação :O ncurses fornece várias descrições alternativas úteis de terminais para este caso, por exemplo, screen.xterm-new , para reparar problemas no mapeamento da tela. Na prática, eu uso
TERM=xterm-new
e, ao executar a tela, obtenho um mapeamento utilizável das teclas de função.Voltando à
term
configuração da tela , ao testar, você pode perceber que ainda existem problemas com o mapeamento, abordados nessas alternativas. Se fosse possível obter uma descrição precisa do terminalterm
, essas alternativas seriam aliases simples parascreen
. Eles não são.ncurses não fornece
screen.xterm
(sic) porque:TERM=xterm
é amplamente utilizado incorretamente em emuladores de terminal que diferem do xterm; adicionar esse mapeamento apenas agravaria essa situação (consulte, por exemplo, Por que não usar TERM definido como "xterm"? nas Perguntas frequentes sobre ncurses)screen.xterm
é menos provável que o nome alternativo seja instalado em sistemas remotos (consulte o comentário sobre alterações de junho de 2015 no banco de dados do terminal).No geral, no entanto, o uso de nomes alternativos é uma melhoria em relação ao uso
term
no seu.screenrc
: ele resolve mais problemas do que cria. O inverso é verdadeiro daterm
configuração.fonte