Melhore suas configurações do seu editor Vim

Posted by Gilson Filho on dom 04 março 2012

Olá a todos,

Eu tenho no github, um repositório com minhas configurações do editor vim. E esses dias percebi que o .vimrc, estava muito poluído, cheio de customizações que não precisavam estar lá. Com isso, comecei a customização do zero, refatorando e colocando as minhas alterações no lugar certo.

E nesse post quero ensinar algumas alterações que fiz nos arquivos de configuração, que melhorou a legibilidade e colocou as definições do editor e de plugins nos lugares certos.

1 - Defina suas customizações do modo terminal e modo gráfico no seu devido lugar

O vim tem suporte à dois arquivos de configuração: o .vimrc e o .gvimrc. Para quem não sabe, o .vimrc é onde o programa lê as suas definições e serão usadas tanto no modo terminal, como no modo gráfico, e o .gvimrc tem o mesmo papel, só que no ambiente gráfico. O problema é que se você não colocar de forma explícita que determinadas definições é somente para o ambiente gráfico e inserir somente no .vimrc, por exemplo, pode acontecer situações que se usar o editor no modo terminal, acontecerá erros ou mesmo "quebrar" a visualização do arquivo editado. Com isso, para evitar esse problema e também retirar aquilo que não deve estar, definimos certas configurações no .gvimrc. Um exemplo disso pode ser o colorscheme a ser usado. No modo terminal usamos um tipo, e no gráfico outro:

``` vim .vimrc set background=dark colorscheme=tema_para_modo_terminal

``` vim .gvimrc
set background=light
colorscheme=outro_tema

Mas aí você me pergunta: Gilson, mas você pode definir no .vimrc uma condição, que só deve executar quando estiver em modo gráfico. Assim:

``` vim .vimrc if has("gui_running") colorscheme tema_para_gui set fontgui=Ubuntu\ Mono\ 12

E eu digo: sim, você pode fazer isso. Mas ele **precisa mesmo** estar nesse arquivo? Temos o outro arquivo de configuração para isso. Resumindo, o que ganhamos com isso?




  * Arquivo mais legível;


  * Evita potenciais problemas na utilização do editor no modo terminal e/ou gráfico;




## 2 - Defina propriedades para cada tipo de arquivo na pasta _ftdetect_


Na documentação do editor, ele recomenda criar arquivos na pasta _ftdetect_ para definir propriedades que serão usadas em determinados tipos de arquivos. Se você usa o vim para editar arquivos com a extensão *.py, *.mkd (Markdown) e *.html, por exemplo, você pode criar três arquivos dentro da pasta com o respectivo nome do tipo do arquivo. Dessa forma estará assim: _python.vim_, _markdown.vim_ e _html.vim_. Vou fazer um exemplo:


``` vim ftdetect/python.vim

set ruler

setlocal tabstop=4
setlocal softtabstop=4
setlocal shiftwidth=4
setlocal textwidth=80
setlocal smarttab
setlocal expandtab
setlocal smartindent
setlocal colorcolumn=80

``` vim ftdetect/markdown.vim

autocmd BufNewFile,BufRead .markdown,.md,.mdown,.mkd,.mkdn set ft=markdown autocmd BufNewFile,BufRead .markdown,.md,.mdown,.mkd,.mkdn set tabstop=8

``` vim ftdetect/html.vim

autocmd BufNewFile,BufRead *.html *.xhtml colorscheme outro_tema
autocmd BufNewFile,BufRead *.html *.xhtml set tabstop=2

Como já vi em outras configurações de outras pessoas, colocar essas definições lá não tem sentido, sendo que pode colocar em um arquivo e na pasta correta. Muito melhor não? ;)

3 - Insira e atualize os seus plugins de um jeito mais inteligente

A forma tradicional (até então sempre foi assim) de colocar novos plugins e scripts no seu vim, é inserir na pasta ftplugin (como a maioria é). Só que o @tpope fez um plugin que pegou a sacada de instalar e atualizar plugins de forma mais simples, usando o poder dos controles de versão que é o pathogen. Ele nada mais é do que um plugin que faz com que o vim "enxergue" todos as suas extensões em uma pasta só. E porque falei do controle de versão?

No git, por exemplo, temos a funcionalidade de submódulos que é a basicamente um "link simbólico" de um repositório que está dentro de outro repositório. Com isso, você pode atualizar e instalar os seus plugins em um só lugar, sem problemas.

4 - Defina atalhos e customizações dos seus plugins na pasta autoload

Nessa refatoração que fiz, uma das principais coisas que me incomodava é os atalhos de comandos e definições inicias de plugins que criei dentro do .vimrc. A maioria da sua sujeira era devido a isso. Então eu pensei e pensei, e encontrei uma solução simples, que poderia me ajudar (soluções mais inteligentes são bem vindos :)). O que fiz? Os atalhos customizados que criei coloquei em um arquivo chamado shortcuts.vim, e as propriedades de plugins coloquei cada um com o nome do sua respectiva extensão na pasta autoload. Exemplo: shortcuts.vim, surround.vim, etc. Olha o trecho do arquivo de atalhos abaixo:

``` vim autoload/shortcuts.vim

" ============= Mappings =========== {

" ============= Tab navigation ============= {

    noremap <C-S-N> :tabnew <CR>
    inoremap <C-S-N> :tabnew <CR><Insert>

    noremap <S-Right> :tabn<CR>
    inoremap <S-Right> <esc>:tabn<CR><Insert>

    noremap <S-Left> :tabprev<CR>
    inoremap <S-Left> <ESC>tabprev<CR><Insert>

" }

" ============= Shortcut Save (default in others editors) ============= {
    noremap <C-S> :w<CR>
    inoremap <C-S> <ESC>:w<CR><Insert>
    noremap <C-X> :x<CR>
    noremap <C-C> :y <CR>
" }

" ============= Switch background modes ============= {
    noremap <leader>l :set background=light<CR>
    noremap <leader>d :set background=dark<CR>
" }

" ============= Shortcuts NERDTree ============= {
    noremap <C-B> :NERDTreeToggle<CR>
" }

" ============= Shortcuts Buffers ============= {
    map <A-Left> :bnext <CR>
    map <A-Right> :bprevious <CR>
" }

" ============= Autoclose parentheses, brackets and braces.  ============= {
    imap { {}<left>
    imap ( ()<left>
    imap [ []<left>
" }
Após a criação desse arquivo, coloquei um comando no _.vimrc_ para carregar esse arquivo:


``` vim .vimrc

let $VIMHOME = $HOME."/.vim"

" (...)

" Importing shortcuts and other configurations
so $VIMHOME/autoload/shortcuts.vim

Com isso, cada arquivo que criar na pasta autoload, é só definir o comando acima para carregar o mesmo (claro que tem que alterar para o nome do arquivo que criou).

Essa reformulação toda que fiz não é uma boa prática, etc e tal. Fiz isso porque achei a melhor forma de organizar minhas configurações. Se gostou, faça também e compartilhe essas informações. Ficou curioso em ver minhas configurações, é só acessar aqui.

Até a próxima :)


Comments !