我正在学习VIM for Rails开发,希望能够轻松地在文件中导航方法。到目前为止,我看到了几种选择:
/def<space>
有人有更好的主意吗?
wlzqhblo1#
:help ]m我认为它需要vim-ruby来支持ruby。
nx7onnlm2#
你会需要一个名为 ctags 的特性参见exuberant ctags,它适用于许多语言,包括Ruby,并且使用起来很简单。来自VIM :help ctags
:help ctags
:help tag-commands
除此之外,你可能想看看这个页面,它记录了如何使用VIM作为一个功能更全的Ruby IDE:Using Vim as a Complete Ruby On Rails IDE
eyh26e7m3#
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生成器。Ripper CLI选项与ctags几乎相同,因此如果您已经了解ctags,您会发现ripper-tags很容易学习。它很简单:
ripper-tags -R .
这将创建Vim默认自动读取的TAGS文件(必须是您打开Vim示例的目录,或者如果您在不同的目录中启动Vim,请手动更改Vim中的路径设置-更多信息请参见Vim手册)。如果你喜欢这个,你可以更进一步安装我的项目,它会自动为你安装的所有gem创建TAGS:https://github.com/lzap/gem-ripper-tags用法非常简单(再次注意,只有Ruby 1.9+):
gem install gem-ripper-tags
然后为所有已经安装的gem生成标签:
gem ripper_tags
任何时候你安装一个gem,标签将自动创建。
gem instal some_gem ...
我更进一步-我有一个git模板,它会在每次git pull或merge后自动重新生成我的项目TAGS**(使用ripper-tags):https://github.com/lzap/bin-public/blob/master/git-hooks-reinstall注意你还需要来自同一个git仓库的/git_template目录文件。我希望这是在Ruby代码库中导航的好起点:-)
kkih6yb84#
有几个想法:首先,在~/.vim/after/ftplugin/ruby.vim中使用C函数搜索键进行Map:
~/.vim/after/ftplugin/ruby.vim
:nmap [[ ?def <CR> :nmap ]] /def <CR>
然后你可以使用[[和]]来向前和向后执行一个函数,就像在C/Perl/Java代码中一样。另一种可能有帮助的方法:在.vimrc中,添加以下行:
[[
]]
.vimrc
:let ruby_fold = 1
然后使用zj、zk、z[和z]按折叠导航。您还可以安装this plugin,以便您可以轻松地使用daz删除折叠。为了找到特定的函数(而不是仅仅在它们周围导航),你需要使用ctags(正如chillitom所提到的)。taglist plugin使导航到特定函数变得更加容易,但是(正如chillitom所说)Ctrl-]和Ctrl-T对于光标下的关键字非常有用。有关详细信息,请参阅:
zj
zk
z[
z]
daz
:help [[ :help ft-ruby-syntax :help z[ :help after-directory
anauzrmj5#
我最近发现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>
qqrboqgw6#
一个技巧是只使用' /f methodName '进行搜索。你还应该通过在你的.vimrc中添加这一行来打开代码折叠:
/f methodName
:let ruby_fold
请参阅:help ft-ruby-syntax了解更多详细信息。
:help ft-ruby-syntax
sirbozc57#
通常我只是在增量搜索中输入方法的名称。
bfnvny8b8#
我使用ag(The银Searcher)编写了一个小的shell脚本。在.vimrc中定义以下函数此方法将展开光标下的单词。
ag
function! SearchForDeclarationCursor() let searchTerm = expand("<cword>") call SearchForDeclaration(searchTerm) endfunction
然后声明SearchForDeclaration方法
SearchForDeclaration
function! SearchForDeclaration(term) let definition = 'def ' . a:term cexpr system('ag -w ' . shellescape(definition)) endfunction
请注意,我们显式地搜索def关键字。(您可以使用您的语言方法签名语法)然后,我们将上述函数Map到Leader命令。
def
Leader
map <Leader>cd :call SearchForDeclarationCursor()<CR>
现在,如果您将光标放在“在您的项目中”定义的方法上的任何位置,并按<Leader>cd,它将导航到定义该方法的位置。注意,一个方法可以在多个类中定义。您可以循环使用<Leader>n作为下一个或<Leader>p作为上一个。如果你想要更详细的解释,我在这里写了一篇博客:https://pradyumna.dev/articles/2017-12-17-search-ruby-method-declarations-in-vim希望这有帮助!
<Leader>cd
<Leader>n
<Leader>p
8条答案
按热度按时间wlzqhblo1#
:help ]m
我认为它需要vim-ruby来支持ruby。
nx7onnlm2#
你会需要一个名为 ctags 的特性
参见exuberant ctags,它适用于许多语言,包括Ruby,并且使用起来很简单。
来自VIM
:help ctags
:help tag-commands
。最简单的方法是将光标放在关键字上,然后按CTRL-]。要返回到您来自的位置,请按CTRL-T除此之外,你可能想看看这个页面,它记录了如何使用VIM作为一个功能更全的Ruby IDE:Using Vim as a Complete Ruby On Rails IDE
eyh26e7m3#
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生成器。
Ripper CLI选项与ctags几乎相同,因此如果您已经了解ctags,您会发现ripper-tags很容易学习。它很简单:
这将创建Vim默认自动读取的TAGS文件(必须是您打开Vim示例的目录,或者如果您在不同的目录中启动Vim,请手动更改Vim中的路径设置-更多信息请参见Vim手册)。
如果你喜欢这个,你可以更进一步安装我的项目,它会自动为你安装的所有gem创建TAGS:https://github.com/lzap/gem-ripper-tags
用法非常简单(再次注意,只有Ruby 1.9+):
然后为所有已经安装的gem生成标签:
任何时候你安装一个gem,标签将自动创建。
我更进一步-我有一个git模板,它会在每次git pull或merge后自动重新生成我的项目TAGS**(使用ripper-tags):
https://github.com/lzap/bin-public/blob/master/git-hooks-reinstall
注意你还需要来自同一个git仓库的/git_template目录文件。
我希望这是在Ruby代码库中导航的好起点:-)
kkih6yb84#
有几个想法:
首先,在
~/.vim/after/ftplugin/ruby.vim
中使用C函数搜索键进行Map:然后你可以使用
[[
和]]
来向前和向后执行一个函数,就像在C/Perl/Java代码中一样。另一种可能有帮助的方法:
在
.vimrc
中,添加以下行:然后使用
zj
、zk
、z[
和z]
按折叠导航。您还可以安装this plugin,以便您可以轻松地使用daz
删除折叠。为了找到特定的函数(而不是仅仅在它们周围导航),你需要使用ctags(正如chillitom所提到的)。taglist plugin使导航到特定函数变得更加容易,但是(正如chillitom所说)Ctrl-]和Ctrl-T对于光标下的关键字非常有用。
有关详细信息,请参阅:
anauzrmj5#
我最近发现Ruby.vim(根据上面的答案之一)带有非常有用的键绑定:
qqrboqgw6#
一个技巧是只使用'
/f methodName
'进行搜索。你还应该通过在你的.vimrc中添加这一行来打开代码折叠:
请参阅
:help ft-ruby-syntax
了解更多详细信息。sirbozc57#
通常我只是在增量搜索中输入方法的名称。
bfnvny8b8#
我使用
ag
(The银Searcher)编写了一个小的shell脚本。在.vimrc
中定义以下函数此方法将展开光标下的单词。
然后声明
SearchForDeclaration
方法请注意,我们显式地搜索
def
关键字。(您可以使用您的语言方法签名语法)然后,我们将上述函数Map到
Leader
命令。现在,如果您将光标放在“在您的项目中”定义的方法上的任何位置,并按
<Leader>cd
,它将导航到定义该方法的位置。注意,一个方法可以在多个类中定义。您可以循环使用
<Leader>n
作为下一个或<Leader>p
作为上一个。如果你想要更详细的解释,我在这里写了一篇博客:https://pradyumna.dev/articles/2017-12-17-search-ruby-method-declarations-in-vim
希望这有帮助!