如何启用在vim中可视化的ruby方法

时间:2009-11-23 14:08:02

标签: ruby vim textmate

有人搜索了这个问题,但没有发现 - 也许我不知道在这种情况下如何正确定义搜索关键字。

我喜欢在开发Ruby on Rails应用程序时在vim中使用折叠。我的foldcolumn设置为4.但是它对ruby方法的开始和结束的可视化并不那么简单明了(“ - ” - “def”,“|” - “end”):

-def foo
      bar = 1
|end

问题是 - 是否有任何vim插件,它会在每个“def”和“end”附近显示标记(箭头或stmh),就像在TextMate(1)中完成一样?

v def foo
      bar = 1
^ end

另外,由于我在vim / ruby​​方面没有太多经验,或许还有另一种更优雅的方法来检查特定文件中所有的def-end对是否已关闭? (matchit.vim对这种需求不太满意) 我希望有更方便的方法来捕获丢失的“结束”而不是在控制台中读取“语法错误”:)

1 个答案:

答案 0 :(得分:2)

我不确定它是否符合您的需求,但您是否尝试过'foldcolumn'选项?例如,使用:

:set foldcolumn=4

你会得到这样的东西:

-   def foo
|       bar = 1
|   end

-   def foo2
|       bar = 2
|-      if x == 1
||          bar = 3
||      end
|   end

有关详细信息,请参阅:help 'foldcolumn'。请注意,如果您的Vim已启用鼠标,您可以点击-标志来关闭折叠。

修改

如果您不喜欢折叠方法,可以使用标志(假设您的Vim已启用标志)。尝试这样的事情:

command! RubySigns call RubySigns()
" Optional:
au BufReadPost *.rb call RubySigns()
function! RubySigns()
    sign define ruby_end text=^
    sign define ruby_def text=v
    sign unplace *
    g/^\s*\(def\|class\|begin\)\>/exe 'sign place '.line('.').' line='.line('.').' name=ruby_def buffer='.bufnr('%')
    g/^\s*end\>/exe 'sign place '.line('.').' line='.line('.').' name=ruby_end buffer='.bufnr('%')
endfunction

它可能并不完美(我不知道红宝石),但它可能会给你一些开始。