Подтвердить что ты не робот

Как перемещаться по Ruby-методам в VIM?

Я изучаю VIM для разработки Rails и хотел бы легко перемещаться по методам в файле. Пока я вижу несколько вариантов:

  • Найдите 'def', используя

    /def<space>
    
  • Создайте макрос, соответствующий ключу с помощью q и запишите
  • использовать отметки VIM? (даже не уверен, что они делают, они просто звучат многообещающе.

У кого-нибудь есть лучшие идеи?

4b9b3361

Ответ 1

: help] m

Я думаю, для поддержки ruby ​​требуется vim-ruby.

Ответ 2

вам понадобится функция ctags

см. exuberant ctags, он работает на многих языках, включая Ruby, и v прост в использовании.

из VIM :help ctags

ctags создаст индекс всех идентификаторов в исходном дереве. Затем вы можете использовать команды тегов для навигации по исходному дереву. см. :help tag-commands. Самый простой способ - поместить курсор на ключевое слово и нажать CTRL - ]. Чтобы вернуться туда, откуда вы пришли, нажмите CTRL - T

Помимо этого, вы можете посмотреть на этой странице, в которой описывается, как использовать VIM в качестве полнофункциональной Ruby IDE: Использование Vim в качестве полного Ruby On Rails IDE

Ответ 3

Лучшее решение для Vim: использовать ctags. Прочитайте документацию Vim о том, как перемещаться в файлах TAGS, также установите плагин как CtrlP, который позволяет визуально просматривать теги.

Предупреждение: Exuberant ctags не работает с Ruby, синтаксический анализатор не в хорошем состоянии и не был изменен через 4 года.

  • ctags не имеет отношения к: модуль A:: B
  • ctags не тегирует (по крайней мере, некоторые из) методы работы оператора, такие как ==
  • ctags не поддерживает квалифицированные теги, -type = +
  • ctags не выводит теги для констант или атрибутов.

К сожалению, все остальные (я нашел 2) генераторы Ruby ctags либо устарели (без поддержки Ruby 1.9+), либо очень медленны.

Существует одно решение tho. Ripper-ctags: https://github.com/tmm1/ripper-tags Он работает быстро и работает должным образом. Он основан на функции Ruby 1.9+ под названием "Ripper", которая позволяет нам строить поверх (быстрого) оригинального парсинга Ruby. Это самый точный генератор ctags сегодня.

Варианты CLIP Ripper почти идентичны ctags, поэтому, если вы уже знаете ctags, вы найдете легкость для чтения ripper-тэгов. Это легко:

ripper-tags -R .

Это создает файл TAGS, который vim автоматически считывает по умолчанию (должен быть каталог, в котором вы открываете свой экземпляр vim, или вручную изменяете настройку пути в vim, если вы запускаете его в другом каталоге - больше в руководстве Vim).

Если вам это нравится, вы можете пойти дальше и установить мой проект, который автоматически создает TAGS для всех установленных вами камней: https://github.com/lzap/gem-ripper-tags

Использование очень просто (обратите внимание, только Ruby 1.9 +):

gem install gem-ripper-tags

Затем создайте теги для всех уже установленных камней:

gem ripper_tags

В любое время, когда вы устанавливаете драгоценный камень, теги будут автоматически созданы.

gem instal some_gem ...

Далее я добавлю еще один шаг: у меня есть шаблон git, который регенерирует мой проект TAGS после каждого git автоматически вытягивания или слияния (используя риппер-теги):

https://github.com/lzap/bin-public/blob/master/git-hooks-reinstall

Обратите внимание, что вам понадобятся файлы каталогов /git _template из самого репозитория git.

Надеюсь, это хорошая отправная точка для навигации в кодовых базах Ruby: -)

Ответ 4

Несколько идей:

Во-первых, сделайте сопоставление для использования клавиш поиска функции C в ~/.vim/after/ftplugin/ruby.vim:

:nmap [[ ?def <CR>
:nmap ]] /def <CR>

Затем вы можете использовать [[ и ]] для перехода вперед и назад функции, как в коде C/Perl/Java и т.д.

Другой способ, который может помочь:

В .vimrc добавьте строку:

:let ruby_fold = 1

Затем используйте zj, zk, z[ и z] для перемещения по сгибу. Вы также можете установить этот плагин, чтобы вы могли легко удалять складки с помощью daz.

Для поиска определенных функций (а не просто навигации вокруг них) вы захотите использовать ctags (как упоминалось в chillitom). taglist plugin значительно облегчает переход к определенной функции, но (как сказал chillitom) Ctrl - ] и Ctrl - T полезны для следующих ключевых слов под курсором.

Для получения дополнительной информации см.

:help [[
:help ft-ruby-syntax
:help z[
:help after-directory

Ответ 5

Недавно я обнаружил, что Ruby.vim(по одному из ответов выше) поставляется с довольно полезными привязками клавиш:

nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','n')<CR>
nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','n')<CR>
nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','n')<CR>
nnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','','n')<CR>
xnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','v')<CR>
xnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','v')<CR>
xnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','v')<CR>
xnoremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','','v')<CR>

nnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','b','n')<CR>
nnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','','n')<CR>
nnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','b','n')<CR>
nnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','','n')<CR>
xnoremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','b','v')<CR>
xnoremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','','v')<CR>
xnoremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','b','v')<CR>
xnoremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','','v')<CR>

Ответ 6

Один трюк - просто выполнить поиск, используя '/f methodName'.

Вы также должны посмотреть на сворачивание кода, добавив эту строку в ваш .vimrc:

:let ruby_fold

Подробнее см. :help ft-ruby-syntax.

Ответ 7

Обычно я просто набираю имя метода для инкрементного поиска.