Comandos vi do Linux: os 3 modos do Vim e o modo visual

Abrir o vi e ver que nada do que você digita aparece, ou fechar a janela por não saber como sair: quase todo mundo que mexe num servidor pela primeira vez passa por isso uma vez. O comando vi do Linux tem modos normal e de inserção separados, então, sabendo em qual modo você está, o resto são poucas teclas. Este post organiza em tabelas os três modos e os comandos de cada um, e você pode digitar vi num servidor virtual no seu navegador.
No AlmaLinux 9.8, vi e vim vêm os dois do pacote vim 8.2, e as telas e mensagens deste post foram abertas com o vim. Se não estiver instalado, instale com [dnf -y install vim-enhanced].
✅ Os três modos do vi
No vi, a mesma tecla faz coisas diferentes conforme o modo. O arquivo abre no modo normal; i leva ao modo de inserção para digitar, Esc traz de volta, e dois-pontos [:] levam ao modo de linha de comando para salvar e sair.
| Modo | Tecla para entrar | Tarefa |
|---|---|---|
| Modo normal | Onde o vi começa · Esc a partir de qualquer outro modo | Mover o cursor, apagar, copiar, colar, desfazer |
| Modo de inserção | i a I A o O | Digitar texto. [-- INSERT --] na parte de baixo da tela |
| Modo de linha de comando | : | Salvar, sair, substituir, números de linha. Aparece um : na parte de baixo da tela |
| Modo visual | v V Ctrl-v | Selecionar um trecho e então apagar, copiar ou inserir em todas as linhas |
Há três formas de abrir um arquivo pelo console.
| Comando | Descrição |
|---|---|
| vi arquivo | Abre o arquivo no modo normal. Se o arquivo não existir, ele é criado e aparece [New] |
| vi +20 arquivo | Abre com o cursor na linha 20 |
| view arquivo= vi -R | Abre só para leitura. Editar mostra o aviso [W10], salvar dá [E45] |
Digite [vi httpd.conf] no servidor virtual abaixo para abrir o vi, e o menu à esquerda passa a mostrar os comandos de dentro do vi. Clicar num chip manda aquela tecla para a tela, ou você pode digitá-la no teclado.
✅ Resumo dos comandos vi do Linux
🔲 Mover o cursor
| Tecla | Descrição |
|---|---|
| h j k l← ↓ ↑ → | Move um caractere. As setas também funcionam |
| 0 · ^ | Início da linha (0) · primeiro caractere que não é espaço (^) |
| $ | Fim da linha |
| w · b · e | Início da próxima palavra · início da palavra anterior · fim da próxima palavra |
| gg · G | Primeira linha · última linha do arquivo |
| 20Go mesmo que :20 | Vai para a linha 20. Troque o número para qualquer linha |
| H · M · L | Linha de cima · do meio · de baixo da tela |
| Ctrl-f · Ctrl-b | Uma tela para baixo · para cima |
| Ctrl-d · Ctrl-u | Meia tela para baixo · para cima |
🔲 Entrar no modo de inserção
Seja qual for a tecla usada para entrar, pressione Esc ao terminar de digitar. cw, cc, C e s apagam e já colocam você no modo de inserção, então corrigir uma palavra ou linha é mais rápido do que apertar x e i separadamente.
| Tecla | Descrição |
|---|---|
| i · a | Começar a digitar antes (i) · depois (a) do cursor |
| I · A | Começar a digitar no início (I) · fim (A) da linha |
| o · O | Abrir uma linha vazia abaixo (o) · acima (O) e digitar |
| cw | Apagar do cursor até o fim da palavra e digitar |
| cc | Apagar a linha inteira e digitar |
| C | Apagar do cursor até o fim da linha e digitar |
| s | Apagar um caractere e digitar |
| Esc | Parar de digitar e voltar ao modo normal |
🔲 Apagar e editar
Coloque uma tecla de movimento depois do d e aquele trecho é apagado. dw apaga uma palavra, dd uma linha, dG tudo até o fim do arquivo, e um número na frente repete isso várias vezes.
| Tecla | Descrição |
|---|---|
| x · X | Apagar o caractere sob (x) · antes (X) do cursor. 3x apaga três |
| dw | Apagar do cursor até o fim da palavra |
| dd | Apagar a linha. 3dd apaga três linhas |
| D= d$ | Apagar do cursor até o fim da linha |
| d0 | Apagar do início da linha até o cursor |
| dG | Apagar da linha atual até o fim do arquivo |
| :6d · :6,10d | Apagar a linha 6 · apagar as linhas 6–10 |
| J | Juntar a linha de baixo ao fim da linha atual |
| r | Trocar o caractere sob o cursor pela próxima tecla digitada |
| ~ | Alternar maiúscula/minúscula |
| >> · << | Indentar · desindentar a linha |
🔲 Copiar, colar e desfazer
O texto apagado pode ser colado com p como o copiado, então dd seguido de p move uma linha para baixo. u volta várias alterações, e Ctrl-r refaz o que foi desfeito.
| Tecla | Descrição |
|---|---|
| yy | Copiar a linha. 3yy copia três linhas |
| yw | Copiar do cursor até o fim da palavra |
| p · P | Colar abaixo (p) · acima (P). Numa cópia por caractere, depois · antes do cursor |
| :1 co 7o mesmo que :1 t 7 | Copiar a linha 1 para baixo da linha 7 |
| :1,7 co 8 | Copiar as linhas 1–7 para baixo da linha 8 |
| :1 m 8 | Mover a linha 1 para baixo da linha 8 |
| u | Desfazer. Pressione de novo para continuar voltando |
| Ctrl-r | Refazer o que foi desfeito |
| . | Repetir a última alteração |
🔲 Buscar e substituir
A substituição é feita no modo de linha de comando. Sem intervalo, vale só para a linha atual; [%] cobre o arquivo inteiro; e sem g no fim só a primeira ocorrência de cada linha muda.
| Tecla | Descrição |
|---|---|
| /texto | Busca para baixo a partir do cursor. No fim, recomeça do topo: [search hit BOTTOM, continuing at TOP] |
| ?texto | Busca para cima a partir do cursor |
| n · N | Próxima ocorrência na mesma direção (n) · na direção oposta (N) |
| * | Buscar para baixo a palavra sob o cursor |
| :s/old/new/ | Primeiro old da linha atual para new |
| :s/old/new/g | Todos os old da linha atual para new |
| :%s/old/new/g | Todos os old do arquivo inteiro para new |
| :10,20s/old/new/g | Todos os old das linhas 10–20 para new |
| :%s/old/new/gc | Perguntar antes de cada troca (y troca · n pula · a todas · q para) |
🔲 Salvar, sair e números de linha
| Tecla | Descrição |
|---|---|
| :w | Salvar. Ao terminar: [36L, 1094B written] |
| :w arquivo | Salvar com outro nome. O arquivo original fica como está |
| :wq= :x = ZZ | Salvar e sair |
| :q | Sair. Se houver alterações não salvas: [E37: No write since last change] |
| :q! | Sair sem salvar |
| :set nu · :set nonu | Mostrar · ocultar números de linha |
✅ Comentar uma coluna com o modo visual de bloco do Vim
Para pôr o mesmo texto no início de várias linhas, use o modo visual de bloco em vez de apertar i em cada linha. No modo normal, v seleciona por caractere, Shift-v por linha e Ctrl-v por coluna.
Veja como comentar um bloco inteiro de um arquivo de configuração. Ponha o cursor no primeiro caractere da primeira linha, pressione Ctrl-v, desça com j para selecionar as linhas, então pressione I, digite # e pressione Esc.



Tirar os comentários funciona igual. Ponha o cursor no # da primeira linha, selecione para baixo com Ctrl-v, pressione x e a coluna selecionada some de uma vez. Dá para testar assim no vhost.conf do simulador acima.
ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.