Como definir códigos de tecla manualmente no vim?

2

Às vezes, quando eu ligo o vim, minha tecla Insert não funciona (preciso usar i ) e minhas flechas não funcionam (elas me dão letras ).

Suponho que isso tenha a ver com minhas chaves não sendo mapeadas corretamente. Como posso consertar isso de uma vez?

    
por n0pe 20.08.2011 / 05:31

1 resposta

2

Você precisa declarar as sequências de escape enviadas pelos seus terminais usuais em ~/.vimrc . Em teoria, as seqüências de escape dependem do terminal. Na prática, se uma seqüência de escape corresponde a uma determinada tecla em um determinado terminal, outros terminais enviam-na para a mesma chave ou não a enviam de forma alguma, portanto, você pode acumular as definições e não se preocupar com conflitos. / p>

Para descobrir qual sequência de escape uma tecla envia, entre no modo de inserção e pressione Ctrl + V seguido pela tecla. Isso insere a seqüência de escape literalmente.

Coloque diretivas como estas no seu ~/.vimrc (usando as sequências de escape que você observou):

function Allmap(mapping)
  execute 'map' a:mapping
  execute 'map!' a:mapping
endfunction
call Allmap('   <ESC>[A         <Up>')
call Allmap('   <ESC>[B         <Down>')
call Allmap('   <ESC>[C         <Right>')
call Allmap('   <ESC>[D         <Left>')
call Allmap('   <ESC>[F         <End>')
call Allmap('   <ESC>[H         <Home>')
call Allmap('   <ESC>[5~        <PageUp>')
call Allmap('   <ESC>[6~        <PageDown>')
call Allmap('   <ESC>[k4~       <C-Left>')
call Allmap('   <ESC>[5D        <C-Left>')
call Allmap('   <ESC>Od         <C-Left>')
call Allmap('   <ESC>[k6~       <C-Right>')
call Allmap('   <ESC>[5C        <C-Right>')
call Allmap('   <ESC>Oc         <C-Right>')
    
por 21.08.2011 / 02:20