15 dicas para maior produtividade usando o GVim
Olá! o/
Hoje vou falar sobre dicas (algumas bem simples, mas que fazem diferença) para aumentar a produtividade no GVim/Vim. Algumas delas são plugins, outras vão direto para o ~/.gvimrc!
- Color Picker
- Saindo sem estresse
- Colocando Headers nos arquivos
- Abrindo arquivos escritos no arquivo
- Trabalhando com buffers
- Aprimorando a busca
- Mudando a fonte
- Documentando o código
- Autocomplete de código
- Rodando comandos do Shell
- Solução para arquivos chatos de backup
- Removendo Linhas em Branco
- Compilando arquivos e analizando erros
- Mostrando a identação
- Autorrecarregando nosso .gvimrc
1. Color Picker
Quem trabalha com web, geralmente precisa rapidamente selecionar uma cor em hexadecimal. Geralmente recorremos à sites para isso. Existe um plugin que resolve nossos problemas, você pode baixar ele aqui: http://www.vim.org/scripts/script.php?script_id=927
Para instalar é muito fácil. Baixe o arquivo colorsel.vim do site mencionado acima, jogue para dentro do diretórios de plugins, no meu caso /usr/share/vim/vim71/plugins. Ao reiniciar o gvim, basta digitar
:colorSel
Ele deve aparecer algo como:

Notem, que caso o vim seja aberto pelo terminar, ele dispara um erro, dizendo que o plugin instalado é para uso com interface gráfica. Para resolver isso, na linha 24 do colorsel.vim, que começa com ’stderr’…
Apenas apague esta linha e o erro não é mais mostrado para você!
2. Saindo sem estresse
Muitos devem ficar brabos ao tentar sair do vim e digitar o Q maiúsculo
:Q
Para isso, vamos por no nosso ~/.gvimrc
cab W w cab Q q cab Wq wq cab wQ wq cab WQ wq
Isso vai fazer com que ao digitar algum comando da segunda coluna, ele deve interpretar como o da terceira, logo se for digitado :Q, ele vai entender :q. Isso nos livras de muitas dores de cabeça!
3. Colocando Headers nos arquivos
Muita gente gosta de identificar o arquivo que está escrevendo ou até mesmo ao documentar arquivos. Às vezes precisa por uma licensa, o autor do arquivo, a hora em que foi escrito. Algumas IDE’s oferecem isso normalmente, o GVim, apesar de não ser uma IDE, também oferece algo parecido. Basta acrescentar estas linhas no .gvimrc, mapeando a tecla F8 (você pode modificar à sua preferência).
map <F8> O/**<CR> * Descrição do arquivo<CR> * @author Gustavo Dutra <mechamo@gustavodutra.com><cr> * @created <esc>:r!date '+%d/%m/%y'<cr>kJA<cr> */
Ao abrir um novo arquivo, basta pressionar F8, ele acrescentará nosso header (que você pode modificar para o que você desejar!).
4. Abrindo arquivos escritos no arquivo
Algumas linguagens não usam ‘import’, porém incluem arquivos dentro de arquivos, o que salva muito a vida do programador. Mas supondo que estamos editando o arquivo X, que inclui o arquivo Y, e precisamos, por alguma eventualidade, editar algo no arquivo Y. Precisamos abrir o arquivo passando todo o caminho até ele. Para isso, facilitar isso, façamos um atalho:
nmap gf :new %:p:h/<cfile><CR>
Basta posicionar o cursor sobre o nome do arquivo, e digitar ‘gf’. Nomeei gf para significar Go to File. Você pode colocar o atalho que desejar! Basta mudar o gf para o que quiseres.
5. Trabalhando com buffers
Eu particularmente não gosto de um monte de instâncias do GVim aberta ao mesmo tempo, muito menos gosto de tabs. Eu gosto mesmo é de buffers. Para isso criei alguns atalhos para navegar entre eles
map <A-1> :b1<cr> map <A-2> :b2<cr> map <A-3> :b3<cr> map <A-4> :b4<cr> map <A-5> :b5<cr> map <A-6> :b6<cr> map <A-7> :b7<cr> map <A-8> :b8<cr> map <A-9> :b9<cr> map <A-0> :b10<cr> map <S-F1> :b11<cr> map <S-F2> :b12<cr> map <S-F3> :b13<cr> map <S-F4> :b14<cr> map <S-F5> :b15<cr> map <S-F6> :b16<cr> map <S-F7> :b17<cr> map <S-F8> :b18<cr> map <S-F9> :b19<cr> map <S-F10> :b20<cr> map <S-F11> :b21<cr> map <S-F12> :b22<cr> map <C-Q> :bwipeout<cr> map <F6> :buffers<cr>
Para quem não sabe, para iniciar um buffer, utilizamos :e. Logo, para abrir nosso .gvimrc num buffer diferente, digitamos
:e ~/.gvimrc
À cada buffer aberto, o GVim da um número sequencial começando em 1. Nos mapa descrito ali em cima, ALT+1 até ALT+0 navegam nos 10 primeiros buffers. SHIFT+F1 até SHIFT+F12, navegam do buffer 11 até o 22. CTRL+Q, fecha o buffer (remove da lista) e F6 lista todos os buffers disponÃveis com os nomes dos arquivos e seus respectivos números.
6. Aprimorando a busca
Para buscar por algum trecho de texto no gvim, é utilizado a barra (/).
/texto da busca
Adicionando no nosso .gvimrc o seguinte:
set incsearch set hlsearch
É possÃvel fazer com que à medida em que é digitado, o GVim saliente o texto (highlight), caso encontrado. Para navegar entre os resultados, utilizamos n (próxima ocorrência) ou N (ocorrência anterior). Mas, uma das coisas interessantes é sobreescrever estes comandos desta forma:
nmap n nzz nmap N Nzz
zz é responsável por por a linha atual no centro da tela. Logo, isto permite que ao encontrar uma próxima ocorrência do texto, o texto ficará no meio da tela.
7. Mudando a fonte
No Vim a fonte utilizada é a do Terminal no qual ele foi executado. No GVim, por ser gráfico, possibilita com que seja modificada a fonte atual.
set guifont=Fonte Desejada 8
Lembre-se de escapar os espaços. Logo depois do nome da fonte, é colocado o tamanho dela. Se por alguma acaso você ficar em dúvida em qual fonte utilizar, você pode digitar o seguinte no GVim
:set guifont=*
Com isso, ele abrirá o seletor de fontes do seu OS. Basta selecionar o dar OK. Quando feito e fonte for modificada, você pode digitar somente
:set guifont
Ele retornará a sintaxe correta de como usar a fonte e o tamnho da mesma. Então, basta copiar e colar no .gvimrc!
8. Documentando o código
Todos sabem da importância que é documentar os códigos, assim como sabem a chatisse que é! Para nos ajudar com isso, seguem alguns plugins:
9. Autocomplete de código
Maneira simples de autocompletar o código é usando CTRL+X + CTRL+O, mas isso é difÃcil de assimilar, logo podemos criar uma funçãozinha para ajudar:
function! CleverTab()
if strpart( getline('.'), 0, col('.')-1 ) =~ '^s*$'
return "<Tab>"
else
return "<C-X><C-O>"
endfunction
inoremap <Tab> <C-R>=CleverTab()<CR>
set completeopt=menu,preview
Ao digitar ‘tex<TAB>’ ele vai tentar utilizar o omnicompletition para completar a palavra, que pode ser uma função/variável criada dentro do arquivo ou nativa da linguagem.
10. Rodando comandos do Shell
Quantas vezes você já precisou ordenar algo em ordem alfabética? copiar um arquivo inteiro para o arquivo que está digitando? Para quem domina o shell, isso vai ser muito útil. No nosso .gvimrc vamos por o seguinte:
set shell=/bin/bash
Feito isso, vamos fazer alguns testes. Abra algum no gvim e cole o seguinte:
Banana Maçã Amora Pêra Batata Melancia
Agora, vamos à mágica:
Digite o seguinte:
:%!sort
Tcharam! O % diz que é o arquivo inteiro; o ! exige que seja executado no shell. sort é comando do shell. O GVim automaticamente pega o conteúdo do arquivo, executa o comando no shell e substitui pelo resultado! Então, para copiar um arquivo no fim do nosso aberto, podemos utilizar o ‘cat’
:$!cat /meu/arquivo
Observem que eu utilizei $, ele vai começar a colar na última linha do arquivo. É legal, então, sempre ter certeza que esta linha está em branco, para que não haja perda de dados. Você também pode por numa linha especÃfica.
:6!cat /meu/arquivo
Ele vai substituir o texto da linha 6 com o que contiver no arquivo, conservando da linha 1 até a linha 5, e da linha 7 até o fim do arquivo.
11. Solução para arquivos chatos de backup
Sabe aqueles arquivos de backup do vim? Que ficam .ext~ ? Você edita algo no projeto e o vim polui o projeto inteiro, quando você vê, já perdeu as contas de quantos arquivos novos foram criados. Ou até mesmo já commitou aqueles arquivos de swap (.swp) do vim sem querer.
Para resolver isso, podemos mudar o diretório onde eles são criados ou até mesmo desabilitá-los, basta acrescentar no .gvimrc:
set backup set backupdir=/tmp set dir=/tmp
Se você deseja desabilitar, utilize ’set nobackup’, caso contrário os arquivos de backup irão para o /tmp, e não mais para o diretório do seu projeto! O mesmo acontece com os .swp, especificado pelo ’set dir’.
12. Removendo Linhas em Branco
Para remover todas as linhas em branco do arquivo (vazias ou que contenham somente espaços) podemos utilizar:
:g/^s*$/d
13. Compilando arquivos e analizando erros
Para compilar um arquivo, basta especificarmos o compilador. Vamos usar o exemplo do javac.
:compiler javac
Para compilar arquivos em java, abra ele no gvim, execute o comando acima e digite:
:make %
Ele irá compilar com o javac o arquivo atual e mostrar os erros em tempo de compilação. Por mais louco que pareça, há também como fazer isso com o php, por exemplo. Mas ao invés de compilar o código, ele checa a sintaxe.
:compiler php :make %
Ele irá executar `php -l arquivo.php`, retornando os erros de sintaxes! É bom para testes antes de rodá-lo, evitando erros bobos como o esquecimento de 1 ponto e vÃrgula, um ponto ao concatenar, etc.
Ah! Caso você desejar, pode modificar o comando do make! Se quiser adicionar mais parâmetros, por exemplo, jogar todos os erros que já teve para um determinado lugar (é legal saber o quanto de erro produzimos, para que, ao programar, tentamos cometer cada vez menos e nunca os mesmos (né? ^__^)):
au FileType php set makeprg=php -l % >> /tmp/errors.log
assim, ele modificará somente se o arquivo for interpretado como php. Basta dar um :make que ele joga para o arquivo. No final do dia podemos avaliar nossos erros e ver (olha, preciso melhor em tal aspecto).
14. Mostrando a identação
Quem nunca se perguntou (o que este } está fechando? é este ou aquele if?). Pois é, bater o olho e de cara descobrir é complicado, ainda mais quando o inÃcio (if () {) não está na mesma página, digo, não é visÃvel, é preciso rolar pra vê-lo.
set list listchars=tab:»·,trail:·,eol:$
Assim, primeiro habilitamos a exibição deles. Depois substituimos com os valores. Isso fará com que o nossa identação fique visÃvel, e possamos ver (hmm… esse if tem 3 tabs antes, então vai fechar na } que tiver 3 tabs antes também!). O arquivo ficará mais ou menos assim:
»····»····»····if (condicao) {$
»····»····»····»····//codigo$
»····»····»····}$
Assim, o código fica claro. Você se acha no tab e consegue enxergar se há espaços desnecessários no final da linha, pois $ representa o nosso amigo n.
15. Autorrecarregando nosso .gvimrc
Bom, apresento para vocês o autocmd bufwritepost. Ele é executado depois do arquivo ser salvo. Então ao salvar o arquivo ele executa o(s) comando(s) que seguem ali. Acrescentamos, então, ao nosso gvimrc os seguintes comandos:
autocmd! bufwritepost .gvimrc source % autocmd! bufwritepost .vimrc source %
Assim, ao salvar .gvimrc ou .vimrc, ele recarregará as configurações automaticamente! Voltando ali na dica 13, podemos fazer isso:
autocmd! bufwritepost *.php make %
Rá! Agora, ao salvar um arquivo .php, ele executa no :make % que manda para /tmp/errors.log! Não é feitiçaria, é tecnologia.
Espero que alguma coisa seja útil para vocês! Fui!
Posts Relacionados
Por favor, se você deseja opinar, criticar ou até mesmo mandar uma receita de bolo, deixe um comentário! Ou fique atento aos feeds.
Comentários
Gostei das dicas, Parabéns.
Só gostaria de deixar um adendo aqui no 5. Trabalhando com buffers:
map :if &modifiable && !&readonly &&
\ &modified :write :endif:bprevious
imap :if &modifiable && !&readonly &&
\ &modified :write :endif:bprevious
=)
Gustavo, você conhece o projeto de criação de um livro sobre o vim em português?
http://code.google.com/p/vimbook/
Baixa a versão compilada hoje (27 de janeiro) e dá uma olhada
http://code.google.com/p/vimbook/downloads/list
Quem sabe você não decide juntar-se a nós…
Uma opção interessante para buscas é “smartcase”, usando esta opção se sua busca contiver caracteres em maiúsculos o vim desconsidera o “ignorecase”, ou seja, constumo configurar minhas buscas assim:
set ignorecase “desconsidera maiúsculas
set smartcase “caso contenha maiúsculas passa a considerar
set hlsearch
set incsearch
Gustavo, estou começando a usar o vim e preciso recuperar um arquivo, podes me dar alguma dica de como encontrá-lo?
Att,
Larissa
@Larissa,
dependendo de como tu perdeu o arquivo, não há como recuperar. Porém o vim sempre guarda(desde que configurado para) arquivos de backup e ainda usa arquivos de swap que são escritos termitantemente com o conteúdo não salvo. Pode-se recuperar o arquivo, caso apagado do último backup (geralmente o nome do arquivo com ~ no final). Ou caso você abrir um arquivo, cujo arquivo já exista (o que acontece ao acabar a luz, o computador desligar abruptamente, etc) o vim tentará recuperar para você.
uso o vim no trabalho e o gvim no windows 7 em casa, gostaria de umas dicas de como usar gvim, tipo configuração como utilizar a extensão autotab (php), beleza muito obrigado





Bah!!!
pouca coisa..
hahsuahshahusha
o mew com certeza vo utilizar o colorpicker.
continua assim que tah massa!!
abrazz