Есть ли способ настроить хорошее автозаполнение для Ruby в Vim?

Я пытался настроить автозаполнение Vim для кода Ruby, но безуспешно. Я имею в виду, что все «работает», но я ожидаю, что будет доступен лучший плагин или конфигурация.

Я установил плагин rubycomplete, и он неплохо справляется со своей задачей, но ничто по сравнению с такой IDE, как RubyMine. Это был просто глоток свежего воздуха, как только я его установил, увидел, чего мне не хватало. Он хорошо понимает синтаксис, контекст и обычно показывает только релевантные возможные варианты.

Может я просто не правильно все настроил. Было невозможно найти учебник, запись в блоге, хорошую документацию о том, как это сделать (особенно актуальную). Иногда вы просто обнаруживаете, что существуют разные инструменты и настройки, и не так много объяснений, как это сделать.

Есть ли стандарт сообщества для такого рода вещей? Каковы наилучшие инструменты для достижения этого? Любой хороший учебник, источник, подсказки о том, как это сделать?

Я все время слышу, как люди говорят, что они предпочитают Vim IDE, такой как Rubymine, и что они могут добиться практически такого же поведения во многих аспектах с правильной настройкой плагина, но мой опыт был другим. Я действительно хочу продолжать использовать Vim, так как он легче, и мне нравится редактор, но производительность — это самое главное, и я трачу слишком много времени на чтение сообщений в блогах трех- и четырехлетней давности о том, как это настроить.


person bluediapente    schedule 31.08.2011    source источник
comment
Существует очень мало IDE с автозаполнением Ruby.. в основном потому, что Ruby настолько динамичен, что это сложно сделать. Единственная IDE с поддержкой автозаполнения Ruby, которую я видел, была KomodoEdit, и обычно она была бесполезна.   -  person Earlz    schedule 31.08.2011
comment
Я не вижу списка требований в вашем вопросе. Что вы хотите, чтобы всесторонний vim делал, чего он не делает? Я вообще не разбираюсь в Ruby, поэтому не думаю, что смогу помочь, но не могли бы вы уточнить свой вопрос?   -  person romainl    schedule 31.08.2011
comment
Аналогичный вопрос здесь: stackoverflow.com/q/4824507/513198   -  person Xavier T.    schedule 01.09.2011
comment
@romainl Я бы не знал о списке функций. Это больше касается того, чтобы предложения были релевантными, а не случайным неупорядоченным списком вещей, как это иногда появляется в Vim, и он знает о языке, синтаксисе, отношениях классов и т. Д. Вы узнаете это, если вы протестируете их рядом с тот же код. Я думаю, может быть, это было слишком много, чтобы спросить, поскольку Vim не является IDE, но я читал о людях, говорящих, что они похожи (может быть, это было в прошлом), но для меня что-то вроде RubyMine намного лучше и ускоряет разработку, так что я могу сосредоточьтесь на написании кода вместо того, чтобы мои инструменты мешали.   -  person bluediapente    schedule 01.09.2011
comment
Vim не IDE, это точно. Omni-completion не так эффективен, как автодополнение большинства IDE, потому что ему не хватает всей фоновой компиляции и всех дополнительных вещей, которые они используют для выполнения умных предложений. Я в основном использую JS/PHP, и по большей части предложения vim актуальны: с var d = new Date(); с использованием завершения после получения в var y = d.get отображается весь список методов объекта Date. То же самое для конструктора, даже с методами на основе прототипов. Этого более чем достаточно для меня. Вы пробовали AutoComplPop? Это делает предложение автоматическим.   -  person romainl    schedule 01.09.2011
comment
Также я просил привести пример того, что не так и как, по вашему мнению, все должно работать.   -  person romainl    schedule 01.09.2011


Ответы (2)


Вы можете в режиме вставки нажать Ctrl + x, затем Ctrl + o (omni), чтобы получить список методов Ruby. Если вы уже ввели несколько символов, например ea, вы получите each, each_with_index и т. д.

В моих vimfiles Tab отображается для завершения с использованием другого слова в буфере.

Это не так хорошо, как IDE, например, Netbeans или Rubymine, но работает достаточно хорошо.

После нажатия Ctrl + x есть другие комбинации, которые вы можете использовать, используя слова, линии и т. д.

Существует также eclimd, который использует безголовый Eclipse для обеспечения автоматического завершения, но мне так и не удалось понять, как заставить его работать. Установить и подключить Vim к Eclipse достаточно просто, но после этого...

Альтернативой может быть Snipmate, ea<tab> с расширением до each { |element| }.

person Kris    schedule 21.10.2011

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

Например, вы не можете автоматически реорганизовать код, используя область действия (заменив foo() на bar() в классе Monkey, но не в классе Ape во всем вашем проекте).

Точно так же автозаполнение не всегда разумно. Я думаю, что для C/C++ ситуация терпимая благодаря таким инструментам, как clang_complete. Но для Java или менее популярного языка у меня возникло ощущение, что скрипт автодополнения не подходит для этой задачи. Таким образом, вы тратите много времени на работу со сценариями. Проблема в том, что для хорошего автодополнения нужно задействовать всю мощь интерпретатора или компилятора, а это, видимо, сделать не просто.

Тем не менее, я продолжаю использовать Vim в первую очередь потому, что я более эффективно редактирую фрагмент кода, но когда этого требует ситуация, я также использую IDE рядом с Vim.

Я не знаю конкретной ситуации с Ruby, но не уверен, что вы получите положительный ответ.

Я мечтаю, чтобы каждая IDE имела обязательный полный режим ввода vi.

person Xavier T.    schedule 31.08.2011
comment
Вот почему я предпочитаю эмуляцию vim, например ViEmu в Visual Studio. Вы получаете лучшее из обоих миров. - person Earlz; 31.08.2011
comment
@Earlz: Я использую Viper в eclipse, это хорошо, но это слишком полная реализация. - person Xavier T.; 31.08.2011