03
Rails on Vim
on January 03, 2009
Update 04/27/09: eu fiz alterações importantes que você pode ver aqui
Faz tempo que venho quebrando a cabeça sobre qual a melhor maneira de se programar com Ruby e Rails fora do ambiente Mac. Principalmente no Windows. O Netbeans e o Eclipse Aptana são boas opções e estão evoluindo rápido, mas eu sempre vou achá-los muito mais pesados do que necessário.
Sempre digo que basta um bom editor de textos e o terminal/linha de comando. Porém, no Windows não há tantos editores competentes como o Textmate. E mesmo no Mac, há quem não queira pagar pelo Textmate também.
Recentemente alguns Railers começaram a se voltar ao Emacs, incluindo Geoffrey, que fez um screencast sobre isso para o Peepcode. Sinceramente, eu ainda não consigo gostar muito do Emacs. É absolutamente questão de gosto pessoal, mas eu sempre preferi o Vim.
Por outro lado, eu nunca tinha parado para tentar configurar o Vim decentemente. Gastei uns 2 dias remexendo a Web em busca das peças que tornariam o Vim mais parecido com o Textmate. No próprio Github existem várias configurações. Eu peguei um deles que achei interessante e fiz meu próprio fork. Passei o dia todo convertendo snippets do Textmate para o NERDSnippets do Vim, incluindo os bundles de Ruby, Rails, Javascript e jQuery. O resultado é algo muito próximo, porém a engine de snippets do Textmate é mais avançada que o NERDSnippets. A adaptação do plugin FuzzyFinder do Jamis Buck dá um substituto razoável para o navegador de arquivos do Textmate também.
Para instalar no Mac, primeiro recomendo não usar o Vim que vem por padrão porque ele não tem com os bindings de Ruby que precisamos. Baixe o MacVim. Daí no seu ~/.bash_profile coloque o seguinte:
1 2 3 4 5 6 7 |
No Windows, baixe o "gVim":http://www.vim.org/download.php#pc. No Mac e no Linux, você deve ter um arquivo .vimrc e um diretório .vim no seu home (ex. /Users/akitaonrails). No Windows você deve ter um arquivo _vimrc e um diretório vimfiles também no home (ex: c:\Documents and Settings\akitaonrails, no Windows XP ou c:\Users\akitaonrails, no Vista e no Windows 7). No Linux e no Mac, no seu diretório home, faça: <macro:code>git clone git://github.com/akitaonrails/vimfiles.git ~/.vim cp ~/.vim/vimrc ~/.vimrc |
No Windows, no seu diretório home, faça:
Pronto, é só isso. De dentro do Vim, digite ”:help rails” para saber as opções que você tem. Comandos como :Rgenerate emulam o script/generate, :Rake emula o rake, :Rscript emula os script/* e assim por diante.
Rails on Vim from Fabio Akita on Vimeo.
Ctrl+t é o FuzzyFinder, o equivalente ao Command+T do Textmate. O comando \+p abre o Nerd Tree que é parecido com o Project Viewer do Textmate. Navegue pelos diretórios e arquivos apertando a tecla “o”. E a partir dos arquivos do seu projeto Rails experimente usar as mesmas abreviações do Textmate. Para descobrir todas as abreviações, navegue pelo diretório .vim/snippets. Dentro haverá sub-diretórios para cada tipo de arquivo. Por exemplo, .vim/snippets/ruby-rails/hm.snippet significa que se você digitar “hm[tab]” ele ativará o “has_many” (veja no meu screencast).
E para aprender um pouco mais de como usar os modos de edição do Vim, leia o Why, oh WHY, do those #?@! nutheads use vi?. O Vim é bastante poderoso e tem diversas opções que rapidamente devem fazer sentido à medida que você for usando.
No Mac, acho que eu ainda não vou sair do Textmate tão cedo, mas se precisar usar Linux ou Windows, com certeza esta será minha opção padrão.
Alguém tem mais dicas legais de Vim para compartilhar? Não deixem de comentar.






E ae Akita, eu lutei um pouco mas passei um bom tempo gostando e utilizando o Vim como editor no principal, hoje ainda tenho que trabalhar no windows, mas sinceramente eu dificilmente uso o Vim hj (normalmente eu uso qdo preciso aplicar uma macro, q nele e mto bom), o meu editor de preferencia hoje no windows e um que voce ja citou aqui (ate pensei que voce o citaria nesse artigo) que e o E (“clone” de textmate para windows)
mesmo o E tendo suas leves diferencas com o Textmate, um dos recursos que o E tem e o Textmate nao tem (uso o Textmate apenas em ksa, no meu notebook a la “hackintosh”), eh a selecao multipla, mas fora isso, varias vezes e perceptivel alguns bugs no E, mas mesmo assim eu acho que vale a pena comprar a licenca, pois continua sendo um editor mto bom, e ao mesmo tempo se pode aproveitar grande parte dos bundles que ja existem para o TM.
Fala Akita,
Cara, infelizmente eu uso windows, e no iniciozinho eu usei o roRED, e até q era legalzinho, mas realmente faltava coisas fundamentais como um bom code complete, então pulei para o RadRails que era muito bom, mas depois q eles fizeram um merge dentro da Aptana ele não funciona mais na minha máquina. Agora eu uso o NetBeans mesmo, que até o momento tem dado conta do recado.
O grande lance do “peso” destas ferramentas é que eles não fazem só ruby/rails, fazem um zilhão de outras coisas :(, e tb são Java powered, então vc ainda tem q ter uma JRE/JDK instalada pra rodar.
Sinceramente, eu não acho q pagar USD 56,00 por uma ferramenta profissional seja ruim não (TextMate), muito pelo contrário, se é algo que me tornará mais produtivo e facilitará a minha vida só isso já paga o valor investido, e além do mais isso é um pouco mais do que pagar por uma conta no flickr :D
[]’s
Marinho
marciomarinho@gmail.com
Então, eu também não acho ruim pagar quando a ferramenta é realmente boa (eu comprei o Textmate assim que saiu e uso até hoje).
Mas ser leve é uma característica que para mim é fundamental. O Textmate é super leve. O E é bem legal, e tem o InType também que usa os bundles do Textmate, mas sempre tem aqueles pequenos bugzinhos que dão uma sensação não muito boa. O One-Click Installer vem com o Scintilla (SciTE) que muita gente ainda usa. É um editor genérico até que competente, mas não chega a ser um ambiente completo.
O Netbeans é o melhor IDE Java para Ruby agora. Mesmo com o Aptana, o RubyMine e o 3rdRail, acho que nenhum está investindo tanto quanto a Sun. Porém é aquela velha história: é muito peso para um simples editor de textos. Os plugins extras são dispensáveis e eu diria até irrelevantes porque nada mais são do que “cascas” visuais para linhas de comando que são simples.
Fico imaginando a perda de tempo em se desenvolver um dialog box gráfico que terá muito mais linhas de código do que o que se está chamando. Para executar um simples “script/generate” são necessárias centenas de linhas de código em Java para fazer a caixa gráfica. Não me parece muito prático. E esses comandos mudam o tempo todo. Não me parece prático mesmo.
O ideal é um editor de textos leve, que tenha suporte a edição em blocos (como o modo visual do Vim), bom suporte a Regex (indispensável), abbreviations (para snippets), um color coding competente e um jeito fácil de navegar entre os arquivos do projeto (como o FuzzyFinder ou o Command+T do Textmate). É só isso, todo o resto vai na linha de comando/terminal.
Mais do que isso é gordura desnecessária. Outra coisa que não é prioridade mas seria o ideal: rodar em todas as plataformas, para que fique mais fácil mudar de Windows para Linux, de casa para o trabalho, sem precisar se acostumar com duas ferramentas diferentes. Nesse caso, o Vim se adaptou melhor.
O Emacs também, claro, e no caso de snippets imagino que ele tenha um suporte ainda melhor do que o NerdSnippets.
você pode gravar o vídeo em inglês?
Olá Akita, tudo bom?
Fui testar o FuzzyFinder aqui, mas quando faço ctrl-f aqui (estou no Ubuntu), recebo:
E492: Not an editor command: FuzzyFinderTextMate
Sabe o que pode ser isso?
Abraço!
Brilhante Akita, obrigado por atender ao meu pedido via Twitter :-)
Vou começar a testar agora.
Abraços!
@Cassio, não deveria precisar, mas para garantir tente instalar a gem jamis-fuzzy_file_finder (source github).
@Bryanl Hey, Bryan, did you google translate that or you do know a bit of portuguese? :-) Don’t worry, I just recorded an English version, I am uploading it right now to Vimeo and it should be available in a few hours.
Akita, nada feito :-( Instalei a gem e continuo tendo o mesmo problema. Inclusive se eu faço, no modo normal
:FuzzyFinder
e dou tab, ele mostra várias opções, mas nenhuma delas é ‘FuzzyFinderTextMate’.
Você chegou a testar a coisa toda no Linux ou só no Mac mesmo?
Valeu pela ajuda!
Olá, Akita, beleza?
Eu não conhecia esse NERDsnippets. Vou começar a usá-lo junto com os snippets que você converteu. A única coisa que eu alterei foi o snippets.vim. Eu geralmente chamo o gvim pelo gnome-do, então botei pra carregar os snippets de rails mesmo quando o vim for iniciado fora de raízes de aplicações rails.
Valeu!
O Emacs tem o YASnippet que suporta Ruby e outras linguagens. Nunca o usei o NERDsnippets para dizer se é melhor ou não.
I only speak a little portuguese, and I can’t write it. Google is my buddy.
no linux funciona certinho com o gvim.
Parabéns Akita, show de bola!
Aqui no meu ubuntu funcionou perfeitamente, segue a lista dos pacotes instalados:
sudo apt-get install vim vim-addon-manager vim-common vim-full vim-gnome vim-gtk vim-gui-common vim-rails vim-ruby vim-runtime vim-tiny
Abraço!
Akita,
Utilizo o Emacs para trabalhar full-time, e acredito que ele (juntamente com o Vim) seja uma grande opção para se trabalhar com Rails fora do Mac (utilizo o mesmo full-time, e não sinto muita dificuldade…)
O Problema está na curva de aprendizado, o Emacs tem suas “particularidades” que o tornam meio dificil de aprender no inicio… mais com o tempo vc acaba se acostumando com o jeito heheh
Caso alguém queira testar, mantenho um projeto no github para tentar melhorar este primeiro contato…
http://github.com/tchandy/emacs-rails/tree/master
Abraço
Sempre usei o Vim justamente pelo que você fala no screencast, posso ser xiita, mas acredito que não há nenhum outro editor melhor que ele….
Não conheço o textmate, mas todos os recursos mostrados no screencast, eu já usava no Vim em 2004.
Acredito que a diferença seja que o Vim da uma liberdade que os desenvolvedores possam moldar sua necessidade, enquanto que o textmate dá algo de igual necessidades aos desenvolvedores.
Alguém conhece algum plugin de snippets para Vim melhor que o NerdSnippets? Algo mais próximo ao do Textmate que tenha placeholders? Ou seja, digitar num campo via tab automaticamente preenche campos similares dentro do mesmo snippet?
Legal Akita você dispor de tempo para ajudar os novatos, como eu, com artigos assim……rssssss
Gosto muito também do Gedit, para este editor foram feitas muitas customizações e plugins que o tornam produtivo.
Há um ótimo artigo chamado pump my gedit que descreve as melhorias para que ele tenha um comportamento e aparência semelhantes ao TextMate.
E vamos fazer o mercado rails crescer cada vez mais!
Abraços!
Uma dica de uma funcionalidade que gostei bastante do vim e é nativa. Edição de áreas retangulares.
Para isso digite ctrl + v em normal mode. Em seguida selecione as linhas que você deseja editar simultaneamente. Digite “I” (tem que ser maiusculo). Digite o texto que quiser. Ao final pressione esc e voce vai ver a mágica acontecer!
Não uso textmate e não se se ele tem essa funcionalidade.
[]’s
LeoLuz
Salve.
O Alexandre Silva juntou uma série de adaptações e plugins do GEdit para adicionar funcionalidades para Ruby e Rails, que ele chamou de GMate, e publicou as alterações no GitHub, segue o link:
http://github.com/lexrupy/gmate/tree/master
Além disso tem um artigo sobre isso no blog dele, o endereço está no GitHub. Entre as funcinalidades adicionadas temos: pesquisa em arquivos, abertura de arquivos com regex, navegação no diretório do projeto, highlight de código Ruby e Rails, class explorer, extração de partials, dezenas de snippets, auto-identação, terminal dentro do editor, chamada de generators, etc.
Eu estou usando essas alterações e elas funcionam muito bem, não tenho experiência no TextMate (não uso Mac) para comparar mas estou bem satisfeito com elas, recomendo uma olhada.
Abraço,
Rafael.
@AkitaonRails
Eu acho que o snippetsEmu faz isso, mas você só vai ver a mudança no quando apertar tab novamente. Se eu não me engano, o plugin do textmate muda todos os placeholders na mesma hora, não é?
http://www.vim.org/scripts/script.php?script_id=1318
Eu fui influenciado a comprar um Mac e um dos argumentos que pensava era que iria usar muito o textmate para programar no rails.
Mas descobri que o VIM já era bom o suficiente e conhecia muito mais atalhos do VIM do que no TextMate, começei a usá-lo mas me decepcionei com os bugs.
Fim das contas acabei ficando no VIM e não vou sair tão cedo.
Uso no linux e no mac e este é o meu editor de texto.
Parabéns por organizar os scripts pq sempre tenho que copiar de uma máquina pra outra :D
Outra coisa.. Para quem está começando a mexer com o Vim ou até mesmo para os mais experientes, esse post é leitura obrigatória. Não faz sentido usar Vim se você não procurar melhorar sua eficiência com ele.
[]!
LeoLuz
Olá,
muito bom o post… motivou a colocar meu _vimrc e vimfiles no github também!
Eu uso mais o SnippetEmu também, a emulação no Vim não fica tão boa quanto a do Textmate, mas quebra um bom galho. O FuzzyFinder foi um verdadeiro achado, e aposto que muito “vimmer” experiente que eu conheço nunca ouviu falar dele.
Dica rápida: para indentar automaticamente um arquivo, digite (rápido, pra impressionar) gg=G
Para corrigir a indentação de uma única linha, use apenas ==
Segue o link do meu também http://github.com/vcx/vimfiles/tree
[]s,
Vinicius Canto
Olá akita,
post 10! Só que eu tentei baixar, tanto o zip quanto o tar, do github e não deu certo. Apresenta a seguinte msg: That page doesn’t exist!
Tambem tentei com git clone e falhou…
Será que é pq estou por traz de um proxy?
Antes de rodar o clone eu fiz um git config —global http.proxy meuserver:porta…mesmo assim não deu.
PS: estou usando XP.
O que pode estar errado, além de estar usando XP?! :D
[]’s,
Valter Maia.
Akita mais uma vez parabéns cara, muito bom, estou aprendendo a mexer no vim agora e já se tornou o meu editor para qualquer coisa.
Conseguí!!! O problema era com o proxy mesmo…
Mas gostaria de deixar registrado que eu admiro muito o seu trabalho e o do Carlos Brando.
Sou fã de vocês cara. Acompanho tudo que rola de assuntos nos dois blogs! Valeu.
Parabéns!!!
[]’s
Akita,
Consegui resolver aqui. Acabei mandando um e-mail pro Jamis e ele me explicou que foi necessário uma atualização no plugin dele, porque o autor do FuzzyFinder tinha mudado algo lá que tornava as coisas incompatíveis. E eu, sortudo que sou, peguei bem esse intervalo. Atualizei tudo aqui e está funcionando perfeitamente.
Obrigado pelo excelente post.
Akita… nossa cara o screencast ta muito bom como todos os que voce faz, sempre do bem explicado mas cara ….
a parada nao funfa … de jeito nenhum…
control T e acontece Not an editor command: FuzzyFinderTextMate
vou tentar com o gvim e caso alguem saiba como arrumar esse erro por favor me fala eu morro de vontade de usar o textmate. ou algo parecido
Akita… nossa cara o screencast ta muito bom como todos os que voce faz, sempre do bem explicado mas cara ….
a parada nao funfa … de jeito nenhum…
control T e acontece Not an editor command: FuzzyFinderTextMate
vou tentar com o gvim e caso alguem saiba como arrumar esse erro por favor me fala eu morro de vontade de usar o textmate. ou algo parecido
Parabens aquita, excelente screencast!
mudei de vez pro vim por causa desse post, fantastico.
@Fernando tenta ctrl+F pois na última atualização subiu com outro shortcut. Explora o vimrc. É importante entender como ele funciona.
Akita, ou alguem pode me responder pq eu abro o vim e aparece este erro procurei no google mas nada…
CSApprox needs gui support – not loading.
See :help |csapprox-+gui| for possible workarounds
@Fernando,
Sobre o problema com o CSApprox, abre o seu .vimrc e dê um find em uma linha assim:
let g:CSApprox_loaded = 0
e comenta essa linha.
Sobre o problema do “Not an editor command :FuzzyFinderTextMate”
Verifique se o seu Vim está compilado com suporte a Ruby, porque sem isso não vai funcionar. Para saber se está, rode o comando :version no modo normal e procure na saída deste comando por “+ruby”. Se você encontrar apenas “-ruby”, vai precisar recompilar seu Vim com essa opção habilitada.
Pow cassio obrigado… realmente esta com -ruby..
estou procurando na web como compilar o vim com ruby se tiver uma dica agradeco…
obrigado
BELEZAAA funcionou brigadao cassio
pra quem ainda nao conseguio compila o vim com esta opcao
—enable-rubyinterp
e pronto
valeu galera e akita parabens pelo belo post
Galera com o vim compilado sem o perl e sem phyton da pau ??
quando dou :version
ele me aparece -perl e -phyton
ele aparece +ruby
o fuzzyfinder ta funfando mas o resto nao …
nossa to me mantando mas vou conseguir…
@Fernando,
O que é exatamente “o resto” que não está funcionando? Aqui eu também tenho -perl e -python e tudo funciona certinho.
entao… as cores nao funcionam o tab pra completar nao funciona e quando eu comentei aquela linha let g:CSApprox_loaded = 0 deu um erro e depois aparece de novo CSApprox needs gui support – not loading. See :help |csapprox-+gui| for possible workarounds acho q nao compilei o vim com suporte a gui. ou melhor nao consegui ainda, pq ja cologuei pra abilitar
legal tudo funfando… menos o tab… quando aperto tab ao invés de completar ele simplesmente anda 4 casas.. o q o tab faz normalmente.. alguem sabe o pq o tab nao esta funcionando ??? grato
Há um plugin que, na minha opinião, é o melhor para auxiliar o desenvolvedor na navegação de arquivos nos diretórios do projeto: o VimExplorer.
Akita, aqui não acho o arquivo vimfiles\snippets.vim.win32
não existe esse cara.
Participo de um projeto de criação de um livro sobre o vim no google.code—> http://code.google.com/p/vimbook
Baixem uma versão em pdf para ver se agrada: http://code.google.com/p/vimbook/downloads/list
Eu também não consegui encontar snippets.vim.win32.
Nem na pasta vimfiles nem no projeto do github…
quando eu tento executar algum comando do Nerdsnippet.. dá erro…
Pessoal, leiam este artigo que tem a receita mais recente e não usa o snippets win32.
Akita, no meu gvim 7.1 no ubuntu 8.10, num ta funcionando os snippets de rails não e nem o :help de rails, só de ruby, poderia da uma ajuda? mas acho que o resto ta funcionando beleza!
cássio marques no meu caso o uso da gem que o fabio disse resolveu o problema…...
Ola Fábio, ta funcionando quase tudo, um problema… quando digito : help rails da o seguinte;
E149: Sorry no Help for Rails….
O que pode ser?
Orbgiado.
Olá, não consegui configurar o Vim no windows muito confuso, em uma página tinha meia duzia de comandos, e nessa 2 comandos, como é isso? um é continua do outro. Uma vez tinha conseguindo instalar o fuzzyfinder, mas aparecia, gem …....... não lembro o resto depois desinstalei, instalei e fiz tudo como ta nas duas páginas e não deu certo..
podes me ajudar?
Outra coisa teve comandos que você colocou na screencats que não vi na lista de configuração
Alguém conseguiu instalar no Ubuntu. To levando uma surra..
Minhas reverências ao Vim, estou impressionado!
E algumas referências: http://rayninfo.co.uk/vimtips.html http://ftp.upf.tche.br/pub/linux/conectiva/6.0/cd2/doc/howto/Vim-HOWTO
sudo apt-get install vim vim-gtk exuberant-ctags ncurses-term
alias, nessa versão 9.04 beta o Vim nem veio por default, mas agora já ta tudo redondo. (:
Esse plugin ajuda bastante: http://www.vim.org/scripts/script.php?script_id=184
Só uma pequena observação: o atalho para o FuzzyFinder é Ctrl+f e não Ctrl+t
Um alerta pra quem tentar refazer esses passos, ao executar o comando:
git clone git://github.com/akitaonrails/vimfiles.git
a pasta snippets virá vazia (acredito que por causa de uma atualização feita pelo scrooloose após a publicação desse post). Para resolver esse problema basta baixar também:
git://github.com/scrooloose/nerdsnippets.git
git://github.com/scrooloose/snippets.git
E é so isso pessoal.
Parabéns pelo trabalho Akita, como disse um xará num comentário acima "Você é o cara!"
Eu desenvolvo em java já há bastante tempo e estou aprendendo Ruby agora, entretanto estou com dificuldades para escolher uma ferramenta ideal para programar Ruby.
Eu gosto muito de programar em IDEs como Ecplise pelos seguintes motivos:
- Busca hierárquica de Tipos
- Buscas por métodos de classes ou tipos.
- Busca de hierárquica de chamada de métodos
- Code completion anexado à documentação
- Refactorings dos mais diversos possíveis.
Todos esses itens eu costumo utilizar com freqüência no dia a dia.
Por isso fico com dúvidas se os itens acima não são tão relevantes quando se está programando em Ruby, principalmente refactorings. E se por não serem tão relevantes muitos acabam escolhendo editores de texto como Textmate ou Vim.
Desde já muito obrigado, e parabéns pelo projeto.
Mais duas dicas pra quem usa vim, se você quiser usar autocomplete com Tab, como no bash coloque a seguinte função na .vimrc:
function! Tab_Or_Complete()
if col('.')>1 && strpart( getline('.'), col('.')-2, 3 ) =~ '^\w'
return "\<C-N>"
else
return "\<Tab>"
endif
endfunction
e pra quem usa abas no vim (sim, elas existem):
nnoremap <silent> <C-n> :tabnext<CR>
nnoremap <silent> <C-p> :tabprevious<CR>
Essas duas linhas acima deixam você navegar pelas abas com Control+p, para a aba anterior e Control+n para a próxima aba. Para abrir um arquivo em uma nova aba, basta usar
:tabnew arquivo
Vou tentar fazer com que os arquivos encontrados pelo fuzzy_finder sejam aberto em novas abas, acho que vacilita nossa vida. Akita, vc tem alguma dica pra me ajudar nessa tarefa? Não consegui ainda encontrar o arquivo que define com o fuzzyfinder se comporta no vim no linux.
Abraço a todos, Allam
Abraço,
wanderley