Tenho usado muito o editor de textos do terminal Vim esses últimos dias. Uso tanto em casa, como no trabalho, seja no desenvolvimento das minhas aplicações, quanto para escrever esse post. Chegou a um ponto que senti a necessidade criar uma configuração para me deixar mais à vontade, pois me vi replicando as mesmas configurações uma a uma, entre os computadores. Então, partiu dar uma estudada em como realizar essa tarefa e criar um arquivo de configuração do Vim, o vimrc.
O arquivo
Todas as configurações do vim ficam em um arquivo de nome .vimrc
localizado na $HOME
. Assim, o vim já carrega automaticamente as configurações ao abrir.
Onipresença
O primeiro passo foi pensar em uma maneira de deixar ele disponível tanto em casa, quanto no trabalho. A melhor forma, pensando nas ferramentas que conheço, foi usar nosso bom amigo, o git, através do github. Então, criei um repositório e joguei o arquivo lá =).
Tendo o arquivo em mãos, para não ficar copiando manualmente, criei um script que faz isso para mim. Então, independentemente de onde eu clonar o repositório, o script é responsável por pegar o arquivo e colocar no local correto (no diretório $HOME
). O script também ficou com a responsabilidade de instalar as dependências para funcionamento correto. Que no caso, até agora é o gerenciador de plugins do vim.
Então, da forma como está implementado hoje (o futuro a Deus pertence), para usar basta rodar o script:
bash install.sh
Este comando copiará o arquivo, e instalará as dependências, se necessário. Caso deseje apenas copiar você pode rodar:
cp .vimrc $HOME
Ou ainda:
bash install.sh --vimrc
O que tem até agora no vimrc
NERDTree
A primeira coisa que me faz mais falta quando abro o Vim, é a falta de uma barra vertical lateral com a árvore de arquivos. E o plugin mais famoso para isso é o NERDTree. Ele tem uma documentação bem boa, vale a pena a leitura. A configuração garante ele instalando via Vundle, um gerenciador de plugins do Vim.
No arquivo, configuro 3 coisas:
-
Abrir o NERDTree sempre que o Vim for aberto;
-
Quando abrir o Vim, mudar o foco para o arquivo aberto;
-
Quando fechar o arquivo, caso só tenha sobrado o NERDTree aberto, fecha o Vim;
-
Configuro o atalho para abrir e fechar o NERDTree como Ctrl + o.
" Open a NERDTree automatically when vim starts up
autocmd vimenter * NERDTree
" When open change the focus to the file (and not the NERDTree)
autocmd! VimEnter * NERDTree | wincmd w
" close vim if the only window left open is a NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
" (CTRL-O) open nerd tree
nnoremap <C-o> <ESC>:NERDTreeToggle<CR>
Tema de cores
O tema de cores é um assunto bem delicado, afinal cada pessoa tem um gosto. E eu particularmente sou daqueles que costuma ficar mudando de tempos em tempos para não enjoar. No momento estou usando o horizon, baseado no Visual Studio Code. Ele é instalado usando o Vundle.
colorscheme horizon
Codar
Nesse caso é sempre uma guerra. Afinal, tab ou espaço? 2, 4 ou 8 espaços? Nesse, configurei da forma que gosto.
Resumindo: Espaços no lugar do tab, tab com 4 espaços, indentação automática, destacar abre e fecha (){}””. Por último, gosto de ver o número das linhas, no caso do vim, gosto de ver de maneira relativa para não ter que ficar contando as linhas para os comandos.
set number relativenumber
set nu rnu
" set UTF-8 encoding
set enc=utf-8
set fenc=utf-8
set termencoding=utf-8
" disable vi compatibility (emulation of old bugs)
set nocompatible
" use indentation of previous line
set autoindent
" use intelligent indentation for C
set smartindent
" configure tabwidth and insert spaces instead of tabs
set tabstop=4 " tab width is 4 spaces
set shiftwidth=4 " indent also with 4 spaces
set expandtab " expand tabs to spaces
" turn syntax highlighting on
set t_Co=256
syntax on
" highlight matching braces
set showmatch
" intelligent comments
set comments=sl:/*,mb:\ *,elx:\ */
Outros configurações
Algumas outras configurações para auxiliar e destacar o que acho importante.
" Search
set hlsearch " highlight matches
set incsearch " incremental searching
set ignorecase " searches are case insensitive...
set smartcase " ... unless they contain at least one capital letter
Dicas
O NERDTree pode abrir os arquivos em abas e ainda dividir a tela.
Mudar o foco: Para mudar o foco, pressione CTRL w + direção. A direção pode ser com as teclas hjkl ou as teclas direcionais. CTRL w + CTRL w (isso mesmo, 2 vezes) chaveia entre as janelas.
Abrir o arquivo na mesma tela, dividindo na horizontal: Selecione o arquivo no NERDTree e pressione “i”
Abrir o arquivo na mesma tela, dividindo na vertical: Selecione o arquivo no NERDTree e pressione “s”
Abrir o arquivo em outra aba: Selecione o arquivo no NERDTree e pressione “t”
Para chavear entre as abas: Pressione “g” e depois “t”, para próxima, ou “T” para a anterior, ou “#gt” para mudar para aba número #. Para facilitar, nas configurações têm uma função e um atalho para mudar de aba. H, move para aba anterior, e L, para a próxima.
" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
if exists( '*tabpagenr' ) && tabpagenr('$') != 1
" Tab support && tabs open
normal gt
else
" No tab support, or no tabs open
execute ":bnext"
endif
endfunction
function! MyPrev()
if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
" Tab support && tabs open
normal gT
else
" No tab support, or no tabs open
execute ":bprev"
endif
endfunction
nnoremap L <ESC>:call MyNext()<CR>
nnoremap H <ESC>:call MyPrev()<CR>
Outras dicas: Você pode acessar um Vim Cheat Sheet e ver as várias possibilidades e comandos para o Vim.
Conclusão
A configuração é bem simples, mas tem vários detalhes que podem otimizar o dia a dia. Além do mais, este trabalho já resolve o problema de manter todos meus ambientes “sincronizados”.
Ainda há outras coisas a se melhorar, mas é um começo e já resolve bem as questões mais simples de configurações.
Comments