Ir para o conteúdo

Mapeamentos

Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende da criatividade do usuário e do quanto conhece o Vim, com eles podemos controlar ações com quaisquer teclas, mas antes temos que saber que para criar mapeamentos, precisamos conhecer a maneira de representar as teclas e combinações. Alguns exemplos:

Notação Tecla mapeada
<c-x> Ctrl-x
<left> seta para a esquerda
<right> seta para a direita
<c-m-a> Ctrl-Alt-a
<cr> Enter
<Esc> Escape
<leader> normalmente \
<bar> | pipe
<cword> palavra sob o cursor
<cWORD> palavra sob o cursor, delimitada por espaços
<cfile> arquivo sob o cursor
<sfile> arquivo sendo carregado com :source
<up> equivale clicar em `seta acima'
<m-f4> a tecla alt (m) mais a tecla f4
<c-f> Ctrl-f
<bs> backspace
<space> espaço
<tab> tab

No Vim podemos mapear uma tecla para o modo normal, realizando determinada operação e a mesma tecla pode desempenhar outra função qualquer em modo de inserção ou comando, veja:

" mostra o nome do arquivo com o caminho
map <F2> :echo expand("%:p")<cr>
" insere um texto qualquer
imap <F2> Nome de uma pessoa
A única diferença nos mapeamentos acima é que o mapeamento para modo de inserção começa com i, assim como para o modo “comando” : começa com c no caso cmap. O comando :echo pode ser abreviado assim: :ec.

Recarregando o arquivo de configuração

Cada alteração no arquivo de configuração do Vim só terá efeito na próxima vez que você abrir o Vim a menos que você coloque isto dentro do mesmo

" recarregar o vimrc
" Source the .vimrc or _vimrc file, depending on system
if &term == "win32" || "pcterm" || has("gui_win32")
   map ,v :e $HOME/_vimrc<CR>
   nmap <F12> :<C-u>source ~/_vimrc <BAR> echo "Vimrc recarregado!"<CR>
else
   map ,v :e $HOME/.vimrc<CR>
   nmap <F12> :<C-u>source ~/.vimrc <BAR> echo "Vimrc recarregado!"<CR>
endif
Agora basta pressionar <F12> em modo normal e as alterações passam a valer instantaneamente, e para chamar o vimrc basta usar.
,v
Os mapeamentos abaixo são úteis para quem escreve códigos HTML, permitem inserir caracteres reservados do HTML usando uma barra invertida para proteger os mesmos, o Vim substituirá os “barra alguma coisa” pelo caractere correspondente.
inoremap \& &amp;
" <lt> representa o caractere `<', que sozinho iniciaria
" o nome de uma tecla especial
inoremap \<lt> &lt;
inoremap \> &gt;
inoremap \. &middot;
O termo inoremap significa: em modo de inserção não remapear, ou seja ele mapeia o atalho e não permite que o mesmo seja remapeado, e o mapeamento só funciona em modo de inserção, isso significa que um atalho pode ser mapeado para diferentes modos de operação.\

Veja este outro mapeamento:

map <F11> <Esc>:set nu!<cr>
Permite habilitar ou desabilitar números de linha do arquivo corrente. A exclamação ao final torna o comando booleano, ou seja, se a numeração estiver ativa será desabilitada, caso contrário será ativada. O <cr> ao final representa um Enter.

Limpando o “registrador” de buscas

A cada busca, se a opção ‘hls1 estiver habilitada o Vim faz um destaque colorido, para desabilitar esta opção pode-se criar um mapeamento qualquer, no caso abaixo usando a combinação de teclas <S-F11>.

nno <S-F11> <Esc>:let @/=""<CR>
É um mapeamento para o modo normal que faz com que a combinação de teclas Shift-F11 limpe o “registrador” de buscas

Destacar palavra sob o cursor

nmap <s-f> :let @/=expand("<cword>")<CR>
O atalho acima s-f corresponde a Shift-f.

Contar ocorrências de uma palavra

" contagem de ocorrências de uma palavra (case insensitive)
" busca somente ocorrências exatas
nmap <F4> <esc>mz:%s/\c\<\(<c-r>=expand("<cword>")<cr>\)\>//gn<cr>`z
" busca parcial, ou seja acha palavra como parte de outra
nmap <s-F4> <esc>mz:%s/\c\(<c-r>=expand("<cword>")<cr>\)//gn<cr>`z

Remover linhas em branco duplicadas

map ,d <Esc>:%s/\(^\n\{2,}\)/\r/g<cr>
No mapeamento acima estamos associando o atalho:
,d
… à ação desejada, fazer com que linhas em branco sucessivas sejam substituídas por uma só linha em branco, vejamos como funciona:

Comando Descrição
map mapear
,d atalho que queremos
<Esc> se estiver em modo de inserção, sai
: em modo de comando
% em todo o arquivo
s substitua
^ começo de linha
\n quebra de linha
\{2,} duas ou mais vezes
\r trocado por \r Enter
g globalmente
<cr> confirmação do comando

As barras invertidas dos quantificadores podem ser dispensadas usando o modo very magic, indicado por \v no início do padrão:

map ,d :%s/\v(^\n{2,})/\r/g<cr>
Note que a opção magic, habilitada por padrão, não é suficiente para isso: com ela \{2,} ainda precisa da barra invertida.

Mapeamento para Calcular Expressões

Os mapeamentos abaixo exibem o resultado das quatro operações básicas (soma, subtração, multiplicação e divisão). O primeiro para o modo normal no qual posiciona-se o cursor no primeiro caractere da expressão tipo 5\9 e em seguida pressiona-se “Shift-F1”, o segundo para o modo insert em que, após digitada a expressão pressiona-se o mesmo atalho.

" calculadora
map <s-f1> <esc>0"myEA=<c-r>=<c-r>m<enter><esc>
imap <s-f1> <space><esc>"myBEa=<c-r>=<c-r>m<enter><del>
Para efetuar cálculos com maior precisão e também resolver problemas como potências raízes, logaritmos pode-se mapear comandos externos, como a biblioteca matemática da linguagem de programação Python. Neste link há um manual que ensina a realizar este procedimento, ou acesse o capítulo Uma calculadora diferente.

Mapeamentos globais

Podemos fazer mapeamentos globais ou que funcionam em apenas um modo:

map  - funciona em qualquer modo
nmap - apenas no modo Normal
imap - apenas no modo de Inserção
Mover linhas com Ctrl-⬇ ou Ctrl-⬆
" tem que estar em modo normal!
nmap <C-Down> ddp
nmap <C-Up> ddkP
Salvando com uma tecla de função:
" salva com F9
nmap <F9> :w<cr>
" F10 - sai do Vim
nmap <F10> <Esc>:q<cr>

Convertendo as iniciais de um documento para maiúsculas

" MinusculasMaiusculas: converte a primeira letra de cada
" frase para MAIÚSCULAS
nmap ,mm :%s/\C\([.!?][])"']*\($\|[ ]\)\_s*\)\(\l\)/\1\U\3/g<CR>
" Caso queira confirmação coloque uma letra ``c'' no final da
" linha acima:
" (...) \3/gc<CR>

  1. hls é uma abreviação de highlight search