Fundamentos do Vim: Comandos Essenciais e Tecnicas Praticas

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 .vimrc confortavel para qualquer novo servidor
  • Manter a produtividade quando apenas vi esta 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 Esc duas vezes, depois :q! para forcar a saida
  • Para arquivos de configuracao, use sudoedit, nao sudo 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 atual
  • tee grava no disco; > /dev/null descarta 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 :wq enquanto ainda esta no modo de insercao (voce escreve :wq no arquivo)
  • Abrir um arquivo com sudo vim /etc/... e ficar preso ao salvar -- use sudoedit em vez disso
  • Excluir reflexivamente arquivos .swp -- alguem pode estar editando
  • Inchar seu .vimrc -- ele deixa de ser portatil entre servidores

Proximas Leituras