Fundamentos do Vim: Comandos Essenciais e Tecnicas Praticas
O Que Voce Vai Aprender
- Entender os modos do Vim e parar de ficar preso
- Dominar o fluxo de trabalho minimo para movimentacao, edicao e busca/substituicao usado no trabalho real
- Configurar um
.vimrcconfortavel para qualquer novo servidor - Manter a produtividade quando apenas
viesta instalado em uma maquina remota
Resumo Rapido (o fluxo de trabalho pratico)
- Apos iniciar, sempre pense primeiro em modo normal (
Esc) - O ciclo de edicao e:
i-> editar ->Esc->:w-- quatro passos - Se ficar preso, pressione
Escduas vezes, depois:q!para forcar a saida - Para arquivos de configuracao, use
sudoedit, naosudo vim
Ambiente assumido
- SO: Ubuntu ou qualquer Linux
- Vim 8+ ou Neovim (peculiaridades de compatibilidade com vi sao anotadas)
- Principalmente trabalho remoto em servidor via SSH
1. Modos: 80% da Batalha
Conclusao: A dificuldade do Vim sao seus modos; aprenda normal, insercao, visual e linha de comando primeiro.
A principal razao pela qual iniciantes desistem do Vim sao os modos. Uma vez que voce os internaliza, o resto e apenas memorizar comandos.
| Modo | Como entrar | O que voce pode fazer |
|---|---|---|
| Normal | Esc |
Mover, excluir, copiar |
| Insercao | i / a / o |
Digitar texto |
| Visual | v / V |
Selecionar intervalos |
| Linha de comando | : |
Salvar, sair, substituir |
Regra geral: Quando algo estranho acontecer, pressione Esc duas vezes para voltar ao modo normal.
1-1. Entrando no Modo de Insercao (Qual Tecla Usar)
i # Inserir antes do cursor a # Inserir apos o cursor (otimo no final da linha) o # Abrir nova linha abaixo O # Abrir nova linha acima I # Inserir no inicio da linha A # Inserir no final da linha
No inicio, use apenas i e o. Quando estiver confortavel, A (adicionar no final) se torna uso diario.
2. Salvar e Sair: O Ponto de Travamento Numero 1
Conclusao: :w salva, :wq salva e sai, :q! descarta; esses tres resolvem o problema de travamento.
E daqui que vem os memes "nao consigo sair do Vim". Memorize esta secao.
:w # Gravar (salvar) :q # Sair :wq # Salvar e sair :x # Salvar e sair (so grava se houver alteracoes) ZZ # Mesmo que :wq no modo normal :q! # Sair sem salvar :w !sudo tee % # Salvar um arquivo que voce esqueceu de abrir com sudo (veja abaixo)
:q simples se recusa a sair se houver alteracoes nao salvas. Use :q! para descartar, :wq para mante-las.
2-1. Recuperando-se de um Erro com sudo
Acidente classico: abrir /etc/something com vim, editar, e receber Permission denied ao salvar.
:w !sudo tee % > /dev/null
%expande para o nome do arquivo atualteegrava no disco;> /dev/nulldescarta stdout- Apos salvar,
:q!(o arquivo ja esta no disco, entao!e seguro)
A correcao adequada: edite arquivos de configuracao com sudoedit /etc/ssh/sshd_config (alias sudo -e). Ele abre uma copia temporaria e grava de volta ao sair.
3. Movimentacao: Dispense o Mouse
Conclusao: Mova-se com hjkl, por palavra, linha, tela ou busca, tudo no modo normal.
Estes funcionam apenas no modo normal. Nao fazem nada no modo de insercao.
3-1. Nivel de Caractere
h j k l # esquerda baixo cima direita
Mnemonico: j parece um gancho indo para baixo, k sobe como um soco.
3-2. Palavra, Linha, Tela
w / b # Inicio da proxima / anterior palavra e # Final da palavra 0 / ^ / $ # Inicio da linha / primeiro nao-branco / final da linha gg / G # Topo / final do arquivo :42 # Pular para a linha 42 Ctrl-d / Ctrl-u # Meia tela baixo / cima Ctrl-f / Ctrl-b # Tela inteira baixo / cima
3-3. Movimentacao Baseada em Busca
/word # Buscar para frente ?word # Buscar para tras n / N # Proxima / anterior ocorrencia * # Buscar para frente a palavra sob o cursor
Dica pratica: Quando estiver acompanhando um log, pressione G para pular ao final, depois ?ERROR para buscar para tras.
4. Edicao: O Minimo Necessario
Conclusao: Poucos comandos cobrem edicoes diarias: x, dd, yy, p, u e o ponto de repeticao.
x # Excluir um caractere dd # Excluir uma linha (para a area de transferencia) 3dd # Excluir 3 linhas dw # Excluir uma palavra d$ / D # Excluir ate o final da linha yy # Copiar (yank) uma linha 3yy # Copiar 3 linhas p / P # Colar (apos / antes) u # Desfazer Ctrl-r # Refazer . # Repetir ultima alteracao
O comando mais poderoso e . (ponto). Ele repete sua ultima edicao. Execute dw uma vez, mova o cursor, pressione . -- mesma edicao aplicada.
4-1. Prefixos Numericos
Praticamente qualquer comando aceita um prefixo de contagem.
5j # Mover 5 linhas para baixo 10x # Excluir 10 caracteres 3yy # Copiar 3 linhas
5. Busca e Substituicao: Ferramenta do Dia a Dia
Conclusao: Busque com /pattern e substitua com :%s/foo/bar/g; use gc para confirmar com seguranca.
5-1. Busca
/pattern # Para frente (regex permitido) ?pattern # Para tras n / N # Proxima / anterior
5-2. Substituicao (A Importante)
:s/foo/bar/ # Primeira ocorrencia na linha atual :s/foo/bar/g # Todas as ocorrencias na linha atual :%s/foo/bar/g # Todas as ocorrencias no arquivo :%s/foo/bar/gc # Mesmo, com confirmacao :5,10s/foo/bar/g # Apenas linhas 5-10
:%s/foo/bar/g e poderoso e perigoso. Comece com a flag gc para modo de confirmacao, depois navegue com y (sim), n (nao), a (todos), q (sair).
5-3. Armadilhas de Regex
O dialeto regex do Vim difere sutilmente do regex estendido POSIX.
:%s/\v(\w+)\s+\1/\1/g # \v habilita "very magic" -- mais proximo do regex padrao
Com \v, voce nao precisa mais escapar (), + ou ?. Salve como memoria muscular; isso evita muita dor de cabeca.
6. Multiplos Arquivos e Janelas
Conclusao: Alterne arquivos com buffers e visualize-os lado a lado com janelas divididas.
6-1. Buffers (Multiplos Arquivos)
:e other.txt # Abrir outro arquivo :ls # Listar buffers abertos :b 2 # Mudar para o buffer 2 :bn / :bp # Proximo / anterior buffer :bd # Fechar buffer
6-2. Janelas Divididas
:sp file.txt # Divisao horizontal :vsp file.txt # Divisao vertical Ctrl-w w # Alternar entre janelas Ctrl-w q # Fechar janela atual Ctrl-w = # Equalizar tamanhos das janelas
Uma configuracao comum: logs de um lado, arquivo de configuracao do outro. Combine com tmux via SSH para um fluxo de trabalho ainda mais forte.
7. Modo Visual: Operar em uma Selecao
Conclusao: Selecione um intervalo com v, V ou Ctrl-v, depois exclua, copie, indente ou substitua.
v # Iniciar selecao por caractere V # Iniciar selecao por linha Ctrl-v # Iniciar selecao em bloco (retangular)
Com uma selecao ativa:
d # Excluir y # Copiar > # Indentar < # Desindentar :s/a/b/ # Substituir apenas na selecao
Truque de selecao em bloco: Para prefixar multiplas linhas com # (comenta-las), use Ctrl-v -> selecione linhas -> I -> # -> Esc. Isso aplica o prefixo a todas as linhas selecionadas de uma vez.
8. .vimrc: Uma Configuracao Minima
Conclusao: Coloque um ~/.vimrc minimo com numeros de linha, busca e indentacao para conforto.
Escreva isso em ~/.vimrc. E pequeno o suficiente para que voce possa redigita-lo em um servidor novo em 30 segundos.
" Basico
set number " Mostrar numeros de linha
set ruler " Mostrar posicao do cursor
set showcmd " Mostrar comandos parciais
set wildmenu " Melhor completacao de comandos
" Busca
set hlsearch " Destacar correspondencias
set incsearch " Busca incremental
set ignorecase " Ignorar maiusculas/minusculas
set smartcase " Mas sensivel se o padrao tiver maiusculas
" Indentacao
set autoindent " Auto indentar
set expandtab " Tab -> espacos
set tabstop=4 " Largura do tab
set shiftwidth=4 " Largura da indentacao
" Seguranca
set backup " Manter arquivos de backup
set backupdir=~/.vim/backup,/tmp
set undofile " Desfazer persistente
set undodir=~/.vim/undo
" Interface
syntax on " Realce de sintaxe
set background=dark " Assumir terminal escuro
Crie os diretorios primeiro: mkdir -p ~/.vim/backup ~/.vim/undo.
Em um servidor com apenas vi (modo de compatibilidade do Vim), algumas opcoes set falham silenciosamente. Verifique :version para ver o que esta disponivel.
9. Rotas de Fuga Quando Preso
Conclusao: Estados presos como nao conseguir sair ou salvar tem rotas de fuga mecanicas.
Estados presos comuns e a correcao mecanica.
9-1. Nao Consigo Sair
Esc Esc :q!
Sempre volte ao modo normal primeiro, depois force a saida.
9-2. Nao Consigo Salvar (Somente Leitura)
:set noreadonly :w
Ou use o truque do sudo: :w !sudo tee % > /dev/null.
9-3. Tela Congelada
Ctrl-q # Retomar um terminal parado por Ctrl-s
Ctrl-s pausa o proprio terminal -- nao e um problema do Vim.
9-4. Caracteres Estranhos Como ~ Aparecendo
Um arquivo swap (.swp) ficou para tras.
ls -la .file.swp :recover # Execute dentro do Vim
Se genuinamente abandonado, rm .file.swp resolvera.
Verifique primeiro: alguem pode estar editando agora. Execute ps aux | grep vim antes de excluir arquivos swap.
10. vi vs Vim vs Neovim
Conclusao: vi geralmente e o modo de compatibilidade do Vim, Vim e o padrao, Neovim e um fork moderno.
| Nome | O que realmente e | Notas |
|---|---|---|
| vi | Geralmente Vim executando em modo compativel | Algumas configuracoes desabilitadas |
| Vim | Vi IMproved | O padrao de fato |
| Neovim | Um fork do Vim | Config Lua, LSP integrado, internos modernos |
which vi # /usr/bin/vi ls -l $(which vi) # Frequentemente um symlink para vim ou vim.basic
Instalacoes minimas do Ubuntu podem ter apenas vim-tiny. Instale a versao completa com sudo apt install vim.
11. Resumo: O Fluxo de Trabalho Que Voce Usara Amanha
Modelo para copiar e colar: fluxo de trabalho minimo diario
# 1. Abrir vim file.txt # 2. Mover no modo normal gg # Topo do arquivo /keyword # Buscar # 3. Mudar para modo de insercao i # Comecar a editar (editar) Esc # Voltar ao normal # 4. Salvar e sair :wq # Se errar :q! # Descartar e sair
Nao faca isso
- Digitar
:wqenquanto ainda esta no modo de insercao (voce escreve:wqno arquivo) - Abrir um arquivo com
sudo vim /etc/...e ficar preso ao salvar -- usesudoeditem vez disso - Excluir reflexivamente arquivos
.swp-- alguem pode estar editando - Inchar seu
.vimrc-- ele deixa de ser portatil entre servidores