Como mapear as teclas PageDown e PageUp para funcionar normalmente

2

Quando abro um documento usando vi ou vim , não consigo navegar na página usando as teclas Page Up e Page Down . Ao pressionar essas teclas, o vim parece se comportar de forma anormal, e muda o caso do caractere abaixo do cursor. Em seguida, leva alguns segundos para voltar novamente no modo insert .

Por favor, deixe-me saber como mapear essas teclas, de modo que, ao pressioná-las, eu possa rolar as páginas suavemente, assim como Ctrl + ( f / / u / d ).

Atualizar

Informações da máquina e do Vim

$ cat /etc/*-release  
Red Hat Enterprise Linux Server release 5.5 (Tikanga)


$ vim --version
VIM - Vi IMproved 7.0 (2006 May 7, compiled Jun 12 2009 07:08:36)

Nota

Estou usando o Putty para me conectar a esta máquina.

    
por mtk 27.09.2012 / 11:11

1 resposta

6

Atualização:

I am using Putty to connect to this machine

Então eu adivinhei corretamente e minha resposta abaixo provavelmente se aplica.

Resposta original:

Não há informações suficientes em sua pergunta para ter certeza do seu problema, enquanto esperamos, deixe-me fornecer ao público uma pequena história:

O emulador de terminal e o editor

Se você acessar um computador Linux usando um emulador xterm como o Putty, sua chave PgUp enviará quatro caracteres Escape [ 5 ~ para o sistema Linux.

O sistema Linux processa isso e, em seguida, transmite qualquer pressionamento de tecla não aplicado ao aplicativo.

O aplicativo, vim, usa uma biblioteca do sistema (acredito) para traduzir as seqüências de caracteres de volta para "chaves" com base no valor da variável de ambiente TERM e a entrada correspondente em terminfo

Se o terminfo não definir o PgUp (ou qualquer outra chave) como Escape [ 5 ~ , o Vim processará (provavelmente) os quatro caracteres individualmente.

"Muitos códigos de teclas do cursor começam com um Esc. O Vim deve descobrir se este é um único hit da tecla Esc ou o início de uma seqüência de teclas do cursor. Espera para um próximo personagem chegar. Se não chegar dentro de um segundo a Esc Esc single é assumido. " Assim, o vim espera um pouco para ver se Esc está querendo sair do modo de inserção.

[ e 5 são comandos válidos do Vim. Mas talvez Vim veja o Esc como sinalizando o início de uma seqüência de escape que ele não reconhece - ele tem que adivinhar onde essa sequência termina e reiniciar interpretando os caracteres como comandos ou dados daquele ponto.

~ é um comando vim para alternar o caractere do caractere sob o cursor.

Um final feliz

Defina TERM corretamente (para corresponder às configurações de Putty / emulador) e assegure que o terminfo tenha uma definição de PgUp etc. No Unix-land, os teclados existiam antes do IBM PC nascer, alguns deles tinham uma kbd> key, então este recurso de chave é chamado de kpp .

  $ infocmp xterm | grep kpp
    knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, mc0=\E[i, mc4=\E[4i,

Postscript

how to map these keys

Putty não tem um recurso de mapeamento de chave arbitrário, até onde eu sei (acho que estava na lista de desejos) Então ...

  1. Configure o Putty para emular um tipo de terminal bem conhecido e bem definido. Infelizmente não há algo que o xterm tenha que fazer.

  2. Garanta que o Putty informe à caixa do Linux qual tipo de terminal ele está emulando. Em parte, isso é definir as configurações do Putty e, em parte, usar um protocolo que comunique o TERM (por exemplo, o suporte ao ssh do Putty) em vez de um que não o faça (suporte do Telnet do Putty).

  3. Assegure-se de que TERM esteja definido como deveria ( echo $TERM ).

  4. Certifique-se de que a entrada terminfo para os valores TERM define as chaves desejadas (veja acima).

  5. Certifique-se de que a chave PgUp envie o que deveria. No Vim, entre no modo de inserção e pressione Ctrl + V e depois em PgUp

por 27.09.2012 / 12:32