Ruby

индекс
128,98

VIM как Rails IDE в стиле TexMate благодаря набору скриптов от Akita

Это мой первый пост на Хабре, прошу не судить строго :)

В далекие времена, когда я ещё писал на c\c++, я пользовался замечательным редактором VIM, знал минимальный набор vim-фишек, и был в целом доволен его работой. Несколько позже я стал изучать Rails и программировать на Ruby. Я достаточно быстро понял, что базовой поставкой VIM не обойтись, попробовал пару найденных в интернете руководств по доведению VIM до уровня полноценной IDE, наткнулся на подводные камни, и быстро сдался. В тот момент мне хотелось изучать в первую очередь именно Rails, а не VIM.
Немного помытарился с разными другими редакторами и IDE типа Aptana, Geany, Eclipse и т.п. пока не наткнулся на полностью, на тот момент, удовлетворящий меня Netbeans. О Netbeans можно писать, да и написано, немало хорошего. Как IDE для разработки на Ruby Netbeans просто прекрасен. Я и сейчас использую его в случае, если работаю в Windows. Но однажды я оказался на длительное время не за своим, а за чужим ноутбуком, на котором уже стоял VIM, в месте, где интернет-трафик был сильно ограничен. А Таксовик требовал срочной доработки. Выкачивать ~60мб Netbeans и ещё n-ное количество мб на плагины было не этично, я и снова начал освоение VIM. И к моей радости довольно-таки быстро наткнулся на набор скриптов от бразильца Akita on Rails и скринкаст в придачу. Он, как я понял, собрал кучу полезных плагинов вместе и чуть-чуть дописал конфиг. Всё, о чём будет говориться ниже верно не только для Ruby, но и для других языков типа C, PHP и прочее, готовые наборы сниппетов (о них далее) в комплекте есть и для них.

Основные фишки этого набора скриптов


  1. FuzzyFinderTexMate — очень удобный поиск файлов в проекте по ctrl+f. К примеру, чтобы найти файл config\routes.rb надо набрать rorb. Или даже и того меньше :)
  2. Набор сниппетов из TexMate и некоторое количество своих (в смысле, NERDSnippets). Очень удобно, набираешь vf + TAB — получаешь validates_format_of :<+attribute+>, :with => /<+regex+>/<+, :on => :<+create+>, :message => "<+is invalid+>"+>, где по TAB скачешь между параметрами, заключёнными в <+...+>. Сниппеты есть для всего, чего угодно, их полный список можно посмотреть в папке snippets в директории с файлами кофигурации VIM.
  3. Дерево проекта, реализованное с помощью NERDTree. Доступно по \+p (обратный слеш и символ p). Переключение с дерева проекта в окно редактирования кода и обратно осуществляется по ctrl+w и стрелка (куда будет стрелка, туда курсор и перескочет), в самом же дереве o — открыть\закрыть папку\файл, R (shift+r) — обновить дерево и по вопросу(?) довольно внятная справка по горячим клавишам.
  4. Подсветка кода (rb, html, rjs, js, erb и т.п.)
  5. Возможности из rails.vim типа перехода по gf на файл модели, если курсор стоит на вызове, например, конструктора. Всяческие :Rake, :Rgenerate и т.п.
  6. Ну и все возможности и навороты VIM, за которые его так любят :)


А вот и скринкаст от автора на эту тему (рекомендую к просмотру):


Перестало работать. Ссылка на другом видеохостинге: blip.tv/file/3765175

Надеюсь, вы уже потираете руки, потому что vim — это очень быстрый, удобный, расширяемый и очень не требовательный к ресурсам компьютера редактор.

Добиться всего этого очень просто. Вышеупомянутый Akita собрал всё это в одном проекте на github.

Установка


Linux и Mac:

cd ~
git clone git://github.com/akitaonrails/vimfiles.git .vim
cd .vim
git submodule init
git submodule update


Если же у вас Windows, то в первую очередь надо установить Exuberant CTags и msysGit, после чего проделать следующее:

cd %HOME%
git clone git://github.com/akitaonrails/vimfiles.git
cd vimfiles
git submodule init
git submodule update


Далее, вы открываете ваш ~/.vimrc (на Windows %HOME%\_vimrc), и вставляете туда следующие строки:

source ~/.vim/vimrc "Собственно, подцепить все настройки от Akita
"В Windows вместо строчки выше надо вбить %HOME%\vimfiles\vimrc
colorscheme vibrantink "Приятная цветовая схема в стиле TexMate
set nu "Отображать номер астрок
set sw=2 "Заменяет TAB на 2 пробела
set sts=2 "Аналогично, но в случае автоотступа
let g:fuzzy_ignore = "gems/*"


Послесловие



Собственно, я очень доволен работой этих скриптов и VIM, и теперь на своём основном linux-ноутбуке пересел с Netbeans на VIM. Основные аргументы — удобство в работе (впрочем, оно сравнимо), скорость работы, отсутвие необходимости работать мышью (хотя VIM поддерживает мышь) и скорость загрузки (холодный старт Netbeans — секунд 30).
Не обошлось, конечно, и без небольших подводных камней. Чтобы работала вся эта красота нужен VIM собранный с поддержкой Ruby. Там, где я изначально настраивал это окружение, была установлена Mandriva 2010 и почему-то даже в самом расширенном vim-enhanced такой поддержки не было. Впрочем, многое работало и без неё (но не работал, например, FuzzyFinderTexMate). Проверяется это легко:
vim --version | grep ruby
или, если нет grep, то просто vim --version и поискать +ruby (собран с поддержкой) или -ruby (собран без поддержки).

На всякий случай скажу, что в TexMate я никогда не работал :)

Немного ссылок


Сам блог Akita on Rails
Пост про VIM + RAILS + IDE: часть 1, часть 2
То же, но под Windows

Обновление №2

Как правильно подсказывают в комментариях: статья на хабре о дебаге Ruby-приложений в VIM

Обновление:

P.S. Если вам не трудно, увеличьте, пожалуйста, карму, чтобы я смог перенести это в тематический блог.
Перенёс, спасибо! :)
+18
26 августа 2009, 13:59
67

комментарии (36)

+3
zed_0xff #
там Акита забавно раз в две-три минуты че-нить косячит и говорит «уупс» :)))

а по делу:
несмотря на всё уважение к akita, рекомендую:
вместо git://github.com/akitaonrails/vimfiles.git рекомендую git://github.com/scrooloose/vimfiles.git
ибо
а) он в оригинале автор и мейнтейнер идеи
б) сборка новее, чем у akita
в) больше новых сниппетов
г) у акиты наблюдаются некоторые неприятные глючки

также ни там ни там у меня не заработали обещанные va[tab] и прочие, содержащие в коде <+...+> — вместо красивой подстановки переменных выкидывает исходник сниппета.
на тему сего запостил issue в scrooloose/snipmate-snippets.
0
mpetrunin #
Да, я видел scrooloose, но мне понравился скринкаст Акиты, и я использовал его набор горячих клавиш, который не совпадает с набором scrooloose.

А насчёт va[tab], так так и должно быть. Появляется исходник, курсор кидает на первую <+...+>, начинаешь что-то вбивать, после [tab] и на вторую и т.д.

За наводку насчёт авторства — спасибо. А у вас есть ссылка на какой-нибудь пост с описанием радостей\прелестей этого набора от scrooloose?
+1
zed_0xff #
вот именно что нажатия на [tab] и [Ctrl+J] в сочетании va[tab] нифига не работают :((
может, у меня вим какой-то не такой? о_О

набор у scrooloose тот же самый. различия в мелких деталях и свежести компонентов набора.
например, Ctrl+F (FuzzyFinder) у меня в наборе от scrooloose заработало сразу, а от акиты — требовало допиливания
Ctrl+T (NERDTree) не работало ни там ни там, заработало после добавления
map <C-t> :NERDTree<CR>
в .vimrc
0
mpetrunin #
рекомендую, кстати,
map <C-t> :NERDTreeToggle
0
zed_0xff #
спасибо! :)
0
Cthulhu #
Тогда уж
:map <C-t> :NERDTreeToggle
0
Cthulhu #
silent убился:)
0
mpetrunin #
Кстати, а как перенести топик в блог Ruby или VIM?
И, кстати, если переносить — то куда?
+1
SMiX #
В ruby. Пересадим больше программистов на этот замечательный редактор. Может, и ценой недели времени, потерянного на его изучение, но оно того стоит
0
mpetrunin #
В Ruby и перенёс :)
0
SMiX #
Спасибо за превосходную цветовую схему
НЛО прилетело и опубликовало эту надпись здесь
+1
mpetrunin #
Дело привычки. Мнение большинства vim'оводов: «поначалу непривычно, зато потом, когда немного наберёшь навыков работы в VIM, все остальные редакторы, если приходится в них работать, тебе как будто руки вяжут.»
0
kandreev #
Спасибо за пост. Есть замечание — тут все хорошо, не хватает только отладчика.

Тут была статья про использования VIM для отладки.

Однако, у меня не получилось заставить работать vim как отладчик в windows. В результате, приходится держать под рукой netbeans.

Если у кого есть положительный опыт использования VIM для отладки rails приложений — пожалуйста, дайте знать.
+2
Astashov_Anton #
У меня есть, я им каждый день пользуюсь, но меня-то не спрашивают наверно, да? :)
А если не получилось заработать, почему не написали в GitHub Issues или на крайний случай мне на почту? Почти всем, кто писал и у кого были какие-либо проблемы, получилось помочь.

Хотя надо признать, в Windows vim-ruby-debugger использовать не очень удобно. Вот на маке или в линуксе очень даже.
0
kandreev #
Антон, спасибо за ответ, и за vim-ruby-debugger.

Не написал никуда, т.к. не хотелось обременять вас всякой ерундой, тем более что не был на 100% уверен, что проблема именно в vim-ruby-debugger. Хотелось узнать сначала, работает ли у кого под windows, и если да, то тогда можно продолжать попытки заставить работать и у себя. Такая была идея. :)
0
Astashov_Anton #
Да, vim-ruby-debugger работает под Windows. Из неудобств — плагин держит два окошка с терминалом открытыми и постоянно мельтешит ещё одним при выполнении различных действий, потому как я не нашел способа запускать в Windows программы в бэкграунде (как в линуксе с &, например 'ruby bla.rb &' запустит на POSIX системе процесс в бэкграунде).

Если мне кто подскажет хороший метод, как можно этого добиться, буду очень признателен.
+1
sl_bug #
попробуйте вот это www.ntwind.com/software/utilities/hstart.html
конечно придется включить данную программулину в дистрибутив или написать свою :)
0
Astashov_Anton #
Ух ты, мило! Супер! Спасибо большое, судя по описанию это именно то, что надо!
0
preprocessor #
о, а можно заодно вопрос. а с macvim его реально заставить работать? в свое время не особо парился, но с наскока не получилось и проблема вроде какая-то фундаментальная была.
0
Astashov_Anton #
Ага, было такое, нашли багу. Надо указать в .vimrc

:let g:ruby_debugger_progname = 'mvim'

Подробности смотрите в :help ruby-debugger-issues.

И как обычно — если что-то не работает — добро пожаловать в Github Issues! :)
0
preprocessor #
спасибо. вы клевый гитхаб-юзер )
0
Astashov_Anton #
Спасибо за комплимент. :)
Гитхаб — это просто фантастика! Проекты стало в разы легче создавать, поддерживать и обновлять. А ещё так приятно наблюдать как растёт количество Watchers, как сетка форков в Network разрастается… Ни в какие что-нибудьforge уже и не хочется. А когда они добавили Issues, отпала необходимость и в багтрекере, Issues вполне хватает для моих проектов.

Короче сплошной восторг. Вот поэтому я там и живу. :)
0
preprocessor #
да кто бы спорил, сам там :) без сотен вотчеров, но это закономерно )
0
coldFlame #
Мне FuzzyFinder успешно заменили RTcontroller, RTmodel, RTview, RTlayout, RTmigration, RTenvironment и прочие.
0
dammer #
Далее, вы открываете ваш ~/.vim/vimrc (на Windows %HOME%\_vimrc), и вставляете туда следующие строки:


Опечатка у вас, исправьте ~/.vim/vimrc на ~/.vimrc
0
mpetrunin #
Исправил. Вы, конечно, правы
+1
insip #
Как пропатчить vim-ruby под ruby 1.9?
0
Cthulhu #
Хороший вопрос. 7.2 не собирается с ruby.h от 1.9.1, а так хочется +ruby
+1
mpetrunin #
Для arch linux: aur.archlinux.org/packages.php?ID=31727
Для всех остальных: по ссылке выше есть патч, для сборки vim с ruby 1.9

Там же в комментариях пишут, что:
«Yes gvim 7.2.441 from testing repository works with Ruby 1.9
Do not use this package.»
0
Cthulhu #
Спасибо, добрый человек:) На будущих выходных попробую собрать.
0
slayerhabr #
хорошо, но перестал работать tab-completion, как его вернуть к жизни?
0
slayerhabr #
поставить плагин supertab.vim он кстати хорошо дружит со snipMate
+1
slayerhabr #
github.com/slayer/vimfiles/tree/master
мой форк с supertab'ом
0
naezdnik #
Спасибо за пост, добавил в избранное.
Как освоюсь с Rails и Ruby обязательно обращу свой взор на vim.
0
berad #
Я искренне извиняюсь за тупость вопроса, но курение мануалов как-то не помогает. Я хочу запустить под виндой вим, чтобы писать на руби. Собственно скачал и установил вим отсюда: www.vim.org/download.php#pc
ставил тот, что для 64 битной версии ОС.
Прочитал вашу статью, вим собран без поддержки руби (-ruby пишется когда вывожу инфу о версии).
Собственно вопрос — как сделать теперь так, чтобы было +ruby?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.