Como intuited afirmou em sua atualização, adicionar term xterm
ao arquivo ~/.screenrc
parece corrigir esse problema.
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).
Como intuited afirmou em sua atualização, adicionar term xterm
ao arquivo ~/.screenrc
parece corrigir esse problema.
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
.
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
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 triesscreen
(orscreen-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.
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) 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
.
Tags vim gnu-screen ubuntu