如何在VIM中导航Ruby方法?

bte*_*les 43 ruby vim

我正在学习VIM for Rails开发,并希望轻松导航文件中的方法.到目前为止,我看到几个选项:

  • 通过使用找到'def'

    /def<space>
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用q和记录创建与键对应的宏
  • 使用VIM标志?(甚至不确定他们做了什么,他们听起来很有希望

有没有更好的想法?

ere*_*ite 40

:帮助] m

我认为它需要vim-ruby来支持红宝石.


chi*_*tom 35

你会想要一个名为ctags的功能

看到充满活力的ctags,它适用于包含Ruby的许多语言,并且易于使用.

来自VIM :help ctags

ctags将创建源树中所有标识符的索引.然后,您可以使用标记命令在源树周围导航.看:help tag-commands.最简单的方法是将光标放在关键字上,然后按CTRL- ].要回到你来自哪里,请按CTRL-T

除此之外,您可能希望查看此页面,其中介绍了如何将VIM用作功能更全面的Ruby IDE:将Vim用作完整的Ruby On Rails IDE

  • 是的,有一个惊人的,Ruby 1.9+只有https://github.com/tmm1/ripper-tags - 有一个拉取请求,可以改善CLI.但是大师今天工作正常. (3认同)
  • 大警告:Ctags没有正确解析Ruby文件.例如,它不接受带有四个点的类定义(例如,类Xyz :: Classname)和其他几个东西.不幸的是,最新版本是从2009年开始甚至开发版本都不支持. (2认同)

lza*_*zap 13

Vim的最佳解决方案:使用ctags.阅读有关如何在TAGS文件中导航的Vim文档,还安装CtrlP之类的插件,可以直观地浏览标签.

警告:繁琐的ctags与Ruby不兼容,解析器状况不佳,4年后它还没有改变.

  • ctags不处理:模块A :: B
  • ctags不标记(至少某些)运算符方法,如==
  • ctags不支持限定标签,-type = +
  • ctags不输出常量或属性的标记.

不幸的是所有其他(我发现2)Ruby ctags生成器要么已过时(没有Ruby 1.9+支持),要么非常慢.

有一个解决方案.Ripper-ctags:https://github.com/tmm1/ripper-tags它很快,它按预期工作.它基于Ruby 1.9+功能,称为"Ripper",它允许我们构建在(快速)Ruby原始解析器之上.它是当今最准确的ctags发生器.

Ripper CLI选项几乎与ctags相同,因此如果您已经知道ctags,您会发现ripper-tags易于学习.它很简单:

ripper-tags -R .
Run Code Online (Sandbox Code Playgroud)

这会创建TAGS文件,vim默认自动读取(必须是打开vim实例的目录,或者如果你在另一个目录中启动它,请在vim中手动更改路径设置 - 更多在Vim手册中).

如果你喜欢这个,你可以更进一步安装我的项目,为你安装的所有宝石自动创建TAGS:https://github.com/lzap/gem-ripper-tags

用法很简单(再次注意,只有Ruby 1.9+):

gem install gem-ripper-tags
Run Code Online (Sandbox Code Playgroud)

然后为所有已安装的宝石生成标签:

gem ripper_tags
Run Code Online (Sandbox Code Playgroud)

无论何时安装gem,都会自动创建标签.

gem instal some_gem ...
Run Code Online (Sandbox Code Playgroud)

我再往前走一步 - 我有一个git模板,它会在每次git pull或者自动合并后使用ripper-tags 重新生成我的项目TAGS :

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

请注意,您将需要来自同一个git存储库的目录文件/ git_template.

我希望这是在Ruby代码库中导航的良好起点:-)


DrA*_*rAl 5

一些想法:

首先,进行映射以使用C函数搜索键~/.vim/after/ftplugin/ruby.vim:

:nmap [[ ?def <CR>
:nmap ]] /def <CR>
Run Code Online (Sandbox Code Playgroud)

然后你可以使用[[]]前进和后退一个函数,就像在C/Perl/Java代码中一样.

另一种可能有用的方法:

.vimrc,添加行:

:let ruby_fold = 1
Run Code Online (Sandbox Code Playgroud)

然后使用zj,zk,z[z]由褶皱导航.您也可以安装此插件,以便您可以使用轻松删除折叠daz.

为了找到特定的功能(而不仅仅是在它们周围导航),你需要使用ctags(如chillitom所述).该标记列表插件使得它更容易定位到特定的功能,但(作为chillitom说)Ctrl- ]Ctrl- T是光标下以下关键字有用.

有关更多信息,请参阅:

:help [[
:help ft-ruby-syntax
:help z[
:help after-directory
Run Code Online (Sandbox Code Playgroud)