Quantas vezes você faz um arquivo que é exatamente igual à um outro arquivo por dia? Quantas vezes você abre um arquivo só para copiar um trecho de código que é utilizado em vários arquivos? Quantas vezes você se vê fazendo a mesma coisa que fez em outro lugar?
E aquela palavra que você sempre escreve errada? Aquela função que você sempre esquece o nome?
Conheça algumas dicas para aumentar a produtividade e diminuir o trabalho dessas coisas rotineiras.
Lista de Abreviaturas
Sabe aquelas palavras que a gente insiste em escrever errado? Principalmente quem trabalha com e-mails, códigos e comentários em outras línguas tem dificuldades com certas palavras. Por exemplo,
vc -> você q -> que pq -> porque nao -> não
Agora a pergunta que não quer calar: Porque não usarmos algo para evitar esse tipo de coisa? Às vezes nem notamos os erros, mas eles estão lá. Mantenha uma lista de abreviaturas no Vim. Cuide dela, adicione novas abreviaturas assim que vierem à sua cabeça. A sintaxe é simples, basta adicionar no seu .vimrc:
"" abbr ERRADO CORRETO, por exemplo: abbr pq porque abbr vc você
O Vim ainda possibilita que você crie sintaxes diferentes para arquivos diferentes. Então, seus arquivos .txt podem ter abreviaturas diferentes das de .py. Ou seja, se o nome daquela função python é muito longa ou você insiste em escrevê-la errada, ela merece uma abreviatura, no formato descrito acima (abbr ERRADO CORRETO).
$ mkdir -p ~/.vim/abreviaturas/ $ vim ~/.vim/abreviaturas/txt.vim
Adicione ao txt.vim as abreviaturas utilizadas para arquivos texto. Mesmo que poucas, coloque algumas. Um pouco de disciplina fará com que sua produtividade aumente. Tenha certeza.
Ao seu .vimrc, basta acrescentar:
autocmd BufNewFile,BufRead * source $HOME/.vim/abreviaturas/para_qualquer_linguagem.vim autocmd BufNewFile,BufRead *.txt source $HOME/.vim/abreviaturas/txt.vim autocmd BufNewFile,BufRead *.py source $HOME/.vim/abreviaturas/python.vim
O autocmd funciona mais ou menos igual a uma trigger. É um sistema de eventos, basicamente. Ou seja, ao abrir um arquivo novo (BufNewFile) ou um arquivo já existente (BufRead), se o nome do arquivo casar com a expressão (no caso, *, *.txt ou *.py) irá executar o código a seguir.
Vou falar mais sobre o autocmd em outro post, tem muitoooo pano pra manga, hehehe.
Templates de Arquivos
Quando se fala em programação é meio que como na arte. Não só porque programar é uma arte, mas porque nada se cria, tudo se copia. Tudo bem que, hoje em dia, com técnicas de encapsulamento, oop, etc, fica mais difícil. Mas sempre há coisas em comum entre os arquivos. Vamos começar com algo simples.
Template básico para javascript, onde será utilizado jquery.
$(document).onready(function(){ // code here });
Simples, mas não é um saco ter que escrever isso sempre que abre um arquivo novo? Tome isso como regra: Faça uma, porém apenas uma vez. Não seria mais fácil abrir o arquivo e tcha-ram! Lá está o código que, em 90% dos casos, você irá utilizar?
Esse foi pequeninho, mas imagine um arquivo html. A trabalheira que é copiar todo o caçalho. E se você segue um padrão, pode usar inclusive o css junto. Observe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt" lang="pt-br" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta name="keywords" content="aqui,vai,as,keywords" /> <link rel="stylesheet" href="/style.css" /> <link rel="shortcut icon" href="/favicon.ico" /> </head> <body> <div id="wrapper"> <div id="head"></div> <div id="content"></div> <div id="footer"></div> </div> </body></html> |
E o css:
1 2 3 4 5 6 7 8 9 10 11 12 |
html * { } body { } #wrapper { } #wrapper #head { } #wrapper #content { } #wrapper #footer { } |
Imagine um designers, aqueles que fazem o psd e depois passam pra xhtml, tendo que copiar isso vezes e vezes para todos os arquivos que ele faz. Faça apenas uma vez e siga o padrão!
Usuários de django, ao criar um model, precisam escrever sempre os imports ? Se são utilizados sempre, porque não criar um template?
Agora você me pergunta, como carregar o template automagicamente no Vim ? Fácil! Utilizando nosso autocmd =). Do mesmo modo que fizemos com as abreviaturas, vamos criar os diretórios:
$ mkdir -p ~/.vim/templates/
Criei lá os arquivos com os templates que você acha útil.
autocmd BufNewFile *.html 0r ~/.vim/templates/html.tpl autocmd BufNewFile style.css 0r ~/.vim/templates/cssstyle.tpl autocmd BufNewFile jquery.*.js 0r ~/.vim/templates/jqueryjs.tpl
Agora, abra seu Vim e sinta a magia:
vim index.html style.css jquery.initscript.js
Executando comandos externos
g(un)zip
O manual do Vim tem um exemplo bem interessante, para abrir arquivos gzipados, editá-los, como se nada tivesse acontecido e salvá-lo no formato gzip de novo. Apesar de que aqui, não precisou acrescentar os códigos abaixo, ele já fez automático. Basta adicionar o .vimrc
augroup gzip autocmd! autocmd BufReadPre,FileReadPre *.gz set bin autocmd BufReadPost,FileReadPost *.gz '[,']!gunzip autocmd BufReadPost,FileReadPost *.gz set nobin autocmd BufReadPost,FileReadPost *.gz execute ":doautocmd BufReadPost " . expand("%:r") autocmd BufWritePost,FileWritePost *.gz !mv <afile> </afile><afile>:r autocmd BufWritePost,FileWritePost *.gz !gzip </afile><afile>:r autocmd FileAppendPre *.gz !gunzip </afile><afile> autocmd FileAppendPre *.gz !mv </afile><afile>:r </afile><afile> autocmd FileAppendPost *.gz !mv </afile><afile> </afile><afile>:r autocmd FileAppendPost *.gz !gzip </afile><afile>:r augroup END </afile>
Verificação por erro
Já deve ter acontecido com você: você salva o arquivo e quando vai testar, faltou um ponto e vírgula, ou escrever o nome de uma função errada, ou algo similar… um erro bobo, mas que não deixou seu código ser executado e exige reparo.
Para ajudar contra esse trabalho desnecessário (teste + correção + teste), que pode se repetir inúmeras vezes, você pode usar o autocmd para alertá-lo, utilizando ferramentas externas. Por exemplo:
autocmd BufWritePost *.pl !perl -c % autocmd BufWritePost *.php !php -l % autocmd BufWritePost *.java !javac -Xlint %
Use a criativdade
Utilize sua criatividade e seja mais produtivo na SUA rotina. Deixe as coisas serem automatizadas. Para mais eventos do autocmd, :help autocmd. Tem uma lista bem extensa. Leia a documentação e seja feliz =). Crítias, sugestões e CASES são bem vindos nos comentários =)
0sem comentários ainda