quarta-feira, 25 de março de 2009

Criando e evitando o remapeamento

O resultado de um mapeamento é inspecionado por outros mapeamentos dentro dele.

Por exemplo:
:map <F2> G<F3> 
:imap <F2> <Esc><F3>
:map <F3> oDate: <Esc>:read !date<CR>kJ
Em modo normal <F2> é mapeado para saltar para a última linha e pressionar <F3>.
Em modo inserção <F2> é mapeado para sair do modo inserção com <Esc> e pressionar <F3>.
Finalmente, <F3> é mapeado para fazer a inserção da data.
Com isso há uma redução do texto a ser mapeado.

Mas esse remapeamento pode causar problemas:
:map Q gq
Mapeie 'Q' para 'gq' para que formate texto.
:map gQ Q
Mapeie 'gQ' para 'Q' para que entre em modo Ex como 'Q' original faz.

O que acontece agora é que se digitar 'gQ' ele será mapeado para 'Q' que por sua
vez será mapeado para 'gq'. Ou seja ao invés de entrar em modo Ex ele formata
texto.

Para evitar esse remapeamento use ':noremap':
:noremap gQ Q
agora o vim sabe que 'Q' não deve ser inspecionado para remapeamentos.

Isso é muitas vezes usado para redefinir um comando.

Não-remapeamentos e modos do vim:
:noremap  Normal, Visual e Operador-pendente
:vnoremap Visual
:nnoremap Normal
:onoremap Operador-pendente
:noremap! Inserção e Linha de comando
:inoremap Inserção
:cnoremap Linha de comando

0 comentários:

Postar um comentário