Vim:在Ruby中高亮显示关键词对(def/end,do/end等)

32

我最近尝试了一款基于Eclipse的编辑器(我想它是RubyMine),当选择一个打开或关闭方法或块的Ruby关键字时,相应的打开/关闭关键字会被突出显示。就像Vim能够突出显示对应的打开/关闭括号一样。

例如,如果我选择了'def',它会突出显示相应的'end'。它还适用于do/end块。

这真的很方便,特别是对于那些长而有时嵌套严重的Rspec文件。

有人知道如何在Vim中实现这一点吗?


2
看一下ruby-matchit.vim - 它允许你使用%在def...endclass..end之间跳转。对于你想要的东西,逻辑应该是相同的。http://vim.sourceforge.net/scripts/script.php?script_id=290 - Telemachus
1
另一个对于 x...end 配对非常有用的 Vim 插件是 Tim Pope 的 endwise,它会在你开始需要 end 的部分时自动插入它:http://github.com/tpope/vim-endwise - Telemachus
感谢您的评论,Telemachus。虽然这些不完全是我要找的,但仍然很有帮助。Ruby-matchit可以达到同样的目的,但如果可能的话,我更喜欢按照我的问题描述进行高亮显示。一旦我学到更多关于Vim的知识,我可能会调查是否可以自己实现。 - pakeha
1
++ tope的插件(我认为RubyMine是基于Inteli-J而不是Eclipse)。 - Jed Schneider
您不必使用ruby-matchit.vim才能在 defend 之间进行 % 导航;您可以使用常规的matchit.vim,它“允许您配置 % 匹配的不仅仅是单个字符”,并且在Ruby中对我来说可以直接使用。它还说:“自 vim 6.0 以来,matchit.vim 已经包含在标准的vim分发版本中,在macros/目录下”,但我没有它。无论如何,它在这里:http://www.vim.org/scripts/script.php?script_id=39 - Nathan Long
显示剩余2条评论
4个回答

18
如果您使用的是Vim 7.3版本,那么您应该可以使用MatchIt vim宏。
runtime macros/matchit.vim添加到您的.vimrc文件中,然后您就可以使用%来匹配ruby块。
您可以查看ruby的文件类型插件,以了解它将移动到哪里。

太棒了!它的效果比:set foldmethod=indentzc +1好多了。 - nothing-special-here

10

在VIM(直到7.2版)中,无法突出显示“if/end”关闭对,因为匹配设置仅接受一个字符(请参见:help matchpairs)。 我建议改用折叠,前提是您准确缩进代码:

:set foldmethod=indent

然后使用:zcza 确保你在正确的块中。


2
我在寻找解决同样问题的答案时发现了这个插件,它适用于基本的Ruby代码,但我没有为Rspec等进行测试。
只需通过pathogen安装它,并添加let g:hl_matchit_enable_on_vim_startup = 1https://github.com/vimtaku/hl_matchit.vim

2

1
无法正常工作,因为如:help matchpairs所述:目前仅允许单字节字符对,并且它们必须不同。 - KARASZI István
是的,它目前只支持...但是这段代码将给出如何进行括号匹配的想法,然后您可以扩展它以支持多字符对,对吧?这是一个起点 :) - Taryn East

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接