Ответ 1
: help] m
Я думаю, для поддержки ruby требуется vim-ruby.
Я изучаю VIM для разработки Rails и хотел бы легко перемещаться по методам в файле. Пока я вижу несколько вариантов:
Найдите 'def', используя
/def<space>
У кого-нибудь есть лучшие идеи?
: help] m
Я думаю, для поддержки ruby требуется vim-ruby.
вам понадобится функция ctags
см. exuberant ctags, он работает на многих языках, включая Ruby, и v прост в использовании.
из VIM :help ctags
ctags создаст индекс всех идентификаторов в исходном дереве. Затем вы можете использовать команды тегов для навигации по исходному дереву. см. :help tag-commands
. Самый простой способ - поместить курсор на ключевое слово и нажать CTRL - ]. Чтобы вернуться туда, откуда вы пришли, нажмите CTRL - T
Помимо этого, вы можете посмотреть на этой странице, в которой описывается, как использовать VIM в качестве полнофункциональной Ruby IDE: Использование Vim в качестве полного Ruby On Rails IDE
Лучшее решение для Vim: использовать ctags. Прочитайте документацию Vim о том, как перемещаться в файлах TAGS, также установите плагин как CtrlP, который позволяет визуально просматривать теги.
Предупреждение: Exuberant ctags не работает с Ruby, синтаксический анализатор не в хорошем состоянии и не был изменен через 4 года.
К сожалению, все остальные (я нашел 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: -)
Несколько идей:
Во-первых, сделайте сопоставление для использования клавиш поиска функции 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
Недавно я обнаружил, что 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>
Один трюк - просто выполнить поиск, используя '/f methodName
'.
Вы также должны посмотреть на сворачивание кода, добавив эту строку в ваш .vimrc:
:let ruby_fold
Подробнее см. :help ft-ruby-syntax
.
Обычно я просто набираю имя метода для инкрементного поиска.