Mapeando a tecla específica do teclado para o vim

1

Eu tenho um tremendo teclado: o Microsoft ergonômico keybord 4000. Eu também sou um usuário intensivo de vim no fedora.

O teclado tem um switch - FLock - que altera o valor de todas as teclas. Uma vez, eles são vistos por X como = Help = Undo = Redo e assim por diante. Mas eu não consegui mapear essas chaves para a ação no vim

xev antes do comutador:

state 0x2010, keycode 68 (keysym 0xffbf, F2), same_screen YES

xev após a mudança:

state 0x2010, keycode 139 (keysym 0xff65, Undo), same_screen YES

Então eu tentei um mapa básico no vim

:map u

Mas não funcionou. Qualquer sugestão seria bem vinda!

    
por piir 13.10.2010 / 12:28

3 respostas

1

Sugiro religar as chaves extras no nível X usando o xmodmap para que, em vez de todos os códigos de teclas funky como "desfazer", eles acionem códigos F padrão, como "F20". Isso os torna muito mais fáceis de vincular em programas como terminal e, portanto, vim.

Você precisará de algo assim em seu arquivo .xmodmaprc:

keycode 139 = F13

Em seguida, a chave se torna mapeável da maneira usual. A partir do seu arquivo .vimrc, você pode criar um mapeamento como este:

map <F13> YOUR_COMMAND_HERE

O acima funciona para ligações no nível X e funcionará para o gvim, no entanto os códigos-chave nos programas de terminal são um pouco diferentes. Você pode precisar informar ao vim sobre seu novo código de teclas para que ele saiba que a coisa louca enviada pelo terminal é um F13. Você pode fazer isso adicionando uma linha acima do seu mapa de chaves (veja acima) assim:

set <F13>=^[[25~

É claro que a sequência de códigos malucos que você precisa lá varia dependendo da tecla que você está ligando e do seu teclado e seu terminal, etc., mas é muito fácil de preencher. Usando o terminal você costuma usar abrir o .vimrc com vim. Preencha a primeira parte da linha set <F13>= e depois ainda no modo de inserção pressione CTRL + v para inserir um código de tecla visual, depois toque na sua nova tecla F que você está tentando ligar. Voilà, keycode encontrou um inserido.

    
por 13.10.2010 / 12:42
1

Existe uma solução para o vim que encontrei aqui usando o seguinte comando:

set < F13>={C-v}{myspecialkey}

A chave entre {} deve ser digitada como está e, em seguida, mapeie a chave com:

:map < F13> :undo<CR>
    
por 13.10.2010 / 14:33
0

Eu tenho o mesmo teclado e, no linux, as teclas "especiais" não são tão úteis como o normal <FN> .).

Por que não usar simplesmente os mapeamentos de tecla <FN> ? Apenas faça :nnoremap <F2> u e assim por diante para outras chaves?

E eu me pergunto, não é mais fácil simplesmente pressionar u para desfazer? (Sim, não no modo de edição).

    
por 15.12.2011 / 11:10