Configuração Avançada do Vim: Guia Prático
Introdução
O Vim é um editor de texto poderoso e altamente configurável, amplamente utilizado por desenvolvedores e administradores de sistema. Sua capacidade de personalização é uma das suas maiores forças, permitindo que os usuários adaptem o ambiente de edição às suas necessidades e preferências específicas, otimizando o fluxo de trabalho e aumentando a produtividade.
Este tutorial tem como objetivo guiá-lo através do processo de configuração e personalização do Vim, utilizando um conjunto de arquivos de configuração (.vimrc
, autocmds.vim
, customcolors.vim
, icomplete.vim
, mappings.vim
, statusbar.vim
) como exemplo prático. Abordaremos desde as configurações básicas no arquivo principal vimrc
até a exploração de arquivos externos que gerenciam autocomandos, esquemas de cores, funções de autocompletar, mapeamentos de teclas e a barra de status.
Ao final deste tutorial, você terá uma compreensão clara de como essas configurações funcionam e como pode adaptá-las ou criar as suas próprias para construir um ambiente de edição no Vim que seja verdadeiramente seu.
Pré-requisitos
Para acompanhar este tutorial, você precisará:
- Vim instalado: Certifique-se de ter o Vim instalado em seu sistema operacional. Você pode verificar a instalação e a versão digitando
vim --version
no terminal. Caso não tenha, siga as instruções de instalação para o seu sistema (geralmentesudo apt install vim
no Debian/Ubuntu,brew install vim
no macOS, ou baixe o instalador para Windows). - Conhecimento básico de uso do Vim: Este tutorial assume que você já possui um entendimento fundamental de como navegar, editar e salvar arquivos no Vim. Familiaridade com os modos de operação (Normal, Inserção, Visual, Comando) será útil.
- Acesso aos arquivos de configuração: Os arquivos de exemplo (
autocmds.vim
,customcolors.vim
,icomplete.vim
,mappings.vim
,statusbar.vim
,vimrc
) serão a base da nossa análise. Certifique-se de tê-los disponíveis para consulta.
Com esses pré-requisitos atendidos, estamos prontos para mergulhar no mundo da personalização do Vim!
Entendendo o arquivo vimrc
O arquivo .vimrc
é o coração da sua configuração do Vim. Ele é lido toda vez que o Vim é iniciado e contém uma série de comandos e configurações que definem o comportamento do editor.
Conteúdo Completo do vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
" Configurações Gerais
set nocompatible
if has('termguicolors')
set termguicolors
endif
filetype plugin indent on
syntax on
set title
set encoding=utf-8
set backspace=indent,eol,start " pode não ser necessário no Debian
set noerrorbells
set confirm
set hidden
set splitbelow
set splitright
" Caminhos
set path+=**
set noswapfile
set nobackup
set undodir=~/.vim/undodir
set undofile
" Variáveis
let $RCPATH = '~/.vim/'
let $RC = $RCPATH.'vimrc'
" Numeração de Linhas
set number
set relativenumber
set scrolloff=2
set cursorline
" Mudança do Cursor
let &t_SI="\e[6 q"
let &t_EI="\e[2 q"
" Indentação
set autoindent
set smartindent
" Tabulações
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
" Busca
set ignorecase
set smartcase
set incsearch
set hls " negado para o mapeamento do realce
let @/ = "" " redefinido para o mapeamento do realce
" Menu da Barra de Status
set wildmenu
set wildmode=longest,full
set wildoptions=pum
" Barra de Status
set noshowmode " negado para as definições da barra de status
set laststatus=2
" Quebra de Linha
set nowrap " negado para o mapeamento da quebra de linhas
set linebreak
" Folding
set foldmethod=marker
" Caracteres de Preenchimento
set nolist " negado para o mapeamento dos caracteres invisíveis
set listchars=tab:›-,space:·,trail:⋯,eol:↲
set fillchars=vert:│,fold:\ ,eob:~,lastline:@
set wildcharm=<c-z>
" Ortografia
set nospell " negado para o mapeamento da correção ortográfica
set spelllang=pt_br,en
" Menu do Modo Insert
set complete+=kspell
set completeopt=menuone,longest
set shortmess+=c
" Esquema de Cores
colorscheme habamax
" colorscheme edge
" Inclusão de Arquivos Externos
execute 'source '.$RCPATH.fnameescape('autocmds.vim')
execute 'source '.$RCPATH.fnameescape('customcolors.vim')
execute 'source '.$RCPATH.fnameescape('statusbar.vim')
execute 'source '.$RCPATH.fnameescape('mappings.vim')
execute 'source '.$RCPATH.fnameescape('icomplete.vim')
Explicação Detalhada das Configurações
Vamos analisar as principais seções do vimrc
fornecido como exemplo.
Configurações Gerais
Esta seção define o comportamento fundamental do Vim:
set nocompatible
: Desativa o modo de compatibilidade com o vi, permitindo o uso de recursos mais modernos do Vim. É uma das primeiras linhas em quase todovimrc
.if has('termguicolors')
eset termguicolors
: Habilita o suporte a cores verdadeiras (24-bit) no terminal, se o terminal suportar. Isso permite uma gama muito maior de cores para esquemas de cores.filetype plugin indent on
: Habilita a detecção de tipo de arquivo, carregamento de plugins específicos para cada tipo de arquivo e indentação automática baseada no tipo de arquivo. Essencial para um desenvolvimento eficiente.syntax on
: Ativa o realce de sintaxe, tornando o código mais legível.set title
: Exibe o nome do arquivo atual na barra de título da janela do terminal.set encoding=utf-8
: Define a codificação de caracteres padrão como UTF-8, garantindo que caracteres especiais e acentuados sejam exibidos corretamente.set backspace=indent,eol,start
: Permite que a tecla backspace apague caracteres de indentação, quebras de linha e caracteres no início da inserção. (A nota no arquivo indica que pode não ser necessário em algumas distribuições como Debian, pois já é o comportamento padrão).set noerrorbells
: Desativa os bipes de erro.set confirm
: Exibe um prompt de confirmação ao tentar sair do Vim com alterações não salvas.set hidden
: Permite que buffers não salvos sejam ocultados em vez de forçar o salvamento ou o descarte antes de mudar para outro buffer.set splitbelow
: Faz com que novas janelas divididas horizontalmente apareçam abaixo da janela atual.set splitright
: Faz com que novas janelas divididas verticalmente apareçam à direita da janela atual.
Caminhos
Esta seção gerencia como o Vim lida com arquivos e diretórios:
set path+=**
: Adiciona o diretório atual e todos os seus subdiretórios (recursivamente) aopath
de busca do Vim. Isso é útil para encontrar arquivos rapidamente com comandos como:find
.set noswapfile
: Desativa a criação de arquivos swap (.swp
). Arquivos swap são usados para recuperação de sessão em caso de falha, mas podem ser irritantes para alguns usuários.set nobackup
: Desativa a criação de arquivos de backup (.bak
).set undodir=~/.vim/undodir
: Define o diretório onde os arquivos de histórico de desfazer serão armazenados. Isso permite que você desfaça alterações mesmo após fechar e reabrir um arquivo.set undofile
: Habilita a persistência do histórico de desfazer, utilizando os arquivos noundodir
.
Variáveis
Definição de variáveis personalizadas para facilitar a referência a caminhos:
let $RCPATH = '~/.vim/'
: Define a variável de ambiente$RCPATH
para o diretório de configuração do Vim.let $RC = $RCPATH.'vimrc'
: Define a variável$RC
para o caminho completo do arquivovimrc
.
Numeração de Linhas
Configurações relacionadas à exibição de números de linha:
set number
: Exibe números de linha absolutos.set relativenumber
: Exibe números de linha relativos à linha do cursor. Isso é extremamente útil para navegação e comandos de movimento (ex:5j
para mover 5 linhas para baixo).set scrolloff=2
: Mantém 2 linhas de contexto acima e abaixo do cursor ao rolar, evitando que o cursor fique nas bordas da tela.set cursorline
: Destaca a linha onde o cursor está posicionado.
Mudança do Cursor
Configurações para a forma do cursor em diferentes modos:
let &t_SI="\e[6 q"
: Define o cursor como uma barra vertical no modo de inserção.let &t_EI="\e[2 q"
: Define o cursor como um bloco no modo normal.
Indentação
Configurações para o comportamento da indentação:
set autoindent
: Copia a indentação da linha anterior para a nova linha.set smartindent
: Indenta automaticamente novas linhas de forma mais inteligente, especialmente útil para linguagens de programação.
Tabulações
Configurações para o uso de tabulações e espaços:
set expandtab
: Converte tabulações em espaços. Altamente recomendado para manter a consistência do código.set tabstop=4
: Define o número de espaços que uma tabulação representa.set softtabstop=4
: Define o número de espaços a serem inseridos quando você pressiona a tecla Tab, e o número de espaços a serem removidos quando você pressiona Backspace.set shiftwidth=4
: Define o número de espaços para cada nível de indentação (usado por comandos como>>
e<<
).
Busca
Configurações para o comportamento da busca no Vim:
set ignorecase
: Ignora a diferença entre maiúsculas e minúsculas durante a busca.set smartcase
: Se a busca contiver letras maiúsculas, a busca se torna sensível a maiúsculas e minúsculas; caso contrário, ignora maiúsculas e minúsculas. Isso permite uma busca flexível.set incsearch
: Realça os resultados da busca à medida que você digita.set hls
: Realça todos os resultados da busca. (O arquivo indica que será alternado por um mapeamento de teclas).let @/ = ""
: Limpa o último padrão de busca. (O arquivo indica que será redefinido por um mapeamento de teclas).
Menu da Barra de Status
Configurações para o menu de autocompletar na linha de comando:
set wildmenu
: Exibe opções de autocompletar em um menu horizontal na linha de comando.set wildmode=longest,full
: Define o comportamento dowildmenu
.longest
completa até o maior prefixo comum, efull
permite navegar por todas as opções.set wildoptions=pum
: Exibe o menu de autocompletar como um pop-up (popup menu
).
Barra de Status
Configurações para a barra de status na parte inferior da tela:
set noshowmode
: Desativa a exibição do modo atual (INSERT, VISUAL, etc.) na barra de status. (A nota indica que é negado para as definições da barra de status, o que significa que a barra de status personalizada emstatusbar.vim
irá lidar com isso).set laststatus=2
: Sempre exibe a barra de status.
Quebra de Linha
Configurações para o comportamento da quebra de linha:
set nowrap
: Desativa a quebra automática de linha. Linhas longas continuarão em uma única linha horizontal. (A nota indica que é negado para o mapeamento da quebra de linhas, o que significa que um mapeamento de teclas pode alternar isso).set linebreak
: Quebra linhas longas em limites de palavras, em vez de quebrar no meio de uma palavra.
Folding
Configurações para o dobramento de código (folding):
set foldmethod=marker
: Define o método de dobramento de código comomarker
, que usa marcadores especiais no texto (como{{{
e}}}
) para definir as dobras.
Caracteres de Preenchimento
Configurações para a exibição de caracteres invisíveis e de preenchimento:
set nolist
: Desativa a exibição de caracteres invisíveis (tabulações, espaços no final da linha, etc.). (A nota indica que é negado para o mapeamento dos caracteres invisíveis, o que significa que um mapeamento de teclas pode alternar isso).set listchars=tab:›-,space:·,trail:⋯,eol:↲
: Define os caracteres a serem usados para representar tabulações, espaços, espaços no final da linha e fim de linha quandolist
está ativado.set fillchars=vert:│,fold:\ ,eob:~,lastline:@
: Define os caracteres de preenchimento para elementos como divisores verticais, dobras, fim de buffer e última linha.
set wildcharm=<c-z>
Permite o uso de <c-z>
(Ctrl+Z) em vez de <tab>
em mapeamentos, especialmente útil para o menu de autocompletar.
Ortografia
Configurações para o corretor ortográfico:
set nospell
: Desativa o corretor ortográfico. (A nota indica que é negado para o mapeamento da correção ortográfica, o que significa que um mapeamento de teclas pode alternar isso).set spelllang=pt_br,en
: Define os idiomas para o corretor ortográfico como português do Brasil e inglês.
Menu do Modo Insert
Configurações para o menu de autocompletar no modo de inserção:
set complete+=kspell
: Adiciona sugestões do corretor ortográfico ao menu de autocompletar.set completeopt=menuone,longest
: Define as opções para o menu de autocompletar.menuone
exibe o menu mesmo que haja apenas uma correspondência, elongest
completa até o maior prefixo comum.set shortmess+=c
: Reduz as mensagens de comando para serem mais concisas.
Esquema de Cores
Define o esquema de cores a ser usado:
colorscheme habamax
: Aplica o esquema de coreshabamax
. O arquivo original também comenta o esquemaedge
, indicando uma alternativa.
Inclusão de Arquivos Externos
Esta é uma parte crucial do vimrc
que permite modularizar a configuração, tornando-a mais organizada e fácil de gerenciar. Os comandos execute 'source ...'
carregam os outros arquivos .vim
que você forneceu:
execute 'source '.$RCPATH.fnameescape('autocmds.vim')
execute 'source '.$RCPATH.fnameescape('customcolors.vim')
execute 'source '.$RCPATH.fnameescape('statusbar.vim')
execute 'source '.$RCPATH.fnameescape('mappings.vim')
execute 'source '.$RCPATH.fnameescape('icomplete.vim')
Cada um desses arquivos será detalhado nas próximas seções, pois eles contêm configurações específicas para autocomandos, cores, barra de status, mapeamentos de teclas e funções de autocompletar, respectivamente.
Arquivos de Configuração Externos
Para manter a organização e a modularidade, muitas configurações do Vim são divididas em arquivos separados e depois “sourced” (incluídas) no vimrc
principal. Vamos explorar cada um desses arquivos externos.
Visão Geral dos Arquivos
Arquivo | Função Principal |
---|---|
autocmds.vim | Autocomandos para automatizar tarefas baseadas em eventos |
customcolors.vim | Personalização de cores e estilos da interface |
icomplete.vim | Funções de autocompletar personalizadas (ex: hashbangs) |
mappings.vim | Mapeamentos de teclas e atalhos personalizados |
statusbar.vim | Configuração da barra de status personalizada |
autocmds.vim
Conteúdo Completo do autocmds.vim
1
2
3
4
5
6
" Autocomandos para diferentes tipos de arquivo
autocmd filetype asm setlocal noexpandtab ts=8 sw=8 sts=8
autocmd filetype make setlocal noexpandtab
" Redimensionamento automático de janelas
autocmd vimresized * wincmd =
Explicação dos Autocomandos
Este arquivo contém autocomandos, que são comandos que o Vim executa automaticamente em resposta a certos eventos (como abrir um arquivo, salvar um buffer, etc.). Eles são extremamente poderosos para automatizar tarefas e personalizar o comportamento do Vim para diferentes tipos de arquivos ou situações.
No exemplo fornecido, temos os seguintes autocomandos:
autocmd filetype asm setlocal noexpandtab ts=8 sw=8 sts=8
: Este autocomando é acionado quando um arquivo do tipoasm
(assembly) é aberto. Ele define opções locais para o buffer atual usandosetlocal
(que afeta apenas o buffer atual, diferente deset
que afeta globalmente):noexpandtab
(não expandir tabulações para espaços) e define o tamanho da tabulação (ts
),shiftwidth
(sw
) esofttabstop
(sts
) para 8. Isso é comum em arquivos assembly, onde tabulações reais de 8 espaços são preferidas.autocmd filetype make setlocal noexpandtab
: Similar ao anterior, este autocomando é acionado para arquivos do tipomake
(Makefiles). Ele garante que as tabulações não sejam expandidas para espaços, o que é crucial para Makefiles, pois eles exigem tabulações reais para indentação.autocmd vimresized * wincmd =
: Este autocomando é acionado sempre que a janela do Vim é redimensionada (vimresized
). O comandowincmd =
garante que todas as janelas abertas sejam redimensionadas para ter o mesmo tamanho, mantendo uma distribuição uniforme do espaço.
Autocomandos são uma ferramenta essencial para adaptar o Vim a diferentes contextos de desenvolvimento, garantindo que as configurações corretas sejam aplicadas automaticamente sem intervenção manual.
customcolors.vim
Conteúdo Completo do customcolors.vim
1
2
3
4
5
6
7
8
9
10
11
" Personalização de cores e estilos
hi Normal guibg=NONE ctermbg=NONE
hi CursorLine guibg=#202130
hi ColorColumn guibg=#202130
hi Comment cterm=italic gui=italic
hi VertSplit ctermbg=NONE guibg=NONE ctermfg=7 guifg=#2c324d
hi TabLine cterm=NONE gui=NONE ctermbg=NONE guibg=NONE ctermfg=7 guifg=#2c324d
hi TabLineSel cterm=bold gui=bold ctermbg=NONE guibg=NONE ctermfg=15 guifg=#98c379
hi TabLineFill cterm=NONE gui=NONE ctermbg=NONE guibg=NONE ctermfg=7 guifg=#2c324d
hi Visual guifg=NONE guibg=#303140
hi Folded guibg=NONE guifg=#505160 gui=italic cterm=italic
Explicação das Personalizações de Cores
Este arquivo é dedicado à personalização das cores e estilos de elementos específicos da interface do Vim, sobrescrevendo ou complementando as definições do esquema de cores principal. Isso permite um controle granular sobre a aparência do editor.
As configurações neste arquivo utilizam o comando hi
(highlight) para definir grupos de destaque. As opções guibg
e guifg
controlam as cores de fundo e primeiro plano para interfaces gráficas (GUI), enquanto ctermbg
e ctermfg
fazem o mesmo para terminais. gui
e cterm
controlam atributos como negrito, itálico, sublinhado, etc.
No exemplo, temos as seguintes personalizações:
hi Normal guibg=NONE ctermbg=NONE
: Define o fundo da área de texto normal como transparente, tanto para GUI quanto para terminais. Isso é útil se você quiser que o fundo do seu terminal apareça através do Vim.hi CursorLine guibg=#202130
: Define a cor de fundo da linha onde o cursor está posicionado. O valor#202130
é um código hexadecimal de cor.hi ColorColumn guibg=#202130
: Define a cor de fundo para a coluna de cor, que é uma coluna vertical que pode ser configurada para indicar um limite de largura de linha (ex: 80 caracteres).hi Comment cterm=italic gui=italic
: Faz com que os comentários sejam exibidos em itálico, tanto em terminais quanto em GUIs.hi VertSplit ctermbg=NONE guibg=NONE ctermfg=7 guifg=#2c324d
: Personaliza a linha vertical que divide as janelas. O fundo é transparente e a cor do primeiro plano é definida para terminais e GUIs.hi TabLine
,hi TabLineSel
,hi TabLineFill
: Estas configurações controlam a aparência da barra de abas.TabLine
para abas não selecionadas,TabLineSel
para a aba selecionada (com negrito) eTabLineFill
para o espaço restante na barra de abas.hi Visual guifg=NONE guibg=#303140
: Define a cor de fundo para o texto selecionado no modo visual. Oguifg=NONE
significa que a cor do texto selecionado não será alterada, apenas o fundo.hi Folded guibg=NONE guifg=#505160 gui=italic cterm=italic
: Personaliza a aparência das dobras de código (linhas dobradas). O fundo é transparente, a cor do texto é definida e o estilo é itálico.
Este arquivo demonstra como você pode ajustar a estética do seu Vim para melhorar a legibilidade e a experiência visual, tornando-o mais agradável e funcional para suas necessidades.
icomplete.vim
Conteúdo Completo do icomplete.vim
1
2
3
4
5
6
7
8
9
" Função para autocompletar hashbangs
function! Hashbangs()
let hb = ['#!/bin/bash', '#!/usr/bin/env bash', '#!/bin/sh', '#!/usr/bin/awk -f']
call complete(col("."), hb)
return ''
endfunction
" Mapeamento para ativar autocompletar de hashbangs
imap <c-x>h <c-r>=Hashbangs()<cr>
Explicação da Funcionalidade de Autocompletar
O arquivo icomplete.vim
é um exemplo de como você pode estender a funcionalidade de autocompletar do Vim para tarefas específicas. Neste caso, ele se concentra na inserção de hashbangs.
Um hashbang (ou shebang) é a primeira linha em um script de shell ou outro script interpretado, que especifica o interpretador a ser usado para executar o script (ex: #!/bin/bash
).
O arquivo define uma função e um mapeamento de teclas:
function! Hashbangs()
:- Esta função cria uma lista de hashbangs comuns (
#!/bin/bash
,#!/usr/bin/env bash
,#!/bin/sh
,#!/usr/bin/awk -f
). call complete(col("."), hb)
: Este comando é a chave. Ele instrui o Vim a apresentar a listahb
como opções de autocompletar na coluna atual do cursor.col(".")
retorna o número da coluna do cursor.return ''
: A função retorna uma string vazia, pois o preenchimento é tratado pelocomplete()
.
- Esta função cria uma lista de hashbangs comuns (
imap <c-x>h <c-r>=Hashbangs()<cr>
:- Este é um mapeamento de teclas no modo de inserção (
imap
). <c-x>h
: Quando você pressionaCtrl+X
seguido deh
no modo de inserção, este mapeamento é ativado.<c-r>=Hashbangs()<cr>
: Isso executa a funçãoHashbangs()
e insere o resultado (que é uma string vazia, mas o efeito colateral é o menu de autocompletar) no buffer. O<cr>
simula um Enter.
- Este é um mapeamento de teclas no modo de inserção (
Em resumo, este arquivo permite que você digite Ctrl+X h
no modo de inserção e o Vim apresentará um menu pop-up com opções de hashbangs para você escolher, agilizando a criação de novos scripts.
mappings.vim
Conteúdo Completo do mappings.vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
" Mapeamentos Gerais
map j gj
map k gk
map <down> gj
map <up> gk
" Mapeamentos para autocompletar
inoremap <expr> <up> pumvisible() ? "\<C-P>" : "\<C-O>gk"
inoremap <expr> <down> pumvisible() ? "\<C-N>" : "\<C-O>gj"
inoremap <expr> <right> pumvisible() ? "\<C-Y>" : "\<Right>"
inoremap <expr> <cr> pumvisible() ? "\<C-Y>" : "\<CR>"
" Fechamento automático de pares
inoremap ( ()<left>
inoremap [ []<left>
inoremap { {}<left>
inoremap " ""<left>
inoremap ' ''<left>
" Envolvimento de seleção visual com pares
vnoremap " c""<esc>P
vnoremap ' c''<esc>P
vnoremap ( c()<esc>P
vnoremap [ c[]<esc>P
vnoremap { c{}<esc>P
" Indentação com restauração de seleção
vmap < <gv
vmap > >gv
" Rolagem de página
nmap <c-down> <c-d>
nmap <c-up> <c-u>
imap <c-down> <c-o><c-d>
imap <c-up> <c-o><c-u>
" Rolagem com centralização
nmap <c-d> <c-d>zz
nmap <c-u> <c-u>zz
" Snippets
nmap <c-s> :-1read ~/.vim/snippets/<c-z>
" Teclas de Função
map <f1> :set rnu!<cr>
map <f2> :set spell!<cr>
map <f3> :set wrap!<cr>
map <f4> :term<cr>
map <f5> :term %:p<cr>
map <f6> :set list!<cr>
map <f7> g<c-g>
map <f8> :term gdb<cr>
map <f9> :term make<cr>
" Configuração da tecla leader
let mapleader = ' '
" Mapeamentos com leader - Realce de busca
map <leader>hh :set hls!<cr>
map <leader>hc :let @/ = ""<cr>
" Área de transferência do sistema
vmap <silent> <leader>yy "+y
vmap <silent> <leader>dd "+c
" Salvamento e buffers
map <leader>w :update<cr>
map <leader>p "0p
map <leader>P "0P
map <leader>bn :enew<cr>
map <leader>, :bp<cr>
map <leader>. :bn<cr>
" Coluna de destaque
map <leader>cc :execute "set colorcolumn=" . (&colorcolumn == "" ? "80" : "")<cr>
" Marcas de dobra
map <leader>zz :!~/.vim/scripts/foldmark<cr>
" Gerenciamento de abas
map <leader>ta :tab ball<cr>
map <leader>to :tabonly<cr>
" Explorador de arquivos
map <leader>e :30Lex<cr>
Explicação dos Mapeamentos
O arquivo mappings.vim
é onde a verdadeira otimização do fluxo de trabalho acontece através da redefinição de atalhos de teclado. Mapeamentos de teclas permitem que você execute comandos complexos ou sequências de ações com apenas algumas teclas, tornando a edição no Vim muito mais eficiente.
Vamos analisar as categorias de mapeamentos presentes neste arquivo:
Mapeamentos Gerais
map j gj
emap k gk
: Estes mapeamentos fazem com quej
ek
(e as setas<down>
e<up>
) se movam por linhas visuais (linhas que podem ter quebra de linha) em vez de linhas lógicas. Isso é útil quandoset wrap
está ativado.inoremap <expr> <up> pumvisible() ? "\<C-P>" : "\<C-O>gk"
: Este mapeamento no modo de inserção verifica se o menu de autocompletar (pumvisible()
) está visível. Se estiver,<up>
navega para a opção anterior no menu (<C-P>
). Caso contrário, ele se move para cima uma linha visual (<C-O>gk
).inoremap <expr> <down> pumvisible() ? "\<C-N>" : "\<C-O>gj"
: Similar ao anterior, mas para navegar para baixo no menu de autocompletar ou mover para baixo uma linha visual.inoremap <expr> <right> pumvisible() ? "\<C-Y>" : "\<Right>"
: Se o menu estiver visível, aceita a opção selecionada (<C-Y>
); caso contrário, move o cursor para a direita.inoremap <expr> <cr> pumvisible() ? "\<C-Y>" : "\<CR>"
: Se o menu estiver visível, aceita a opção selecionada; caso contrário, insere uma quebra de linha normal.inoremap (
e outros para fechamento de pares: Estes mapeamentos no modo de inserção (inoremap
significa que não são recursivos) inserem automaticamente o caractere de fechamento correspondente e posicionam o cursor entre os pares. Por exemplo, digitar(
insere()
e move o cursor para dentro dos parênteses. Isso acelera a digitação de código.vnoremap " c""<esc>P
e outros para seleção visual: Estes mapeamentos no modo visual (vnoremap
) permitem que você selecione um texto e, ao digitar um caractere de abertura de par, ele envolva a seleção com o par correspondente. Por exemplo, selecionar um texto e digitar(
o envolverá com parênteses.vmap < <gv
evmap > >gv
: Estes mapeamentos no modo visual permitem que você indente ou desindente uma seleção e, em seguida, restaure a seleção original (gv
).nmap <c-down> <c-d>
enmap <c-up> <c-u>
: MapeiamCtrl+Down
eCtrl+Up
para rolar meia página para baixo e para cima, respectivamente, nos modos normal e de inserção.nmap <c-d> <c-d>zz
enmap <c-u> <c-u>zz
: Estes mapeamentos rolam meia página e, em seguida, centralizam a linha do cursor na tela (zz
).nmap <c-s> :-1read ~/.vim/snippets/<c-z>
: Abre um menu para inserção de snippets. Ao pressionarCtrl+S
no modo normal, ele lê um arquivo de snippet do diretório~/.vim/snippets/
e usa<c-z>
(definido novimrc
comowildcharm
) para autocompletar o nome do snippet.
Teclas de Função (F1 a F9)
Estas teclas de função são mapeadas para alternar configurações ou executar comandos úteis:
<f1>
: Alterna a numeração relativa/absoluta (:set rnu!
).<f2>
: Alterna a correção ortográfica (:set spell!
).<f3>
: Alterna a quebra de linha (:set wrap!
).<f4>
: Abre um terminal dentro do Vim (:term
).<f5>
: Abre um terminal e executa o arquivo atualmente em edição (:term %:p
).<f6>
: Alterna a exibição de caracteres invisíveis (:set list!
).<f7>
: Exibe estatísticas do arquivo (número de palavras, linhas, etc.) (g<c-g>
).<f8>
: Abre o debuggergdb
em um terminal dentro do Vim (:term gdb
).<f9>
: Executa o comandomake
em um terminal dentro do Vim (:term make
).
Mapeamentos com a Tecla leader
A tecla leader
é uma tecla especial que você define para ser o prefixo de uma série de mapeamentos personalizados. Isso evita conflitos com os mapeamentos padrão do Vim e permite criar um conjunto de atalhos lógicos e fáceis de lembrar.
let mapleader = ' '
: Define a teclaleader
como a barra de espaço. Isso é uma escolha popular, pois a barra de espaço é fácil de alcançar e não é usada para muitos comandos padrão do Vim.<leader>hh
: Alterna o realce de busca (:set hls!
).<leader>hc
: Limpa o realce de busca (:let @/ = ""
).vmap <silent> <leader>yy "+y
evmap <silent> <leader>dd "+c
: Copiam (y
) e recortam (c
) a seleção visual para a área de transferência do sistema ("+
), permitindo colar o conteúdo em outras aplicações fora do Vim.map <leader>w :update<cr>
: Salva o arquivo apenas se houver mudanças. Isso é mais eficiente do que:w
se você salva frequentemente.map <leader>p "0p
emap <leader>P "0P
: Colam o conteúdo do registro0
(que contém a última cópia, não o último recorte). Isso é útil se você recortou algo e quer colar a cópia anterior.<leader>bn
: Cria um novo buffer vazio (:enew
).<leader>,
e<leader>.
: Navegam entre os buffers abertos (:bp
para buffer anterior,:bn
para buffer próximo).<leader>cc
: Alterna o destaque de coluna. Secolorcolumn
estiver vazio, define para 80; caso contrário, remove.<leader>zz
: Insere marcas de dobra ({{{
e}}}
). Ele executa um script externo~/.vim/scripts/foldmark
.<leader>ta
: Abre todos os buffers em abas (:tab ball
).<leader>to
: Mantém apenas a aba atual e fecha as outras (:tabonly
).<leader>e
: Abre o explorador de arquivos (:Lex
) em uma janela de 30 colunas.
Este arquivo de mapeamentos é um excelente exemplo de como personalizar o Vim para se adequar ao seu estilo de trabalho, transformando tarefas repetitivas em atalhos de teclado eficientes.
statusbar.vim
Conteúdo Completo do statusbar.vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
" Destaque da linha de status
hi statusline gui=bold guibg=#98C379 guifg=#101120
hi statuslinenc gui=NONE cterm=NONE guibg=#3E4452 guifg=#B0B1C0
" Mudança de cor da barra de status conforme o modo
augroup ModeEvents
autocmd!
au InsertEnter * hi statusline guibg=#61AFEF
au InsertLeavePre * hi statusline guibg=#98C379
au ModeChanged *:[vV\x16]* hi statusline guibg=#C678DD
au Modechanged [vV\x16]*:* hi statusline guibg=#98C379
au ModeChanged *:[R]* hi statusline guibg=#EB6E6E
au ModeChanged [R]* hi statusline guibg=#98C379
augroup END
" Função para configurar a barra de status ativa
function! ActiveStatusLine()
" Dicionário de modos
let g:currentmode={
\ 'n' : 'Normal',
\ 'no' : 'Normal·Operator Pending',
\ 'v' : 'Visual',
\ 'V' : 'V·Line',
\ '^V' : 'V·Block',
\ 's' : 'Select',
\ 'S' : 'S·Line',
\ '^S' : 'S·Block',
\ 'i' : 'Insert',
\ 'R' : 'Replace',
\ 'Rv' : 'V·Replace',
\ 'c' : 'Command',
\ 'cv' : 'Vim Ex',
\ 'ce' : 'Ex',
\ 'r' : 'Prompt',
\ 'rm' : 'More',
\ 'r?' : 'Confirm',
\ '!' : 'Shell',
\ 't' : 'Terminal'
\}
" Configuração da linha de status
set statusline=%0*\ %{toupper(g:currentmode[mode()])}
set statusline+=\ %1*\ [%n]\ %t%{&modified!=''?'\ \|\ +':''}
set statusline+=\ %2*%=\
set statusline+=%{&ff}\ \|\ %{&fenc!=''?&fenc:&enc}
set statusline+=\ \|\ %{&filetype!=''?tolower(&filetype):'no\ ft'}
set statusline+=\ %1*\ %p%%\ %0*\ \ %l:%c\ \
" Definição de grupos de usuário para cores
hi User1 gui=NONE cterm=NONE guifg=#b0b1c0 guibg=#3E4452
hi User2 gui=NONE cterm=NONE guifg=#b0b1c0 guibg=#2C324D
endfunction
" Ativar a barra de status personalizada
call ActiveStatusLine()
Explicação da Barra de Status Personalizada
O arquivo statusbar.vim
é responsável por personalizar a aparência e o conteúdo da barra de status do Vim, que é a linha na parte inferior da tela que fornece informações contextuais sobre o arquivo e o estado atual do editor.
Destaque da Linha de Status
hi statusline gui=bold guibg=#98C379 guifg=#101120
: Define o estilo da barra de status para a janela ativa.gui=bold
a torna em negrito,guibg
define a cor de fundo eguifg
a cor do texto.hi statuslinenc gui=NONE cterm=NONE guibg=#3E4452 guifg=#B0B1C0
: Define o estilo da barra de status para janelas inativas (nc
de non-current). O fundo e o primeiro plano são diferentes para distinguir a janela ativa das inativas.
ModeEvents
(Mudança de Cor da Barra de Status Conforme o Modo)
Este autocmd group
é um recurso poderoso que altera a cor de fundo da barra de status com base no modo atual do Vim. Isso fornece um feedback visual instantâneo sobre em qual modo você está, o que é extremamente útil para evitar erros e melhorar a navegação.
augroup ModeEvents
eautocmd!
: Define um grupo de autocomandos chamadoModeEvents
e limpa quaisquer autocomandos existentes nesse grupo para evitar duplicações.au InsertEnter * hi statusline guibg=#61AFEF
: Quando você entra no modo de inserção (InsertEnter
), a cor de fundo da barra de status muda para um tom de azul (#61AFEF
).au InsertLeavePre * hi statusline guibg=#98C379
: Antes de sair do modo de inserção (InsertLeavePre
), a cor de fundo retorna ao verde original (#98C379
), indicando o modo normal.au ModeChanged *:[vV\x16]* hi statusline guibg=#C678DD
: Quando o modo muda para qualquer modo visual (visual, visual de linha, visual de bloco), a cor de fundo muda para roxo (#C678DD
).au Modechanged [vV\x16]*:* hi statusline guibg=#98C379
: Quando o modo muda de um modo visual para qualquer outro modo, a cor de fundo retorna ao verde.au ModeChanged *:[R]* hi statusline guibg=#EB6E6E
: Quando o modo muda para o modo de substituição (R
), a cor de fundo muda para vermelho (#EB6E6E
).au ModeChanged [R]* hi statusline guibg=#98C379
: Quando o modo muda do modo de substituição para qualquer outro modo, a cor de fundo retorna ao verde.
Função ActiveStatusLine()
Esta função define o conteúdo da barra de status e é chamada no final do arquivo para ativá-la.
let g:currentmode={...}
: Um dicionário que mapeia os códigos de modo internos do Vim para nomes de modo mais legíveis (ex:'n'
para'Normal'
,'i'
para'Insert'
).set statusline=%0*\ %{toupper(g:currentmode[mode()])}
: Define o primeiro segmento da barra de status. Ele exibe o nome do modo atual (obtido do dicionáriog:currentmode
e convertido para maiúsculas) com um estilo específico (%0*
).set statusline+=\ %1*\ [%n]\ %t%{&modified!=\'\'?'\ \|\ +':\'\'}
: Adiciona o número do buffer (%n
), o nome do arquivo (%t
) e um indicador de modificação (+
se o arquivo foi modificado, ` ` caso contrário). O estilo é definido por%1*
.set statusline+=\ %2*%=\
: Adiciona um espaçador (%=\
) que empurra os segmentos seguintes para a direita da barra de status, e define um novo estilo (%2*
).set statusline+=%{&ff}\ \|\ %{&fenc!=\'\'?:&fenc:&enc}
: Exibe o formato do arquivo (&ff
, ex:unix
,dos
), e a codificação do arquivo (&fenc
se definida, caso contrário&enc
).set statusline+=\ \|\ %{&filetype!=\'\'?:tolower(&filetype):\'no\ ft\'}
: Exibe o tipo de arquivo (&filetype
, em minúsculas) ou ‘no ft’ se não houver tipo de arquivo definido.set statusline+=\ %1*\ %p%%\ %0*\ \ %l:%c\ \
: Adiciona a porcentagem de rolagem do arquivo (%p%%
), a linha atual (%l
) e a coluna atual (%c
).hi User1 gui=NONE cterm=NONE guifg=#b0b1c0 guibg=#3E4452
ehi User2 gui=NONE cterm=NONE guifg=#b0b1c0 guibg=#2C324D
: Definem estilos para grupos de usuário que podem ser usados para colorir partes específicas da barra de status.
Este arquivo demonstra como você pode criar uma barra de status altamente informativa e visualmente dinâmica, fornecendo feedback constante sobre o estado do seu editor e do arquivo que você está editando.
Como usar estas configurações
Para aplicar as configurações e personalizações que analisamos, siga estes passos:
Estrutura de Diretórios
É uma boa prática organizar seus arquivos de configuração do Vim em um diretório dedicado. A estrutura recomendada para este exemplo é:
1
2
3
4
5
6
7
~/.vim/
├── autocmds.vim
├── customcolors.vim
├── icomplete.vim
├── mappings.vim
├── statusbar.vim
└── vimrc
~/.vim/
: Este é o diretório principal para todas as suas configurações e plugins do Vim. Se ele não existir, você precisará criá-lo.vimrc
: Este arquivo deve ser colocado diretamente no seu diretório~
(home), ou você pode criar um link simbólico para ele a partir de~/.vim/vimrc
para~/.vimrc
.
Onde colocar os arquivos
- Crie o diretório
.vim
:1
mkdir -p ~/.vim
- Copie os arquivos
.vim
para o diretório.vim
:1
cp autocmds.vim customcolors.vim icomplete.vim mappings.vim statusbar.vim ~/.vim/
- Copie ou crie um link simbólico para o
vimrc
:1 2 3 4 5
# Opção 1: Copiar o arquivo cp vimrc ~/.vimrc # Opção 2: Criar um link simbólico (recomendado para facilitar a manutenção) ln -s ~/.vim/vimrc ~/.vimrc
Criação de Diretórios Adicionais
Algumas configurações podem exigir diretórios adicionais:
- Diretório de undo:
1
mkdir -p ~/.vim/undodir
- Diretório de snippets (se você usar a funcionalidade de snippets):
1
mkdir -p ~/.vim/snippets
- Diretório de scripts (se você usar scripts personalizados):
1
mkdir -p ~/.vim/scripts
Testando a Configuração
- Abra o Vim:
1
vim
Verifique se não há erros: Se houver erros de configuração, o Vim os exibirá na inicialização. Leia as mensagens de erro cuidadosamente e corrija os problemas.
- Teste algumas funcionalidades:
- Pressione
F1
para alternar a numeração de linhas - Pressione
F2
para alternar a correção ortográfica - Teste os mapeamentos de teclas como
<leader>hh
(barra de espaço + h + h)
- Pressione
Ajustes e Extensões
Cores: Se o esquema de cores
habamax
não for do seu agrado, você pode experimentar outros. Muitos esquemas de cores estão disponíveis online (por exemplo, no GitHub). Basta baixar o arquivo.vim
do esquema de cores e colocá-lo em~/.vim/colors/
(você pode precisar criar este diretório). Em seguida, altere a linhacolorscheme habamax
no seu.vimrc
para o nome do novo esquema de cores.Plugins: Para estender ainda mais a funcionalidade do Vim, você pode usar um gerenciador de plugins como
Vim-Plug
,Pathogen
ouVundle
. Eles simplificam a instalação e o gerenciamento de plugins, que são coleções de scripts Vim que adicionam novos recursos.Personalização: Este exemplo é um ponto de partida. Sinta-se à vontade para modificar os mapeamentos de teclas, autocomandos e estilos de cores para se adequar ao seu próprio fluxo de trabalho. A documentação do Vim (
:help
) é um recurso inestimável para explorar todas as opções disponíveis.
Solução de Problemas Comuns
Durante a configuração do Vim, você pode encontrar alguns problemas comuns. Aqui estão algumas dicas para resolvê-los:
Problemas de Carregamento de Configuração
- Erro “E484: Can’t open file”: Verifique se os caminhos dos arquivos estão corretos e se os arquivos existem nos locais especificados.
- Configurações não aplicadas: Certifique-se de que o arquivo
.vimrc
está no diretório home (~/.vimrc
) ou que você está usando o comando:source ~/.vimrc
para recarregar as configurações.
Problemas de Mapeamentos
- Mapeamentos não funcionam: Verifique se não há conflitos com mapeamentos existentes. Use
:verbose map <tecla>
para ver todos os mapeamentos de uma tecla específica. - Caracteres especiais: Certifique-se de usar a sintaxe correta para caracteres especiais (ex:
<cr>
para Enter,<esc>
para Escape).
Problemas de Cores
- Cores não aparecem corretamente: Verifique se seu terminal suporta cores verdadeiras (24-bit) e se
set termguicolors
está habilitado. - Esquema de cores não encontrado: Certifique-se de que o arquivo do esquema de cores está no diretório
~/.vim/colors/
.
Problemas de Performance
- Vim lento ao iniciar: Muitos plugins ou configurações complexas podem tornar o Vim lento. Use
:profile start profile.log
e:profile func *
para identificar gargalos. - Sintaxe lenta: Para arquivos muito grandes, considere desabilitar temporariamente o realce de sintaxe com
:syntax off
.
Conclusão
Parabéns! Você concluiu este tutorial sobre a configuração e personalização do Vim. Ao analisar os arquivos vimrc
, autocmds.vim
, customcolors.vim
, icomplete.vim
, mappings.vim
e statusbar.vim
, você obteve uma visão aprofundada de como o Vim pode ser adaptado para atender às suas necessidades específicas.
A personalização do Vim é um processo contínuo e gratificante. Os benefícios incluem:
- Eficiência Aumentada: Mapeamentos de teclas personalizados e autocomandos automatizam tarefas repetitivas, economizando tempo e esforço.
- Experiência Visual Aprimorada: Esquemas de cores e configurações da barra de status tornam o ambiente de edição mais agradável e informativo.
- Fluxo de Trabalho Otimizado: Funções de autocompletar e ajustes de indentação contribuem para um processo de codificação mais suave e menos propenso a erros.
Próximos Passos
Encorajamos você a continuar explorando e adaptando suas configurações do Vim. Aqui estão algumas sugestões:
- Experimente: Não tenha medo de modificar os arquivos de configuração. Faça backup antes de grandes mudanças e teste as alterações para ver como elas afetam seu fluxo de trabalho.
- Explore a Documentação do Vim: O comando
:help
dentro do Vim é uma fonte inestimável de informações sobre todas as opções, comandos e recursos do editor. - Descubra Plugins: O ecossistema de plugins do Vim é vasto. Explore plugins para gerenciamento de projetos, linting de código, integração com sistemas de controle de versão e muito mais.
- Compartilhe suas Configurações: Muitos usuários do Vim compartilham seus arquivos
dotfiles
(incluindo ovimrc
) em plataformas como o GitHub. Isso é uma ótima maneira de aprender novas técnicas e descobrir configurações interessantes.
Lembre-se, o Vim é uma ferramenta poderosa que se adapta a você. Com dedicação e experimentação, você pode transformá-lo em um ambiente de edição altamente produtivo e personalizado.