Vim: Por Onde Começar?

Já falei um pouco sobre como eu comecei com vim neste blog, mas isso foi no longínquo ano de 2009! É natural que nesse tempo muito tenha mudado. Como sou um fanboy grande entusiasta do vim, me perguntam com frequência por onde começar. Este post tem o objetivo reunir boas referências para iniciantes, de forma que eu sempre possa passar o link para ele quando alguém me perguntar — Talvez eu até venha a adicionar novas referências aqui com o tempo.

Leia

Da última vez, recomendei o vimtutor para leitura. Apesar de bem completo, aprender direto no terminal pode intimidar alguns. Sendo assim, ultimamente tenho recomendado o post Learn Vim Progressively. Não é um post muito longo, e já inclui alguns comandos mais avançados.

Assista

Em 2010 o Fabio Akita decidiu fazer alguns screencasts e vender através do seu blog. Dentre eles, um sobre o vim. Posteriormente ele decidiu liberar todos eles gratuitamente:

Screencast: Começando com Vim

Fui um dos que compraram e fiquei bem satisfeito com o conteúdo na época. Como é difícil convencer alguém que está começando a já sair desembolsando algum dinheiro, achei ótimo que o video se tornou gratuito.

Jogue

Direto dos comentários do Learn Vim Progressively, descobri o jogo Vim Adventures. Ao que parece ele não vai te ensinar a usar o editor, mas vai ajudar a se familiarizar com os movimentos de tecla, comandos e modos.

Você também pode encontrar algumas configurações muito bem vindas no plugin vim-sensible, que tenta reunir as configurações que deveriam ser padrão. Lembre-se também que você pode usar o comando help em qualquer comando (:help <comando>) é um bom tira-dúvidas para todas as horas.

Veja também a configuração do vim que eu uso no dia-a-dia. Logo de cara é uma lista de plugins muito úteis.

Se ainda estiver complicado, lembre-se do comando:

:help!

Meu ambiente de trabalho

Antes tarde do que nunca, vou adicionar mais um elo na “corrente do bem” criada pelo Anderson Casimiro a qual fui convidado pelo Jair Henrique. A brincadeira consiste em descrever as ferramentas do dia-a-dia e as regras são:

  1. Escreva sobre 7 itens de seu ambiente de trabalho – fale sobre qualquer ponto que quiser;
  2. Indique de 3 a 5 pessoas para que possivelmente façam um artigo sobre seu ambiente.

Sendo assim, elas são:

1. Shell

Não consigo me imaginar trabalhando sem a ajuda do terminal. É chover no molhado dizer do que ele é capaz. Mas, para mim, é o básico para qualquer programador, independente de plataforma;

2. Firefox & Chrome

Como programador web, é essencial ter um navegador e ferramentas de debug (como o firebug e chrome developer tools). Apesar de eu preferir o Chrome por sua interface e performance, o Firefox é muito melhor para fazer debug. Não consigo me desfazer de nenhum dos dois, eles sempre estão em dupla no meu computador;

3. (G)Vim

Atualmente, meu editor preferido. O Vim é excelente por ser tão robusto quanto você quiser que ele seja. Apesar de ser complicado no início, o esforço investido se justifica bem rápido;

4. Git

Eu me sentia satisfeito usando o SVN (talvez porque meu primeiro gerenciador de versão foi o Visual SourceSafe). Mas, o Git e o conceito de controle de versão distribuído conseguiram me surpreender e conquistar. Já faz mais de 1 ano que o adotei e ainda estou aprendendo e me aprimorando. Ainda quero experimentar o Mercurial, mas recomendo o Git (e GitHub) para todos;

5. VirtualBox

Não dá para garantir que seu aplicativo web seja funcional (e bonito) em múltiplos browsers sem testar nos navegadores que você pretende suportar. Como, infelizmente, não existem versões para linux de alguns dos browsers mais usados no mercado (IE7+, Safari), a única solução viável é manter um Windows virtualizado. Provavelmente, seus concorrentes (como VMWare) possuem recursos mais atraentes para usuários avançados. Como preciso apenas de uma forma rápida e simples de rodar os SO’s, o VirtualBox cumpre com louvor;

6. Meld

O Git mescla automaticamente as alterações entre branches nos poupando de muita dor de cabeça. Mesmo assim, algumas vezes é necessário um humano decidir o que fica e o que sai. Quando as diferenças são pequenas, é fácil resolver com um editor de texto. Em casos mais complicados, o Meld é um alívio;

7. Música (Não, eu não estou trapaceando)

Música é um elemento que me ajuda muito enquanto estou programando. Não dá para escutar música (sem incomodar todos ao redor) enquanto se faz pair programming, então esta dica só vale para sessões solo. Arranjos instrumentais costumam funcionar melhor comigo. Minha dica é a trilha sonora de The Matrix Revolutions, destaque para Neodämmerung.

Seguindo as regras do jogo, convido a participar:

  1. Daniel Cassiano
  2. Eduardo Maçan
  3. Felipe Plets

Finalmente VIM

vim-editor_logoDentre todas as flamewars do desenvolvimento de software, poucas são tão antigas quanto a dos editores de texto (atualmente, editores de texto e IDE’s). De forma alguma quero tentar defender alguma bala de prata. Eu mesmo já mudei de ideia várias vezes quanto a este assunto.

Ainda estou aprendendo a usar o VIM, mas já estou colhendo os resultados deste esforço. Estou impressionado com a extensibilidade e personalização deste editor. Com certeza, é uma excelente ferramenta e tem uma curva de aprendizado fantástica (mas exige esforço, principalmente no começo). Se você ficou interessado, pode começar a aprender a utilizá-lo lendo o vimtutor (Digite vimtutor no terminal ou leia online).

Quando houverem dúvidas, é fácil encontrar informações e dicas em várias fontes. Mas, se você está começando e já leu o vimtutor, recomendo a leitura dos seguintes artigos:

Sugiro que assim que você comece a personalizar seu arquivo .vimrc, faça um backup. O Gist do github é um excelente lugar para isto (O meu já está lá). Se você tiver alguma dica ou comando que costuma adicionar ao seu .vimrc, por favor, me mande. Quanto mais dicas melhor.

Clientes de Debug para PHP [Atualizado]

xdebug-logoDias atrás, participei da PHP Conference. O evento foi melhor do que as minhas expectativas e voltei cheio de ideias e dicas para por em prática. Uma das dicas foi começar a usar o xDebug pra valer. Chega de fazer debug com var_dump!

Quanto à instalação do xDebug, não tive problemas. O complicado mesmo foi escolher o cliente do debug. Pelo que tenho visto em posts e eventos, a maioria dos programadores PHP faz debug em uma IDE, na maior parte, o Eclipse PDT. Teoricamente (ou seja, segundo o site do xDebug) existem várias outras opções. Tentei testar todas as opções para linux na prática, algumas não saíram da teoria.

Testei o protoeditor como plugin do Kate (meu editor de código atual) e não consegui compilar por falta de algumas bibliotecas. Dei uma chance para o Eclipse, mas a lentidão e a quantidade de bugs dele me tiraram do sério (por isso o Kate é meu editor atual). Tentei o plugin do Emacs, mas também não consegui fazer funcionar (acredito que seja por falta de conhecimento). Pensei no Netbeans, mas não tive paciência para baixar e instalar. Por último ou não, testei o plugin do VIM, este sim funcionou perfeitamente!

Eu ainda gostaria que houvesse um programa para linux parecido com o MacGDBp, mas o VIM está cumprindo o objetivo com louvor, principalmente depois que eu li o vimtutor.  Aliás, com o que eu aprendi do VIM, deu até vontade de passar a usá-lo mais regularmente. Talvez em um futuro próximo…

Para facilitar a vida

Criei uns bookmarklets para adicionar as variáveis de ambiente do xDebug na página atual do navegador (o código ficou tão pequeno que coube até em um tweet – Pena que não dá pra ler direito). Se quiser usar também, arraste o link abaixo para sua barra de favoritos:

[xDebug] Start Session

[xDebug] Stop Session

[xDebug] Profile

Para agilizar o debug de scripts php-cli, também pode adicionar estes dois “aliases” em ~/.bashrc (para que sejam recriados em novas sessões do terminal):

alias xdebug_debugger='export XDEBUG_CONFIG="remote_port=9000 remote_enable=1"'
alias xdebug_profiler='export XDEBUG_CONFIG="profiler_enable=1"'
alias xdebug_clean='export XDEBUG_CONFIG=""'

Atualização – 31/12/2009: Adicionei dois bookmarklets (profile e stop xdebug – aproveitei para reduzir ainda mais o código :)) e um alias para iniciar o profile em linha de comando.

Até a próxima!