Как я могу настроить vim + ctags для распознавания определений области ActiveRecord рельсов? - PullRequest
3 голосов
/ 01 марта 2012

говорят, что у меня есть этот код:

class User < ActiveRecord::Base
  scope :recent, where(:created_at => 2.weeks.ago)
end

... А потом в vim я иду в другой файл и вижу:

User.recent

Есть ли способ, которым я могунастроить ctags так, чтобы при поиске: тег недавний я перешел к объявлению области видимости?Похоже, что он ищет только те вещи, которые являются фактическими определениями методов.

...

Кроме того, есть ли способ указать путь для тегов?Я хочу сгенерировать ctags для всех гемов в данном проекте rails, чтобы я мог переходить к объявлениям методов кода сторонних разработчиков из своего кода.Это возможно?

Ответы [ 2 ]

5 голосов
/ 20 июля 2014

Чтобы создать пользовательский тег для областей ActiveRecord, просто используйте параметр командной строки —regex-<LANG>.Для этого параметра требуется шаблон замены регулярного выражения, содержащий (1) шаблон, соответствующий языковой функции в нашем исходном коде, и (2) запись тега, которая должна быть создана для него.В нашем случае мы хотим найти определение области и создать тег с именем области.

--regex-ruby=/^[ \t]*scope[ \t]*:([a-zA-Z0-9_]+)/\1/

Теперь, если мы видим область ActiveRecordв нашем текстовом редакторе мы можем быстро перейти к определению в модели!

Эта опция будет применена по умолчанию при добавлении в файл конфигурации .ctags.

echo '--regex-ruby=/^[ \t]*scope[ \t]*:([a-zA-Z0-9_]+)/\1/' >> .ctags

1 голос
/ 01 марта 2012

Да, ctags индексирует только метод и определения переменных / констант по умолчанию.Также поведение Vim по умолчанию - переход к тегу.Если вам часто нужно перейти к scope, возможно, вам понадобится пользовательское отображение.

Что касается второй части вашего вопроса, вы можете использовать это:

:set tags=/path/to/tags

илииспользуйте флаг -a, чтобы добавить новые теги в ранее существующий файл tags.

...