Corrigindo CTRL- * no vim sob a tela GNU

9

Ao executar o vim sob a tela GNU, eu estou achando que combinações de CTRL com as teclas seta e Pg * não funcionam como esperado.

Estou usando o pacote Ubuntu 10.10 vim-gnome .

Em uma máquina diferente, também rodando o Ubuntu, isso funcionou sem problemas; infelizmente eu não tenho essa configuração disponível para mim agora.

Há uma questão relacionada aqui: Como corrigir Ctrl + setas em Vim?

No entanto, a solução sugerida é remapear os atalhos de teclado do vim para trabalhar com o emulador de terminal, nesse caso o PuTTY. Não me lembro de fazer nada do tipo e suspeito que existe uma opção de configuração de tela que resolverá esse problema.

Há também um tópico na lista de discussão do gnu-screen, que sugere que rodar o 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 configurei na outra máquina (se fosse necessária uma solução).

    
por intuited 06.02.2011 / 20:40

3 respostas

3

Como intuited afirmou em sua atualização, adicionar term xterm ao arquivo ~/.screenrc parece corrigir esse problema.

    
por 25.02.2011 / 04:52
2

Existem algumas outras maneiras de definir o terminal que funciona nos processos em execução:

  • Em uma instância de tela em execução, pressionar ^A - : e emitir o comando term xterm fará com que as telas recém-abertas dessa instância iniciem com o ambiente $TERM variável definida como xterm ; isso, por sua vez, será propagado para invocar vim instances. Essas instâncias vim exibirão o 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. Este comando pode ser usado em um arquivo ~/.screenrc , então é possível que esse método tenha sido usado na outra máquina.

  • Em uma instância vim em execução, o comando set term=xterm fará com que o CTRL-combos funcione nessa instância vim. Isso tem o efeito colateral de desconectar a área de transferência do X (por exemplo, @* e @+ ) por motivos que eu 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 vim iniciada com $TERM=xterm .

por 26.03.2011 / 09:41
2

O problema subjacente é que o mapeamento feito por screen entre o terminal real (identificado pela variável de ambiente TERM fora de screen ) e a emulação dentro de screen está incompleta.

Se acontecer de você testá-lo (usando vttest ou tack ), você pode notar deficiências para

  • cores
  • chaves especiais

A tentativa de corrigir esses problemas definindo term em .screenrc tem a desvantagem de funcionar apenas para um determinado terminal real e não é portável para outras implementações de terminal. A documentação faz anotações

The use of the term command is discouraged for non-default purpose.

Existe outra solução (com uma desvantagem diferente), usando esse recurso de screen documentação :

When screen tries to figure out a terminal name for itself, it first looks for an entry named screen.term, where term is the contents of your $TERM variable. If no such entry exists, screen tries screen (or screen-w, if the terminal is wide (132 cols or more)). If even this entry cannot be found, vt100 is used as a substitute.

ncurses fornece várias descrições úteis do terminal alternativo para este caso, por exemplo, screen.xterm- novo , para reparar problemas no mapeamento da tela. Na prática, uso TERM=xterm-new e, ao executar a tela, obtenho um mapeamento utilizável das teclas de função.

Referindo-se novamente à configuração term da tela, nos testes, você poderá notar que ainda há problemas ainda com o mapeamento, que são abordados nessas alternativas. Se fosse possível obter uma descrição precisa do terminal usando term , essas alternativas seriam aliases simples para screen . Eles não são.

não fornecem screen.xterm (sic) porque:

  • TERM=xterm é amplamente utilizado para emuladores de terminal que diferem do xterm; adicionar este mapeamento só agravaria essa situação (veja por exemplo Por que não usar o TERM definido como "xterm"? na FAQ ncurses)
  • o nome alternativo screen.xterm é menos provável de ser instalado em sistemas remotos (ver comentário de alteração de junho 2015 no banco de dados do terminal).

No geral, no entanto, usar os nomes alternativos é uma melhoria em relação ao uso de term no seu .screenrc : ele resolve mais problemas do que cria. O inverso é verdadeiro para a configuração term .

    
por 13.02.2016 / 15:01