Global

  • :h[elp] palavra chave - abrir a página de ajuda para um termo
  • :sav[eas] arquivo - salvar um arquivo como
  • :clo[se] - fechar o painel atual
  • :ter[minal] - open a terminal window
  • K - abrir a página do manual para a palavra abaixo do cursor
Tip Execute vimtutor em um terminal para aprender os primeiros comandos do Vim.

Movimento do cursor

  • h - movimenta o cursor para esquerda
  • j - movimenta o cursor para baixo
  • k - movimenta o cursor para cima
  • l - movimenta o cursor para direita
  • gj - movimenta o cursor para baixo (texto multilinha)
  • gk - movimenta o cursor para cima (texto multilinha)
  • H - movimenta o cursor até a parte superior da tela
  • M - movimenta o cursor até o meio da tela
  • L - movimenta o cursor até a parte inferior da tela
  • w - pula para frente até o inicio de uma palavra
  • W - pula para frente até o inicio de uma palavra (palavras podem ter pontuação)
  • e - pula para frente até o fim de uma palavra
  • E - pula para frente até o fim de uma palavra (palavras podem ter pontuação)
  • b - pula para trás até o início de uma palavra
  • B - pula para trás até o início de uma palavra (palavras podem ter pontuação)
  • ge - pula para trás até o fim de uma palavra
  • gE - pula para trás até o fim de uma palavra (palavras podem ter pontuação)
  • % - movimenta o cursor para o caracter correspondente (pares parão suportados: '()', '{}', '[]' - use :h matchpairs no vim para mais informações)
  • 0 - pula até o início da linha
  • ^ - pula até o primeiro caractere não vazio da linha
  • $ - pula até o fim da linha
  • g_ - pula até o último character não vazio da linha
  • gg - vai para a primeira linha do documento
  • G - vai para a última linha do documento
  • 5gg or 5G - vai para a linha 5
  • gd - movimenta para a declaração local
  • gD - movimenta para a declaração global
  • fx - pula para a próxima ocorrência do caractere x
  • tx - pula para antes da próxima ocorrência do caractere x
  • Fx - pula para a ocorrência anterior do caractere x
  • Tx - pula para depois da ocorrência anterior do caractere x
  • ; - repete o último movimento de f, t, F ou T
  • , - repete o último movimento de f, t, F ou T para trás
  • } - pula para o próximo parágrafo (ou função/bloco, ao editar o código)
  • { - pular para o parágrafo anterior (ou função/bloco, ao editar o código)
  • zz - centraliza o cursor na tela
  • zt - posiciona o cursor no início da tela
  • zb - posiciona o cursor no fim da tela
  • Ctrl + e - movimenta a tela uma linha para baixo (sem mover o cursor)
  • Ctrl + y - movimenta a tela uma linha para cima (sem mover o curso)
  • Ctrl + b - movimenta a tela uma página para cima (cursor na última linha)
  • Ctrl + f - movimenta a tela uma página para baixo (cursor na primeira linha)
  • Ctrl + d - movimenta a tela e o cursor 1/2 página para baixo
  • Ctrl + u - movimenta a tela e o cursor 1/2 página para cima
Tip Adicione um número a um comando de movimento do cursor para repetí-lo. Exemplo: 4j moverá 4 linhas para baixo.

Modo de inserção - inserir/acrescentar texto

  • i - insere antes do cursor
  • I - insere no começo da linha
  • a - insere depois do cursor
  • A - insere no final da linha
  • o - insere uma nova linha abaixo da linha atual
  • O - insere uma nova linha acima da linha atual
  • ea - insere no final da palavra
  • Ctrl + h - apaga o caractere antes do cursor no modo de inserção
  • Ctrl + w - apaga a palavra antes do cursor no modo de inserção
  • Ctrl + j - adiciona uma quebra de linha na posição do cursor no modo de inserção
  • Ctrl + t - recuar (mover para a direita) uma linha em um shiftwidth durante o modo de inserção
  • Ctrl + d - desrecuar (mover para a esquerda) uma linha em um shiftwidth durante o modo de inserção
  • Ctrl + n - inserir (auto-completar) a próxima correspondência antes do cursor durante o modo de inserção
  • Ctrl + p - inserir (auto-completar) a correspondência anterior antes do cursor durante o modo de inserção
  • Ctrl + rx - inserir o conteúdo do registrador x
  • Ctrl + ox - Entrar temporariamente no modo normal para executar um comando do modo normal x.
  • Esc or Ctrl + c - sair do modo de inserção

Editando

  • r - substituir um único caractere
  • R - substituir mais de um caractere, até pressionar ESC.
  • J - juntar a linha abaixo da linha atual
  • gJ - juntar a linha abaixo à linha atual sem espaço entre elas
  • gwip - refazer parágrafo
  • g~ - alternar maiúsculas e minúsculas até o movimento
  • gu - alterar para minúsculas até o movimento
  • gU - alterar para maiúsculas até o movimento
  • cc - substituir toda a linha
  • c$ or C - substituir até o final da linha
  • ciw - substituir a palavra inteira
  • cw or ce - substituir até o final da palavra
  • s - deletar um caractere e substituir texto
  • S - deletar a linha e substituir texto (igual ao comando cc)
  • xp - trocar duas letras (deletar e colar)
  • u - desfazer
  • U - restaurar a linha inteira
  • Ctrl + r - refazer
  • . - repetir o último comando

Marcação de texto (modo visual)

  • v - iniciar modo visual, selecionar linhas e executar um comando (como y-yank)
  • V - iniciar modo visual selecionando a linha inteira
  • o - mover para o fim/início da seleção
  • Ctrl + v - iniciar modo de bloco visual
  • O - mover para o fim/início do bloco
  • aw - selecionar uma palavra
  • ab - selecionar um bloco com ()
  • aB - selecionar um bloco com {}
  • at - selecionar um bloco com tags <>
  • ib - selecionar um bloco interno com ()
  • iB - selecionar um bloco interno com {}
  • it - selecionar um bloco interno com tags <>
  • Esc or Ctrl + c - sair do modo visual
Tip Ao invés de b ou B, também é possível utilizar ( ou {, respectivamente.

Comandos visuais

  • > - deslocar texto para direita
  • < - deslocar texto para esquerda
  • y - copiar texto marcado
  • d - deletar texto marcado
  • ~ - alterar entre maiúscula e minúscula
  • u - alterar o texto marcado para minúsculas
  • U - alterar o texto marcado para maiúsculas

Registradores

  • :reg[isters] - mostrar conteúdo dos registradores
  • "xy - colar no registrador x
  • "xp - colar o conteúdo do registrador x
  • "+y - copiar para a área de transferência do sistema
  • "+p - colar da área de transferência do sistema
Tip Registradores são guardados em ~/.viminfo, e são carregados no início do vim.
Tip Registradores especiais:

0 - último yank
" - registrador sem nome, último delete ou yank
% - nome do arquivo atual
# - nome do arquivo alternativo
* - conteúdo da área de transferência (primário do X11)
+ - conteúdo da área de transferência (área de transferência do X11)
/ - último padrão de busca
: - último comando de linha
. - último texto inserido
- - última exclusão pequena (menos que uma linha)
= - registrador de expressão
_ - registrador buraco negro

Marcadores

  • :marks - listar todos os marcadores
  • ma - atribuir a posição atual no marcador A
  • `a - pular para a posição do marcador A
  • y`a - copiar (yank) texto para a posição do marcador A
  • `0 - vai para a posição onde o Vim foi anteriormente encerrado
  • `" - vai para a posição quando foi editado este arquivo pela última vez
  • `. - vai para a posição da última alteração neste arquivo
  • `` - vai para a posição antes do último salto
  • :ju[mps] - lista de saltos
  • Ctrl + i - vai para a posição mais recente na lista de saltos
  • Ctrl + o - vai para a posição mais antiga na lista de saltos
  • :changes - lista de alterações
  • g, - vai para a posição mais recente na lista de alterações
  • g; - vai para a posição mais antiga na lista de alterações
  • Ctrl + ] - vai para a tag sob o cursor
Tip Para pular para um marcador, você pode usar um acento grave (`) ou uma aspas simples ('). Usar uma aspas simples pula para o início (primeiro caractere não vazio) da linha que contém o marcador.

Macros

  • qa - gravar o macro a
  • q - parar a gravação do macro
  • @a - executar o macro a
  • @@ - re executar o último macro

Copiar e colar

  • yy - copiar uma linha
  • 2yy - copiar duas linhas
  • yw - copiar uma palavra
  • yiw - copiar palavra sob o cursor
  • yaw - copiar palavra sob o cursor e o espaço depois ou antes dela
  • y$ or Y - copiar até o final da linha
  • p - colar depois do cursor
  • P - colar antes do cursor
  • gp - colar o conteúdo da área de transferência após o cursor e deixar o cursor após o novo texto
  • gP - colar o conteúdo da área de transferência antes do cursor e deixar o cursor após o novo texto
  • dd - deletar (cortar) uma linha
  • 2dd - deletar (cortar) duas linhas
  • dw - deletar (cortar) uma palavra
  • diw - deletar (cortar) a palavra sob o cursor
  • daw - deletar (cortar) a palavra sob o cursor e o espaço depois ou antes dela
  • :3,5d - deletar linhas do 3 ao 5
Tip Você também pode usar os seguintes caracteres para especificar o intervalo:
e.g.

:.,$d - Da linha atual até o final do arquivo
:.,1d - Da linha atual até o início do arquivo
:10,1d - Da 10ª linha até o final do arquivo

  • :g/{pattern}/d - deletar todas as linhas que contêm o padrão
  • :g!/{pattern}/d - deletar todas as linhas que não contêm o padrão
  • d$ or D - deletar (cortar) até o final da linha
  • x - deletar (cortar) caractere

Indentar texto

  • >> - indentar (mover para a direita) uma linha com um shiftwidth
  • << - desindentar (mover para a esquerda) uma linha com um shiftwidth
  • >% - indentar um bloco com () ou {} (cursor na chave)
  • <% - desindentar um bloco com () ou {} (cursor na chave)
  • >ib - indentar bloco interno com ()
  • >at - indentar um bloco com tags <>
  • 3== - re-indentar 3 linhas
  • =% - re-indentar um bloco com () ou {} (cursor na chave)
  • =iB - re-indentar bloco interno com {}
  • gg=G - re-indentar o buffer inteiro
  • ]p - colar e ajustar a indentação para a linha atual

Saindo

  • :w - escrever (salvar) arquivo, mas não sair
  • :w !sudo tee % - escrever o arquivo atual usando sudo
  • :wq or :x or ZZ - escrever (salvar) arquivo e sair
  • :q - sair (não funciona se existirem mudanças não salvas)
  • :q! or ZQ - sair e descartar mudanças não salvas
  • :wqa - escrever (salvar) e sair em todas as abas

Procurar e substituir

  • /pattern - procurar por padrão
  • ?pattern - procurar por padrão na direção oposta
  • \vpattern - padrão `mágico`: caracteres não-alfanuméricos são interpretados como símbolos especias de expressões regulares (sem necessidade de escapar os caracteres)
  • n - repetir busca na mesma direção
  • N - repetir busca na direção oposta
  • :%s/old/new/g - substituir todas as ocorrências de old por new dentro do buffer
  • :%s/old/new/gc - substituir todas as ocorrências de old por new dentro do buffer pedindo confirmação
  • :noh[lsearch] - remover o destaque dos resultados de busca

Procurar em múltiplos arquivos

  • :vim[grep] /pattern/ {`{file}`} - procurar por padrão em múltiplos arquivos
e.g. :vim[grep] /foo/ **/*
  • :cn[ext] - pular para próxima ocorrência
  • :cp[revious] - pular para ocorrência anterior
  • :cope[n] - abrir uma janela com a lista de ocorrências
  • :ccl[ose] - fechar a janela de resultados rápidos

Abas

  • :tabnew or :tabnew {page.words.file} - abrir um arquivo em uma aba nova
  • Ctrl + wT - mover a janela atual para uma aba própria
  • gt or :tabn[ext] - mover para a próxima aba
  • gT or :tabp[revious] - mover para a aba anterior
  • #gt - mover para a aba de número #
  • :tabm[ove] # - mover aba atual para posição # (indexado do 0)
  • :tabc[lose] - fechar a aba atual e todas suas janelas
  • :tabo[nly] - fechar todas as abas exceto a aba atual
  • :tabdo command - executar o comando em todas as abas (e.g. :tabdo q - fechar todas as abas abertas)

Trabalhando com múltiplos arquivos

  • :e[dit] arquivo - editar um arquivo em um novo buffer
  • :bn[ext] - ir para o próximo buffer
  • :bp[revious] - ir para o buffer anterior
  • :bd[elete] - deletar um buffer (fechar um arquivo)
  • :b[uffer]# - ir para um buffer pelo número
  • :b[uffer] file - ir para um buffer pelo arquivo
  • :ls or :buffers - listar todos os buffers abertos
  • :sp[lit] arquivo - abrir um arquivo em um novo buffer e dividir a janela
  • :vs[plit] arquivo - abrir um arquivo em um novo buffer e dividir as janelas verticalmente
  • :vert[ical] ba[ll] - editar todos os buffers como janelas verticais
  • :tab ba[ll] - editar todos os buffers como abas
  • Ctrl + ws - dividir janela
  • Ctrl + wv - dividir janelas verticalmente
  • Ctrl + ww - trocar de janelas
  • Ctrl + wq - fechar janela
  • Ctrl + wx - trocar janela atual com a próxima
  • Ctrl + w= - tornar todas as janelas de altura e largura iguais
  • Ctrl + wh - mover o cursor para a janela à direita (vertical)
  • Ctrl + wl - mover o cursor para a janela a esquerda (vertical)
  • Ctrl + wj - mover o cursor para a janela abaixo (horizontal)
  • Ctrl + wk - mover o cursor para a janela acima (horizontal)
  • Ctrl + wH - tornar a janela atual com altura total à extrema esquerda (janela vertical mais à esquerda)
  • Ctrl + wL - tornar a janela atual com altura total à extrema direita (janela vertical mais à direita)
  • Ctrl + wJ - tornar a janela atual com largura total na parte inferior (janela horizontal mais abaixo)
  • Ctrl + wK - tornar a janela atual com largura total na parte superior (janela horizontal mais acima)

Diferenças

  • zf - definir manualmente um fold até o movimento
  • zd - excluir o fold sob o cursor
  • za - alternar o fold sob o cursor
  • zo - abrir o fold sob o cursor
  • zc - fechar o fold sob o cursor
  • zr - reduzir (abrir) todos os folds em um nível
  • zm - reduzir (fechar) todos os folds em um nível
  • zi - alternar a funcionalidade de folding
  • ]c - ir para o início da próxima alteração
  • [c - ir para o início da alteração anterior
  • do or :diffg[et] - obter a diferença (do outro buffer)
  • dp or :diffpu[t] - colocar a diferença (no outro buffer)
  • :diffthis - tornar a janela atual parte da diferença
  • :dif[fupdate] - atualizar as diferenças
  • :diffo[ff] - desativar o modo de diferença para a janela atual
Tip Os comandos para folding (por exemplo, za) operam em um nível. Para operar em todos os níveis, use letras maiúsculas (por exemplo, zA).
Tip Para visualizar as diferenças entre arquivos, você pode iniciar o Vim diretamente no modo de diferença executando vimdiff em um terminal. Você também pode configurar isso como git difftool.