Vim básico: o suficiente para sobreviver em qualquer servidor

1. Por que aprender Vim? O editor que nunca falta

Em qualquer servidor Unix/Linux que você acessar via SSH, o Vim (ou seu predecessor Vi) estará presente. Não importa se o ambiente tem nano, emacs ou qualquer outro editor — o Vim é o padrão universal. Sysadmins e profissionais de DevOps precisam editar arquivos de configuração, logs e scripts rapidamente, sem depender de interface gráfica.

A diferença fundamental entre o Vim e editores comuns está nos modos de operação. Enquanto no Bloco de Notas ou VS Code você digita diretamente, no Vim você alterna entre modos para navegar, editar e comandos. Isso pode parecer estranho no início, mas após algumas horas de prática, a eficiência se torna evidente.

2. Modos essenciais: o coração do Vim

O Vim possui quatro modos principais que você precisa dominar:

Modo Normal — é o modo padrão ao abrir o Vim. Aqui você navega e executa comandos sem inserir texto. As teclas h, j, k, l movem o cursor para esquerda, baixo, cima e direita, respectivamente.

Modo Inserção — para digitar texto. Pressione i para inserir antes do cursor, a para inserir após, o para abrir nova linha abaixo. Versões maiúsculas fazem o oposto: I insere no início da linha, A no final, O abre linha acima.

Modo Visual — para selecionar texto. v seleção caractere a caractere, V linha inteira, Ctrl+v seleção em bloco (útil para editar colunas).

Modo de Comando — acessado com :, permite salvar, sair e executar comandos. Os essenciais:

:w        — salvar arquivo
:q        — sair
:q!       — sair sem salvar (forçado)
:wq       — salvar e sair
:x        — salvar e sair (equivalente a :wq)
ZZ        — salvar e sair (no modo Normal)

3. Movimentação básica: não use as setas

Usar as setas direcionais no Vim é considerado amador. Em servidores remotos com latência, cada movimento com seta gera caracteres de escape que podem atrapalhar. Aprenda a navegar pelo teclado:

Navegação por palavras:

w   — próxima palavra
b   — palavra anterior
e   — final da palavra atual

Navegação por linhas:

0   — início da linha (coluna 1)
^   — primeiro caractere não branco da linha
$   — final da linha
gg  — início do arquivo
G   — final do arquivo
:N  — vai para a linha N (ex.: :42 vai para linha 42)

Rolagem de tela:

Ctrl+d  — desce meia tela
Ctrl+u  — sobe meia tela
Ctrl+f  — avança uma tela inteira
Ctrl+b  — retrocede uma tela inteira

Busca rápida:

/palavra   — busca para frente
?palavra   — busca para trás
n          — próxima ocorrência
N          — ocorrência anterior
:noh       — remove destaque das ocorrências

Exemplo prático: para encontrar todas as ocorrências de "error" em um log e navegar entre elas:

/error
n  (várias vezes para percorrer)
:noh (quando terminar, limpa o destaque)

4. Edição de texto: copiar, colar, apagar e desfazer

Exclusão (cortar):

x    — apaga caractere sob o cursor
dd   — apaga linha inteira
dw   — apaga até o final da palavra
d$   — apaga até o final da linha
d0   — apaga até o início da linha

Copiar e colar:

yy   — copia linha inteira (yank)
yw   — copia palavra
p    — cola após o cursor
P    — cola antes do cursor

Desfazer e refazer:

u        — desfaz última ação
Ctrl+r   — refaz (redo)

Substituir caracteres:

r   — substitui um caractere (digite r + novo caractere)
R   — entra em modo Replace (sobrescreve enquanto digita)

Exemplo prático: substituir uma linha inteira de configuração:

dd        — apaga a linha
i         — entra em modo inserção
<digite a nova linha>
Esc       — volta ao modo Normal

5. Salvando, saindo e gerenciando arquivos

As combinações mais comuns para salvar e sair:

:w        — salva sem sair
:q        — sai (se não houver alterações)
:wq       — salva e sai
:x        — salva e sai (mais rápido que :wq)
ZZ        — salva e sai (no modo Normal, sem dois-pontos)

Forçando comandos (quando o arquivo é somente leitura ou você não tem permissão):

:q!       — sai sem salvar (descarta alterações)
:w!       — força a escrita (se tiver permissão)
:wq!      — força escrita e saída

Abrindo múltiplos arquivos:

:e arquivo.txt   — abre outro arquivo no mesmo Vim
:n               — próximo arquivo da lista
:prev            — arquivo anterior

Dica de sobrevivência: ao fazer git commit, se o Vim abrir e você quiser cancelar, use :cq (sair com código de erro). O Git interpretará como falha e não criará o commit.

6. Truques úteis para o dia a dia no servidor

Inserir resultado de comandos:

:r !date          — insere a data atual no arquivo
:r !ls -la        — insere listagem de diretório
:r !grep erro /var/log/syslog   — insere resultados de busca

Substituição global:

:%s/antigo/novo/g      — substitui todas as ocorrências
:%s/antigo/novo/gc     — com confirmação (c = confirm)

Numeração de linhas:

:set number        — ativa numeração
:set nonumber      — desativa
:set nu!           — alterna (toggle)

Recuar blocos:

>>    — recua linha para direita
<<    — recua linha para esquerda
==    — auto-indenta linha (útil para scripts)

Macro simples: grave uma sequência de comandos e repita:

q        — começa a gravar
a        — nome da macro (pode ser qualquer letra)
<comandos>   — execute os comandos desejados
q        — para a gravação
@a       — executa a macro uma vez
@@       — repete a última macro

Exemplo: adicionar "sudo" no início de 5 linhas:

qaI sudo Esc j q
4@a

7. Saindo de emergência: quando tudo parece perdido

O meme "como sair do Vim" é famoso por um motivo. Aqui estão as soluções para cada situação:

Se você está perdido no modo Inserção: pressione Esc (ou Ctrl+[ que é equivalente).

Se o teclado travou: Ctrl+c interrompe a operação atual e volta ao modo Normal.

Se você quer um shell temporário:

:shell        — abre um shell dentro do Vim
exit          — volta ao Vim

Se nada funciona — suspenda o processo:

Ctrl+z        — suspende o Vim (volta ao shell)
kill %1       — mata o processo suspenso
fg            — traz o Vim de volta (se você mudou de ideia)

Comando de último recurso: se você alterou tudo e quer sair sem salvar:

:q!           — sai descartando todas as alterações

Referências