Tutorial: Configurando o vim para programação
Nesse tutorial, vou explicar (o mais brevemente possível) como transformar o vim em um poderoso editor de código, ensinando a configurar e usar algumas features do próprio vim. Introduzirei assunto por assunto, e então mostrarei onde eles podem ser aprofundados. Essa é apenas a pontinha do iceberg. Digo isso pois eu não domino o vim completamente, sou apenas um usuário mediano. Tenha medo dos usuários avançados :)
Antes de ler esse tutorial, recomendo fortemente aprender a usar o básico do vim. Não tem porque configurar o vim como editor de código se não sabe usar ele como editor de texto! Motivação não falta. Para começar, sugiro a lógica da bicicleta; você só aprende usando. Felizmente existe um tutorial do vim que utiliza ele mesmo para ver/editar. Para aprender a usar o básico do vim, sugiro usar o comando:
vimtutor
Somente depois de entender o básico você conseguirá utilizar (produtivamente) o vim como ferramenta de edição de código.
Arquivos de configuração
O vim, assim como todo bom programa de linux, funciona carregando configurações de dois diferentes lugares: Se disponível, carregará do seu usuário, se não, carregará do próprio sistema. Os arquivos de configuração do sistema podem ser encontrados no caminho “/usr/share/vim”. Os do usuário, podem ser encontrados em sua home, no caminho “~/.vim” e o arquivo “~/.vimrc”. Possivelmente o arquivo e pasta não existem no home do seu usuário, mas você pode cria-los normalmente. No caso do .vimrc, uma boa opção é copiar o padrão da sua distribuição na sua home, renomear o arquivo para .vimrc e começar a editá-lo, assim mantendo as configurações que estavam sendo usadas até o momento com o seu usuário.
Com dois possíveis caminhos a seguir, você vai acabar se perguntando qual dos dois configurar. Sugiro que você configure os arquivos de sua home, por vários motivos, como a portabilidade para qualquer computador (casa, trabalho e amigos), e a padronização da sua distribuição para novos usuários em computadores compartilhados, caso se aplique. Além disso, é mais provável que você tenha uma partição separada para o “/home” do que para o “/usr”. (dica fora de hora: caso não tenha, não seria uma má prática para futuras instalações, pois assim pode-se manter seus arquivos e configurações mesmo trocando o sistema :D).
O arquivo ~/.vimrc é praticamente um script carregado quando o vim é aberto. Nele, escreve-se qualquer comando que você poderia utilizar normalmente de dentro do vim, por exemplo “:set number”. Vou dar algumas sugestões para preencher esse arquivo na próxima sessão deste tutorial.
A pasta ~/.vim contém, entre outros, plugins e documentação dos plugins. Ensinarei como utilizar plugins em outro post, em um futuro breve.
Configurações básicas do .vimrc
A maior parte das configurações do .vimrc consiste em setar variáveis ou atribuir algum valor a elas. Para comentar o seu .vimrc, isso é, escrever trechos que não serão interpretados como comandos de inicialização, deve ser utilizado aspas duplas. A partir da primeira ocorrência das aspas duplas até o final da linha será considerado comentário.
Segue então algumas configurações básicas retiradas do meu arquivo .vimrc. Os comentários explicam brevemente o que significa cada linha. Essas variáveis configuram muitas características do vim, por exemplo, encoding, compatibilidade, tamanho das tabs, verificação ortográfica, highlight de buscas, mouse, entre outros.
" Sem categoria set termencoding=utf8 "encoding do terminal set nocompatible "Aumenta a independencia do vim com o vi set history=50 "Numero de comandos mantidos no histórico do vim set nospell "Desliga verificação ortográfica; você depois pode associar ela com .txt. "set spell "liga a verificação ortográfica; eu não utilizo, somente em arquivos .txt set title "mostra o nome do arquivo na barra de título do terminal set showcmd "mostra os comandos digitados no rodapé set showmode "mostra o modo do vim (comando/inserção/...) no rodapé set ruler "mostra a linha e coluna do cursor no rodapé set number "numera as linhas set mouse=a "habilita o uso do mouse filetype plugin on "habilita a carga de plugins especificos de certos tipos de arquivos, quando reconhecidos "search set ignorecase "ignora maiusculas/minusculas na busca set smartcase "quando alguma letra da busca for maiúscula, não ignora maiúsculas/minúsculas set incsearch "pesquisa enquanto a palavra está sendo digitada set hlsearch "coloca highlight nas palavras encontradas """ cores syntax on "habilita highlight de sintaxe set bg=dark "modifica as cores padrões; escolha dark para fundo preto, light para fundo branco (fundo do terminal) """" Tabulações set shiftwidth=4 "numero de espaços para o autoindent, entre outros set softtabstop=4 "numero de espaços quando precionado tab ou backspace set tabstop=4 "numero de espaços de um tab set autoindent "identação automática set lcs=tab:»· "marca os tabs
Mais informações sobre uma variável específica pode ser conferida utilizando a ajuda online do vim, com o comando
:help VARIÁVEL
Tabs
O Vim tem suporte nativo a tabs. Os comandos básicos para esse suporte são os seguintes: Para abrir uma tab, use “:tabnew”. Para ir para a próxima tab ou voltar, use “:tabnext” e “:tabprev”, respectivamente.
Aconselho adicionar essas linhas no seu .vimrc:
"""" Tabs set list "Lista as tabs de arquivos abertas set showtabline=1 "Mostra a linha de tabs apenas se tiver 2 ou mais tabs abertas. set tabpagemax=10 "Limita o numero máximo de tabs que podem ser abertos ao mesmo tempo
Para saber mais sobre tabs, use o comando “:help tabs”
Maps
Uma característica avançada do vim é a capacidade de mapear teclas para funções específicas. Essa habilidade é conhecida também como “key binding”, porém no vim ela é referida tradicionalmente como “map”. Os maps são definidos diretamente no .vimrc, assim como as variáveis. Como exemplo, temos o seguinte map:
map <C-c> :wq<CR>
O map definido acima mapeia a combinação de teclas Ctrl+c para a sequencia de teclas “:wq.”, seguido de um enter. Assim, se você estiver no modo de comando, o vim irá salvar o texto e sair. Caso esteja no modo de inserção, ele Digitará o texto :wq e quebrará a linha. Como você pode notar, ele funciona simplesmente como se as teclas acabassem de ser digitadas, e o que acontece depende do modo que você está. Para isso, o comando map pode ser precedido por i, n ou v, para que o mapeamento funcione em apenas um modo (Insert, Normal e Visual, respectivamente). Ainda existem oturas restrições semelhantes, que podem ser conferidos na ajuda online do vim; esses são os básicos. Assim, para ter um resultado mais interessante, podemos fazer o seguinte mapeamento:
nmap <C-c> :wq<CR> imap <C-c> Nunca gostei de milho verde sem manteiga.
Com um teste rápido, podemos ver que agora as mesmas teclas tem ações diferentes, dependendo do modo que você está.
Ainda existe uma opção muito útil relativa ao map, que é a “nore”. Normalmente, se forem definidos dois mapeamentos com as mesmas teclas de ativação, funcionando no mesmo modo, o segundo map “sobrecarrega” o primeiro. A opção “nore” serve para que uma vez que um map tenha sido definido, ele não seja remapeado. Por exemplo, podemos definir os mesmos maps acima do seguinte jeito:
nnoremap <C-c> :wq<CR> inoremap <C-c> Nunca gostei de milho verde sem manteiga
É interessante definir seus maps como noremap.
Os mapeamentos das teclas especiais são bastante estranhos únicos. Um <C-x> Significa Ctrl+x, que é diferente de <C-X>. Ainda existem mapeamentos no estilo <F5>, <UP>, <CR> (carrige return, ou enter), <ESC>, <Tab>, entre outros. Essas teclas estão documentadas no “:help key-notation”
Mais informações sobre maps podem ser obtidas na ajuda online do vim, com o comando “:help map”
Folding
Folding é a capacidade de esconder partes de código que não interessam em um determinado momento, tornando o código mais visível. Muitos programadores não gostam, mas na minha opinião, essa opção é muito útil, pois permite ter uma visão geral do código em menos linhas.
O primeiro problema é definir quando deve haver um novo fold. Existem 6 métodos diferentes, e desses vou citar apenas 3: manual, indent e syntax. Na manual, você mesmo tem que definir onde criar os folds, o que é trabalhoso e pouco usado. As outras duas opções são syntax, onde os folds são criados automaticamente de acordo com a sintaxe da linguagem usada, ou o indent, onde os foldings são criados automaticamente na identação. Teste os dois (ou outros que não citei) e use o que preferir.
Vamos então acrescentar mais algumas linhas no arquivo .vimrc para testar essa feature do vim (ou então usar elas como comando de dentro do vim):
set foldmethod=syntax "seleciona o método de folding set foldcolumn=2 "Mostra uma coluna auxiliar
Para abrir ou fechar um fold, você pode usar os comandos “:zo” e “:zc” , respectivamente. Colocando em maiúsculo as letras “o” e “c” nos comandos anteriores, você abre/fecha um fold recursivamente. o comando “:za” altera o estado da fold atual, isso é, se estiver fechada abre, e se estiver aberta, fecha. Você pode usar esse comando recursivamente colocando a letra “a” em maiúscula. Ainda pode-se usar os comandos “:zR” e “:zM”, para abrir ou fechar todos os folds do arquivo, respectivamente.
O melhor jeito de se aprofundar em foldings é lendo a ajuda online do vim, utilizando o comando “:help folding”.
Function/method Completions: completefunc e omnifunc
Os completions só estão disponíveis no vim como padrão a partir da versão 7. Eles são os responsáveis pelo auto-completar, isso é, completar os métodos que uma determinada classe tem, por exemplo. Para vê-lo em ação, você pode fazer o seguinte teste: Primeiramente abra um arquivo com uma extensão de programação válida, por exemplo:
vi teste.py
Dentro do arquivo, digite o seguinte texto:
a="teste" a.
Em Python, a primeira linha estancia uma string e a segunda linha está incompleta. O operador “.” é utilizado para acessar os métodos da classe string. Vamos testar o completion com essa string; em modo de inserção de texto, com o cursor logo após o “.”, aperte Ctrl+x, Ctrl+o. Deve aparecer uma janela com os métodos da string. Usando as setas para escolher, irá dividir a janela em 2, mostrando uma descrição do método na janela de cima. Ela não fecha automaticamente após sair.
Não entre em pânico. Apesar do auto-completar parecer extremamente arcaico, você pode deixar ele muito mais usável do que imagina, utilizando maps e alguns comandos mais avançados. Um exemplo, você pode fechar automaticamente a janela com a descrição da função e mapear o auto-complete para Ctrl+C com as seguintes duas linhas no .vimrc:
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif inoremap
Ficou bem melhor, certo? Mas na minha opinião não ficou bom o suficiente. Ainda falta muita coisa nesse auto-completar. Infelizmente essa parte vai ficar para o post sobre plugins, pois vamos precisar de ajuda externa! Para aprender mais sobre o auto-completar, sugiro a leitura do manual online do vim (se leu até agora, aposto que você já imaginava isso), com o comando “:help complete-functions”.
Considerações finais
Esse tutorial foi escrito com fortes influências do google, enquanto eu aprendia. Gostaria de citar as fontes, porém faz muito que procurei essas informações, e algumas linhas de configuração, apesar de entender agora o que elas fazem, não fui eu quem escreveu, por exemplo a linha de fechar a janela de descrição do auto-complete automaticamente.
Caso tenha alguma sugestão ou dica, entre em contato!
Tags: Customização, Desenvolvimento, software livre, Tutorial, vim


