Ruby

индекс
128,98

Vim Ruby Debugger

До недавнего времени я писал Ruby код в Netbeans. Штука клевая и очень удобная, но я давно заглядывался на Vim, уж больно он мощный текстовый редактор, бобам и не снилось. Пытался несколько раз на него перейти, но как только встречался какой-то затык в коде, закрывал Vim, открывал Netbeans, ставил брейкпоинт и начинал разбираться что не так. В общем, привык я к отладчику.

Помучившись некоторое время, пришла идея написать Ruby дебаггер под Vim. Открыл код rails.vim, NERDTree.vim и начал учиться Vimscript'у. Так что спасибо tpope и Marty Grenfell за уроки (хотя наверно они никогда этого не прочтут и не узнают об этом). Плагин можно сейчас лицезреть на гитхабе.

Что умеет плагин


1. Дебажить любые Ruby скрипты, используя ruby-debug-ide гем.
2. Ставить/удалять брейкпоинты, смотреть переменные, путешествовать по коду.
3. Вводить команды вручную. Например, :RdbCommand p Post.all выведет все записи модели Post.

Что потребуется


Для корректной работы плагину надо:
  1. Vim версии >= 7.0, скомпиленный с опциями +signs и +clientserver. Проверить это можно так:

    :echo has("signs") && has("clientserver") && v:version >= 700

    Результат должен быть = 1
  2. Установленный гем ruby-debug-ide
  3. Если вы под Linux'ом, нужен установленный lsof

Установка

  1. Клонируем репо:

    git clone git://github.com/astashov/vim-ruby-debugger.git

  2. Из полученного нам нужна только папка vim, остальное нужно только для разработки. Копируем содержимое vim в ~/.vim/ (или в vimfiles, если вы под Windows).

    В итоге, должно получиться 3 файла:
    • plugin/ruby_debugger.vim — собственно сам плагин
    • doc/ruby_debugger — документация
    • bin/ruby_debugger.rb — промежуточный Ruby скрипт между Vim'ом и ruby-debug-ide гемом. Всё общение между ними происходит через него.

  3. Далее, запускаем Vim и выполяем

    :helptags ~/.vim/doc

    для установки документации по плагину. Почитать её можно по команде

    :help ruby-debugger

Установка завершена!

Использование

  1. Запускаем Vim. Если вы используете gvim, он автоматически запустит Vim сервер, а если vim — надо запускать с опцией servername: vim --servername VIM
  2. Идем, например, в какой-нибудь рельсовый проект.
  3. Запускаем сервер c отладчиком командой

    :Rdebugger

    (по умолчанию он запускает script/server webrick, если надо отладить другой скрипт, можно запустить:

    :Rdebugger foo.rb

  4. Ставим где-нибудь брейкпоинт (по умолчанию командой <Leader>b, чаще всего это \b).
  5. Открываем страницу с брейкпоинтом в браузере. Vim должен автоматически прыгнуть к линии со сработавшим брейкпоинтом.
  6. Дальше смотрим переменные, путешествуем по коду, в общем — развлекаемся! :)

Команды


По умолчанию (их конечно же можно переопределить в вашем .vimrc) задейстованы такие сокращения:
  • <Leader>b — поставить брейкпоинт
  • <Leader>v — открыть/закрыть окно с переменными. Переменные можно открывать/закрывать либо командой 'o' в нормальном режими или левым дабл-кликом
  • <Leader>m — открыть/закрыть окно с брейкпоинтами. Можно прыгнуть на выбранный брейкпоинт команодй 'o' в нормальном режими или левым дабл-кликом, а также удалить брейкпоинт командой 'd' в нормальном режиме
  • <Leader>n — перешагнуть (step over)
  • <Leader>s — войти (step into)
  • <Leader>c — продолжить (continue)

Как переопределить их вы можете почитать в :help ruby-debugger-details

Если вы встретили баг или придумали новую клевую фичу


То я буду дико признателен за репорт в гитхабовском Issues. Можете также просто написать на anton /сбк/ astashov.net, но репорт в Issues будет лучше. :) Плагин ведет лог почти обо всех своих действиях в файл ~/.vim/tmp/ruby_debugger_log, так что вместе с багом желательно приложить содержимое этого файла.

Я проверял работоспособность в Linux'е и Windows. В Linux'e плагин работает лучше, в Windows я так и не понял как запускать процессы в бэкграунде, поэтому мельтешащие окна с сервером и промежуточным ruby скриптом отвлекают. В MacOs не проверял, потому как у меня её нет.

Ну и напоследок скриншот плагина:
Скриншот Vim Ruby Debugger
+35
16 мая 2009, 11:11
26

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

0
GMile #
Прекрасно! Жаль только я Vim не использую… но в будущем, если что, это станет подспорьем для перехода на него
+1
Astashov_Anton #
Возможности Vim действительно впечатляют. Стоит только попробовать. Потом, в других редакторах, будет буквально ломка от нехватки возможностей. :)
0
Kirax #
можно вкратце — что именно там такого? какие конкретно возможности?
+4
Astashov_Anton #
Что самое главное лично для меня — работа в Vim как-то ближе подходит к мыслительной деятельности человека (моей в частности). Например, думаем — надо удалить всё отсюда и до кавычки (в Vim — команда ct"), а не выделить 28 следующих символов (или 5 слов) и удалить их (Ctrl+Shift+Left 5 раз и Del).

Плюс к этому можно делать хоткеи для фактически любых комбинации команд — делаем человекопонятные абстракции. Вообще для любых. Вместе с вводом команд, вводом текста, какими-нибудь вычислениями. Встроенный язык программирования Vimscript позволяет оборачивать это в циклы, ветвления.

Для того, кто печатает вслепую, есть сладкий бонус — все основные команды перемещения находятся на hjkl, не надо отвлекаться на курсор. На мышку тоже не надо, она почти не нужна. Из-за этого гораздо быстрее происходит трансляция 'мысли -> программа'.

Мелочей много, они познаются в процессе использования. Поэтому по мере роста опыта в Vim он превращается из дурацкого редактора, который бибикает и портит текст в мощный и удобный инструмент. Вот как то так.
0
Chaos_Code #
Супер! Я активно использую Vim, но для PHP/C. Подумываю изучать руби, и Ваша статья будет очень полезна =)
0
dammer #
Дайте толковых ссылок почитать про настройку vim под рельсы. Пользовался emacs и netbeans, но опять вернулся к истокам, к gedit тоесть :)
0
dammer #
сам справился, всё оказалось просто:

sudo apt-get install vim vim-ruby vim-rails
gvim -c ':help rails'

vim показался удобнее emacs, спасибо за плагин.
0
bubuq #
NERDTree добавьте.
+1
oisee #
[grammarnazimode on]
«Помучившись некоторое время, пришла идея написать Ruby дебаггер под Vim»

вероятно мучилась всё же не идея? =)
[grammarnazimode off]

tnx за плагин =)
0
dborovikov #
О, класс! Тоже частенько пишу в NetBeans, но в первую очередь не из-за возможности отладки, а из-за возможности видеть ошибки «на лету» (error free code). Нельзя ли случайно реализовать это в благине для vim?
0
Astashov_Anton #
Думаю, реализовать такое возможно, надо только подумать как. Я бы такой плагин хотел, может займусь скоро.
0
svyatogor #
Хотя я уже и не так активно использую Vim — это отличная новость. Порой приходится что то отлаживать удаленно и на серверах и вот тут дебагер страх как нужен!

Советую связаться с авторами rails.vim на предмет интеграции проектов :)
0
Astashov_Anton #
Ага, это удаленный дебаг тоже был фактором, который меня сподвиг на разработку. :)

По поводу интеграции — не думаю, что это нужный шаг. rails.vim используют пожалуй все кто разрабатывает на рельсах, но я знаю много людей, кто не использует дебаггер вообще. Нафига им мой дебаггер вместе с rails.vim? :) В любом случае, rails.vim и ruby_debugger.vim не конфликтуют и прекрасно уживаются вместе.
0
svyatogor #
ИМХО дебагер не используется или потому что он не интегрирован с IDE (как например в случае с TextMate) или люди просто не привыкли. Мне кажется было бы очень хорошо, если бы люди пишущие на рельсах в виме могли получить полноценный IDE одним комплектом. Или по крайней мере найти все в одном месте. Ведь про rails.vim знают если не все, то многие, а вот Ваш плагин пока такой популярности не имеет ;)
0
boblin #
Под СетьБобы есть отличная штука — плагин jVi, эмулятор vi-команд в нетбинсе. Вся основная функциональность есть и отлично работает. Поставил и горя не знаю.
0
boblin #
ах да, кому лень искать — скачать можно тут jvi.sourceforge.net/, ставится просто как плагин.
+1
evtuhovich #
Обалденная штука, у меня просто нет слов, как я рад, что такая штука появилась
0
antono #
Спасибо, отличный плагин!
0
Skammer #
Дико извиняюсь, но не могли бы вы написать небельшой туториал как отлаживать просто руби–программы, не имеющие никакого отношения к рельсам?

Я честно проследовал всем инструкциям, прочитал весь хелп, но переменные в окошке для переменных так и не появляются и брейкпоинты не срабатывают.

Буду очень благодарен.
0
Astashov_Anton #
Процесс абсолютно тот же самый, просто поставьте сначала брейкпоинты, а потом запускайте дебаггер командой

:Rdebugger ваш_скрипт.rb

он должен остановиться на первом встреченном брейкпоинте. Если не остановился создавайте тикет на Github Issues, разберемся!
0
Memph1s #
есть ли какая-нибудь возможность дебажить в виме, собранном без поддержки иксов, в чистой консоли?
0
Astashov_Anton #
К сожалению, нет. :( Иксы нужны обязательно, иначе clientserver не работает.
0
Memph1s #
жаль, придётся через консольку+ruby_debug)% спасибо за ответ(%
0
SergeyKish #
Спасибо!

Устновка опции +clientserver нетривиальна, сперва искал в configure, затем в гугле. Оказывается необходимо собрать с иксами.
./configure… --with-x=yes…

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