Vim 和 Ruby - 如何匹配 "do" 和 "end"?

16
我确定我们都熟悉“unexpected kEnd”问题。对我来说,它们总是很麻烦,因为Vim无法匹配“do”和“end”。(以及其他以“end”结尾的元素,如“if”)
是否有一种配置方式可以让Vim显示这些匹配项,以帮助更轻松地调试?

适当的缩进可能会有所帮助。 - sidyll
3
它确实有帮助,而且我的所有文件都缩进得非常好。但是它的帮助还不够,特别是当嵌套缩进开始变得极其深入时......(如果问题不在于不正确的缩进,而是因为您忘记在代码块开头添加“do”)。 - GlyphGryph
使用 Syntastic - Hauleth
这个答案帮了我 - https://dev59.com/rXI-5IYBdhLWcg3w48tO#1629883 - Rahul
4个回答

24
如果您正在使用最新版本的vim(我正在使用7.4),内置的matchit宏可以很好地与ruby代码配合使用。
只需通过将以下内容添加到您的.vimrc文件中来启用它。
runtime macros/matchit.vim
在ruby文件中,按下%键可以匹配do/end组合和其他许多字符。

2
没想到这是内置的!太好了。同时也适用于 def / end - lmiller1990
1
同样适用于neovim! - Jamesy Dimmick May

5

我使用这个宏,然后将以下内容添加到我的vimrc文件以启用它:

" % to bounce from do to end etc.
runtime! macros/matchit.vim

当我想要找到与 do 相匹配的结束符时,我会将光标移至 do 上并按 % 键。


嗯...虽然这正是我想要的描述,但它实际上似乎并没有起作用。它只是跳到了行首。很奇怪。不,等一下...啊,它可以用于 if 语句,并且可以从“end”向后工作,但我无法使其从“do”向前工作。 - GlyphGryph
实际上,它甚至似乎根本不匹配 Ruby 语法 - 它只是匹配缩进级别。由于我使用 foldmethod=indent,所以这...相当无用。它肯定不能帮助我追踪错误。很抱歉,这是一个好主意,但这个实现明显有所欠缺。 :/ - GlyphGryph
在你报告的所有问题中,这个对我来说都有效。可能是我从不同的来源获取了我的宏 - 让我看看能否找到它的来源。 - Derek Prior
从实际文件的注释中可以看出:“这个函数并不是很复杂。它只负责缩进。如果你在行 `if x',那么光标将跳转到下一行,并与 if 语句具有相同的缩进。”所以这似乎解释了这种行为。如果你有不同(更好)的版本,我很想看看!^_^ - GlyphGryph

4

1
我也使用这个工具,但有时会忘记它已经被添加了,然后我就会迷失在一堆 do/end 中,这就是 matchit 的用处所在。 - Derek Prior

-2

我使用this的matchit克隆版本,可以很容易地通过vundle安装。


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