Emacs 24 ruby-mode坚持使用以下方式缩进表达式:
before1 = if params[:before]
Time.zone.at(params[:before].to_i)
end
我发现这是完全错误的。预期的行为应该是:
before1 = if params[:before]
Time.zone.at(params[:before].to_i)
end
那就是 - if块应该相对于if表达式开始的行只缩进一个级别。有没有办法实现这个目标?
答案 0 :(得分:2)
如果你的Emacs足够近(24.4岁以上)且你正在使用SMIE缩进引擎(ruby-use-smie
是非零的),你可以使用ruby-align-to-stmt-keywords
:
(add-to-list 'ruby-align-to-stmt-keywords 'if)
答案 1 :(得分:0)
我猜你实际上是想说Emacs将if
与end
对齐,这在Ruby中实际上非常惯用(以及RuboCop等工具强制执行的风格)。第二个缩进样式适用于带有块的方法类,但不适用于if/unless/case
等表达式。
目前,现在有办法改变这种行为。有计划在未来以ruby模式引入更灵活的缩进方案,但这不会在下一个Emacs版本中发生。
无论如何 - 这不是一个错误,它是一个特征: - )