Vim
Vim é o editor de texto universal instalado em todo sistema UNIX. Enquanto o Neovim inova, o Vim foca em compatibilidade reversa e estabilidade.
Quando Usar
- Edição Universal em Servidores & Sistemas: Editar configurações do sistema, scripts e código em qualquer servidor Unix/Linux sem instalar software externo.
- Manipulação de Texto Modal: Compor transformações de texto com a gramática operador-movimento (
dap,ci",gUiw). - Automação de Macros sem Interface Gráfica: Gravar e reproduzir operações de edição repetitivas em centenas de linhas (
qa,@a). - Edição de Commits & Mesclagens do Git: Edição interativa rápida para mensagens de commit, rebases interativos e resolução de conflitos de diff.
Início Rápido
1. ~/.vimrc Mínimo
syntax on
set number
set relativenumber
set tabstop=2
set shiftwidth=2
set expandtab
set hlsearch
set incsearch
set clipboard=unnamed
let mapleader = " "
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
2. Comandos de Edição Essenciais
i/a: Modo Inserir (antes / depois do cursor)ci": Alterar dentro de aspas duplasda{: Excluir ao redor de chaves:%s/foo/bar/g: Substituir todas as ocorrências de foo por bar no arquivo.: Repetir última modificação
Conceitos Principais
Vimrc Moderno para Produção (~/.vimrc)
Configurando padrões sensatos, gerenciador de plugins e navegação de código:
" ~/.vimrc
set nocompatible
filetype plugin indent on
syntax on
" Configurações gerais
set number
set relativenumber
set expandtab
set shiftwidth = 2
set tabstop = 2
set autoindent
set smartindent
set hlsearch
set incsearch
set ignorecase
set smartcase
set hidden
set backspace=indent,eol,start
set updatetime=300
set clipboard=unnamed
" Mapeamento da tecla líder
let mapleader = " "
" Navegação rápida entre janelas
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
" Limpar realce de busca
nnoremap <leader>h :nohlsearch<CR>
Texto Essencial: Objetos & Gramática
Combinando operadores (d, c, y, v) com objetos de texto e movimentos:
ci" - Alterar dentro de aspas duplas ("foo" -> "")
di( - Excluir dentro de parênteses
yap - Copiar (yamk) ao redor do parágrafo
gUiw - Converter palavra interna para MAIÚSCULAS
dt, - Excluir do cursor até a vírgula
. - Repetir imediatamente a última alteração
Gravação e Execução de Macros
Automatizando transformações repetitivas de dados tabulares:
1. Pressione `qa` para começar a gravar macro no registrador 'a'
2. Execute os passos de edição (ex.: `0iconst <Esc>A = true;<Esc>j`)
3. Pressione `q` para finalizar a gravação
4. Reproduza a macro na linha atual: `@a`
5. Reproduza a macro 50 vezes em linhas: `50@a`
6. Execute a macro na seleção visual: `:'<,'>normal @a`
Padrões Comuns
Gravação de Macros e Execução em Massa
Problema: Realizar edições repetitivas de múltiplos passos em várias linhas.
Solução: Gravar as teclas no registrador q.
- Posicione o cursor no ponto de início alvo.
- Pressione
qqpara começar a gravar no registradorq. - Execute a sequência de edição (ex.:
I" <Esc> A",<Esc> j ^). - Pressione
qpara parar a gravação. - Reproduza com
@q, ou execute em 50 linhas:50@q.
Gerenciamento de Plugins com vim-plug
Problema: Instalar e organizar plugins do Vim sem manipulação manual de caminhos.
Solução: Usar vim-plug.
call plug#begin('~/.vim/plugged')
Plug 'tpope/vim-sensible'
Plug 'tpope/vim-fugitive'
Plug 'preservim/nerdtree'
call plug#end()
Execute :PlugInstall dentro do Vim para instalar.
Melhores Práticas (2026)
- Faça: Domine a navegação modal (
h,j,k,l,w,b,e) e evite usar as teclas de seta. - Faça: Utilize Objetos de Texto (
ciw,da(,yi{) para editar blocos de código estruturados com o mínimo de teclas. - Faça: Use o comando ponto (
.) para repetir transformações de texto recentes em linhas semelhantes. - Faça: Ative
set hiddenpara que buffers possam permanecer abertos em segundo plano sem forçar salvamentos imediatos. - Não faça: Instale centenas de plugins VimScript legados pesados; migre para Lua do Neovim se uma experiência IDE rica for necessária.
- Não faça: Deixe arquivos de troca (
.swp) pendentes; configureset noswapfileou defina um diretório de troca dedicado. - Não faça: Use chamadas externas síncronas no
~/.vimrcque causem atraso perceptível na inicialização em máquinas remotas.
Solução de Problemas
| Erro / Sintoma | Causa | Solução |
|---|---|---|
Cópia para a área de transferência do sistema falha ("+y não faz nada) | Vim compilado sem suporte +clipboard | Instale vim-gtk3 (Ubuntu) ou macvim / neovim com suporte a área de transferência ativado. |
Teclas de seta inserem caracteres A, B, C, D | Executando em modo compatível estrito com Vi | Adicione set nocompatible no topo do ~/.vimrc. |
| Realce de espaços em branco finais persiste após busca | Realce de busca permaneceu ativo | Pressione :nohlsearch ou associe <leader>h :nohlsearch<CR>. |