如果表达式缩进,则使用Emacs ruby​​模式

时间:2013-07-22 11:35:58

标签: ruby emacs indentation ruby-mode

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表达式开始的行只缩进一个级别。有没有办法实现这个目标?

2 个答案:

答案 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将ifend对齐,这在Ruby中实际上非常惯用(以及RuboCop等工具强制执行的风格)。第二个缩进样式适用于带有块的方法类,但不适用于if/unless/case等表达式。

目前,现在有办法改变这种行为。有计划在未来以ruby模式引入更灵活的缩进方案,但这不会在下一个Emacs版本中发生。

无论如何 - 这不是一个错误,它是一个特征: - )