要获得这种缩进,您可以做的是找出GetRubyIndent
函数的哪些区域与这些延续相关并增加返回值。对于您给出的示例,这似乎可以完成工作:
diff --git a/indent/ruby.vim b/indent/ruby.vim
index 05c1e85..6f51cf2 100644
--- a/indent/ruby.vim
+++ b/indent/ruby.vim
@@ -368,7 +368,7 @@ function GetRubyIndent(...)
" If the previous line ended with a block opening, add a level of indent.
if s:Match(lnum, s:block_regex)
- return indent(s:GetMSL(lnum)) + &sw
+ return indent(s:GetMSL(lnum)) + &sw * 2
endif
" If the previous line ended with the "*" of a splat, add a level of indent
@@ -383,7 +383,7 @@ function GetRubyIndent(...)
if open.pos != -1
if open.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
if col('.') + 1 == col('$')
- return ind + &sw
+ return ind + &sw * 2
else
return virtcol('.')
endif
我不完全确定这是否不会破坏其他任何东西,但这对我来说似乎是一个安全的改变。如果您发现不按您想要的方式缩进的情况,您可以通过困难的方式修复它:return
在函数的限制内搜索,然后增加一个&shiftwidth
(或&sw
)返回的缩进。检查它是否有效,如果无效,请撤消然后继续下一个return
,直到您真正找到它。
您可以 fork vim-ruby
,或者您可以将indent/ruby.vim
文件复制到~/.vim/indent/ruby.vim
并根据需要进行更改。它应该优先于捆绑的indent/ruby.vim
.
如果您正在寻找一个完全不引人注目的解决方案,那将是困难的。从理论上讲,您可以通过使用将函数覆盖GetRubyIndent
为缩进器setlocal indentexpr=CustomGetRubyIndent(v:lnum)
,然后定义一个CustomGetRubyIndent
函数,该函数仅在特定情况下实现您的行为并委托给GetRubyIndent
. 不过,我不建议走那么远,它可能会变得相当混乱。