この種のインデントを取得するためにできることは、関数のどの領域が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.vim
indent/ruby.vim
あなたが完全に目立たない解決策を探しているなら、それは難しいでしょう。GetRubyIndent
理論的には、を使用して関数を圧子としてオーバーライドし、関数をsetlocal indentexpr=CustomGetRubyIndent(v:lnum)
定義できます。この関数はCustomGetRubyIndent
、特定の場合にのみ動作を実装し、に委任しGetRubyIndent
ます。そこまで行くことはお勧めしませんが、かなり厄介になる可能性があります。