この種のインデントを取得するためにできることは、関数のどの領域が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関数の範囲内で検索してから、返されるインデントをもう1つ&shiftwidth(または&sw)増やします。動作するかどうかを確認し、動作しない場合は、元に戻してから、return実際に見つかるまで次のに進みます。
フォークすることも、ファイルをにvim-rubyコピーして必要に応じて変更することもできます。バンドルされているものよりも優先する必要があります。indent/ruby.vim~/.vim/indent/ruby.vimindent/ruby.vim
あなたが完全に目立たない解決策を探しているなら、それは難しいでしょう。GetRubyIndent理論的には、を使用して関数を圧子としてオーバーライドし、関数をsetlocal indentexpr=CustomGetRubyIndent(v:lnum)定義できます。この関数はCustomGetRubyIndent、特定の場合にのみ動作を実装し、に委任しGetRubyIndentます。そこまで行くことはお勧めしませんが、かなり厄介になる可能性があります。