Disseram-me IDE! Então eu VIM

Existem muitos artigos e flamewars (principalmente entre vim x emacs) sobre “a melhor IDE para se desenvolver qualquer coisa”. Não vou dizer qual a melhor, até mesmo porque a melhor é a que você gostar mais, mas nesse artigo vou tratar de um programa bem rico e customizável: o VIM.

De início, utilizar o vim parece um “parto”. Tudo é comando, as teclas de atalho mais conhecidas não funcionam, aquela interface simples chega a dar repulsa. Felizmente, isso passa. Nada do que um bom :help para aprender a mexer mo bichinho. Seguir o tutorial padrão do sistema é uma ótima ideia para se aprender o básico, e, daí, aproveitar o máximo que esse editor de textos pode proporcionar.

Uma das características principais do vim é sua customização. Praticamente tudo é customizável, e até programável. A possibilidade de fazer plugins e outras coisas mais como “syntax highlight” vão incrementando sua área de edição a ponto de deixar da maneira que você quiser.

Já utilizo o vim há um tempo, inicialmente para montar HTML + CSS e atualmente para programar em Rails. Praticamente abandonei o Eclipse e o Aptana para utilizar somente o vim. Para chegar a tal ponto de “migrar” de IDE, tive que passar por um relativo processo de customização do editor para que ele ficasse “no ponto”. Existe um arquivo chamado “.vimrc” na pasta raiz da aplicação. É lá que você vai aplicar as alterações propostas nesse artigo.

O arquivo que disponibilizo é uma versão customizada do vim criada por mim, e está todo comentado.

Inicialmente, recomendo a instalação dos seguintes plugins:

Depois, instale um corretor ortográfico da língua portuguesa. Para isso você precisará ter a versão 7 ou superior do vim.

  • Faça o download do dicionário
  • Descompacte o arquivo
  • No vim, digite o comando ‘:mkspell pt /caminho/do/descompactamento/pt_BR’
  • Copie o arquivo gerado para a pasta ~/.vim/spell/
  • Ative a correção: ‘:set spell’
  • Escolha o dicionário: ‘:set spelllang=pt’

Pronto, esses são os plugins que eu recomendo para a utilização do vim e transformá-lo numa verdadeira IDE, mas não basta só isso. Vamos agora para o principal: o arquivo de configuração .vimrc. Eu configurei um arquivo que pode ser utilizado tanto no vim para windows como na versão linux. Peguei um apanhado de configurações da internet e personalizei ao meu gosto. Acredito que provavelmente seja do gosto da maioria.

Se você utiliza o vim no Windows, adicione seguinte linha no início do arquivo:

source $VIMRUNTIME/vimrc_example.vim

Abaixo, o arquivo comentado e explicado.

"""""""""""""""""""""""""""""""""""
" CONFIGURAÇÕES PADRONIZADAS GOGS "
"""""""""""""""""""""""""""""""""""

set number                    " Numera as linhas
set nobackup                  " Não salva arquivos de backup~
set wildmode=longest,list     " Completa o comando com TAB igual o bash

set ignorecase                " Ignora o case sensitive nas buscas
set smartcase                 " Se tiver alguma letra maiúscula, ativa o case sensitive

set smartindent               " Auto-indenta
set expandtab                 " Identa com espaços

set tabstop=2                 " Quantidade de espaços por identação
set shiftwidth=2              " Quantidade de espaços da auto-indentação

set guioptions-=T                    " Deixa a GUI sem a toolbar
set autochdir                 " Vai pro diretório do arquivo aberto

" Corretor ortográfico
set spelllang=pt              " Escolhe o dicionário

" Inicia no modo INSERT
set im
imap <ESC> <C-L>

" Cria e escolhe as abas
noremap <C-T> :tabnew<CR>
noremap <C-TAB> :tabnext<CR>
noremap <C-S-TAB> :tabprevious<CR>
inoremap <C-T> <C-O>:tabnew<CR>
inoremap <C-TAB> <C-O>:tabnext<CR>
inoremap <C-S-TAB> <C-O>:tabprevious<CR>

" Mover texto com os TABs
vnoremap < <gv
vnoremap > >gv
noremap <TAB> >
noremap <S-TAB> <

" Auto-fecha parênteses, chaves etc.
"inoremap { {}<LEFT>
"inoremap ( ()<LEFT>
"inoremap [ []<LEFT>
"inoremap " ""<LEFT>
"inoremap ' ''<LEFT>

" Move linhas ou blocos usando ALT+SETA
nnoremap <A-DOWN> mz:m+<CR>`z==
nnoremap <A-UP> mz:m-2<CR>`z==
inoremap <A-DOWN> <Esc>:m+<CR>==gi
inoremap <A-UP> <Esc>:m-2<CR>==gi
vnoremap <A-DOWN> :m'>+<CR>gv=`<my`>mzgv`yo`z
vnoremap <A-UP> :m'<-2<CR>gv=`>my`<mzgv`yo`z

" Deleta linha com CTRL+D
noremap <C-D> dd
vnoremap <C-D> <C-C>dd
inoremap <C-D> <C-O>dd

" Organiza identação de um bloco selecionado com CTRL+ALT+F
noremap <C-A-F> ==
vnoremap <C-A-F> <C-Q>==
inoremap <C-A-F> <C-O>==

" Command-line com CTRL+ALT+C
noremap <C-A-C> :
vnoremap <C-A-C> <C-Q>:
inoremap <C-A-C> <C-O>:

" Busca com CTRL+F
noremap <C-F> /
vnoremap <C-F> <C-Q>/
inoremap <C-F> <C-O>/

" Abre arquivos com CTRL+O
noremap <C-O> :tabnew 
vnoremap <C-O> <C-Q>:tabnew 
inoremap <C-O> <C-O>:tabnew 

" Função que usa o omnicomplete apenas com o CTRL+SPACE
inoremap <C-SPACE> <C-X><C-O>
filetype plugin on

"""""""""""""""""""""""""""""
" Atalhos comuns de teclado "
"""""""""""""""""""""""""""""

" Permite selecionar com SHIFT + SETA como no Windows
set selectmode=mouse,key
set mousemodel=popup
set keymodel=startsel,stopsel
set selection=exclusive

" Backspace no modo de visão apaga a seleção
vnoremap <BS> d

" CTRL-X e SHIFT-Del corta
vnoremap <C-X> "+x
vnoremap <S-Del> "+x

" CTRL-C e CTRL-Insert copia
vnoremap <C-C> "+y
vnoremap <C-Insert> "+y

" CTRL-V e SHIFT-Insert cola
noremap <C-V>        "+gP
noremap <S-Insert>   "+gP
inoremap <C-V>       <C-O>:set nosi<CR><C-R>+<C-O>:set si<CR>
inoremap <S-Insert>  <C-R>+
cnoremap <C-V>       <C-O>:set nosi<CR><C-R>+<C-O>:set si<CR>
cnoremap <S-Insert>  <C-R>+

" CTRL-S salva
noremap <C-S>  :update<CR>
vnoremap <C-S> <C-C>:update<CR>
inoremap <C-S> <C-O>:update<CR>

" CTRL-Z desfaz
noremap <C-Z> u
vnoremap <C-Z> <C-C>u
inoremap <C-Z> <C-O>u

" CTRL-Y refaz
noremap <C-Y> <C-R>
inoremap <C-Y> <C-O><C-R>

" CTRL-A seleciona tudo
noremap <C-A> gggH<C-O>G
inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
cnoremap <C-A> <C-C>gggH<C-O>G
onoremap <C-A> <C-C>gggH<C-O>G
snoremap <C-A> <C-C>gggH<C-O>G
xnoremap <C-A> <C-C>ggVG

" CTRL-F4 fecha a janela
noremap <C-F4> <C-W>c
inoremap <C-F4> <C-O><C-W>c
cnoremap <C-F4> <C-C><C-W>c
onoremap <C-F4> <C-C><C-W>c

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Opções de plugins (Retire essas linhas se não tiver estes plugins) "
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

colorscheme ir_black                                              " Escolhe o tema
au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim          " Carrega o arquivo de sintaxe para TXT

" Atalhos para plugins
noremap <F5>  :NERDTree<CR>
noremap <F7>  :set spell<CR>z=
inoremap <F5> <C-O>:NERDTree<CR>
inoremap <F7> <C-O>:set spell<CR><C-O>z=

"""""""""""""""""""""""
" Informações e dicas "
"""""""""""""""""""""""
" Plugins recomendados:
" - NERDTree :: Lista os arquivos em árvore
" - ir_black :: Colorscheme bem bonito
" - txt.vim :: Sintaxe para arquivos de texto feito pelo aurelio.net
" - jquery.vim :: Sintaxe para arquivos jquery.vim
" - html_autoclosetag :: Fecha as tags HTML automaticamente
" - snipMate :: Autocompleta funções inteiras
"               Para que o <tab> do snipMate não anule o TAB para identar
"               blocos, edite o arquivo ~/.vim/after/plugin/snipMate.vim
"               substituindo os mapeamentos 'ino' por 'imap' como no ex.:
"               imap <silent> <tab> <c-r>=TriggerSnippet()<cr>
"               imap <silent> <s-tab> <c-r>=BackwardsSnippet()<cr>
"               imap <silent> <c-r><tab> <c-r>=ShowAvailableSnips()<cr>
"               Apague todas as linhas começadas por 'snor'.
"
" Corretor ortográfico em português brasileiro:
" - Faça o download do dicionário em: http://www.broffice.org/verortografico/baixar
" - Descompacte o arquivo
" - No vim, digite o comando ':mkspell pt pt_BR'
" - Copie o arquivo pt.utf-8.spl gerado para a pasta ~/.vim/spell/
" - Ative a correção: ':set spell'
" - Escolha o dicionário: ':set spelllang=pt'

23 comentários em “Disseram-me IDE! Então eu VIM

  1. =======================================================================
    SNIPMATE – Plugin para complementar trechos inteiros de código
    =======================================================================
    Outro plugin que recomendo fortemente é o snipMate, só vendo para crer!
    video no vimeo: http://www.vimeo.com/3535418

    link oficial: http://www.vim.org/scripts/script.php?script_id=2540

    =======================================================================
    FUZZYFINDER – Um recurso portado do editor texmate do MAC
    =======================================================================
    Como dizem nas propagandas sem fim da TV, e tem mais
    o plugin fuzzyfinder (no meu caso uso mapeamentos para agilizar)

    link oficial: http://www.vim.org/scripts/script.php?script_id=1984

    * Veja também
    + plugin visincr – incrementa números no modo visual
    + project – gerencia projetos abrindo todos os arquivod e um projeto
    + http://vivaotux.blogspot.com/2009/01/nosso-livro-sobre-o-vim.html
    + http://www.slideshare.net/ZendCon/vim-for-php-programmers-presentation
    apesar de ser voltado para php tem muitas dicas para uso em programação

    A troca de informações é de suma importância neste momento de mudança de paradigma, o conhecimento está espalhado por todos os lados, e temos a obrigação de dinfundi-lo. Valeu!

    1. OBRIGADO CARA!

      Realmente suas dicas foram surpreendentes e vou testá-las. Seu comentário havia parado nos “SPAMs” não sei por quê.

      Valeu a dica.

    1. Ótima dica, Philipe, mas não vi no Cream nenhuma listagem de arquivos em árvore (como o NERDTree) nem tampouco um corretor ortográfico brasileiro.

      1. Acredito que tenha como utilizar os plugins normais do Vim nele. Tem também spell checker entre as features padrões (mas acho que não vem com dic pt-br).

        De qualquer forma prefiro o Vim mesmo com meu vimrc e plugins.
        Lembrei do Cream por causa dos seus atalhos. 😉

  2. Henrique, poderia detalhar melhor a instalação do dicionário? Qual arquivo baixar, onde descompactar e como fazer o mkspell funcionar, pois tentei aqui e não estou obtendo êxito.
    Parabéns pelo post.

    1. Para baixar, utilize o link que eu coloquei no blog http://www.broffice.org/verortografico/baixar renomeie o arquivo para .zip e descompacte onde quiser.
      Depois entre no VIM e digite :mkspell pt /caminho/do/descompactamento/pt_BR …. claro que substituindo /caminho/do/descompactamento pelo caminho onde você descompactou o arquivo. Deixe rodar.
      Na mesma pasta ira ser gerado um arquivo. Copie para a pasta /spell do diretório raiz do vim. Se não existir, crie essa pasta.

      Penso que no blog já havia postado esses passos, mas segue acima, mais detalhado.

      1. Henrique,

        Fui lá, baixei o arquivo acor_pt-BR-206.zip, descompactei, joguei o arquivo acor_pt-BR.dat em c:\.

        Digitei-> :mkspell pt c:\pt_BR
        Digitei-> :mkspell pt c:\acor_pt-BR.dat

        E nenhum dos comando funcionou.
        Estou usando o Vista.

        Sds, Luciano.

  3. Gogó,

    Adiciona que o arquivo gerado tem extensão .pl e, no caso do windows, o arquivo é gerado dentro da pasta do usuário.

  4. ééééé seu plagiador cara de pau. o Marcellus do meiobit ja mandou seu endereço advogado e pro sistema anti plagio do WP.
    tema pelo seu orificio retrofuricular.

    1. Cara, não plagiei nada. Escrevi todo o artigo de próprio punho, e criei o script que falo. Claro que o script copiei diversos códigos de outros, mas foi uma colcha de retalhos, não plagiei discaradamente nada, principalmente no texto do artigo. Por favor me envie o link do Marcellus para que eu compare. Obrigado

Deixe um comentário