我正试图让vim以这种方式从新行开始缩进延续行:
def foo
open_paren_at_EOL(
100, 200)
a = {
:foo => 1,
}
end
这些行的Vim 7.3默认缩进[1]如下所示:
def foo
open_paren_at_EOL(
100, 200)
a = {
:foo => 1,
}
end
我尝试了多个cino =值,我甚至试过调整[2]中的.vim脚本,但没有成功。
我的.vimrc就在这里:
https://github.com/slnc/dotfiles/blob/master/.vimrc
谢谢!
答案 0 :(得分:0)
要做出这种缩进,你可以做的是找出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
。我不建议走那么远,但它可能会变得相当混乱。