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!

  1. Color Picker
  2. Saindo sem estresse
  3. Colocando Headers nos arquivos
  4. Abrindo arquivos escritos no arquivo
  5. Trabalhando com buffers
  6. Aprimorando a busca
  7. Mudando a fonte
  8. Documentando o código
  9. Autocomplete de código
  10. Rodando comandos do Shell
  11. Solução para arquivos chatos de backup
  12. Removendo Linhas em Branco
  13. Compilando arquivos e analizando erros
  14. Mostrando a identação
  15. 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:

    colorsel

    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!

Inglês

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

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

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…

Gostei muito da dica, Sérgio. Baixei o livro e assim que puder, vou contribuir!

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

Deixe um comentário

(obrigatório)

(obrigatório)