Vim Ruby 多行方法缩进

Vim Ruby multi-line method indentation

我对 vim 设置中的默认换行符有异议。我认为我使用的唯一相关插件是 vim-ruby.

我想要像这样自动缩进的代码:

let(:account) do
  create :account,
    store: build(:live_store,
                 shop_version: build(:shop_version,
                                      name: "Example"
                                     )
                )
end

改为像这样自动缩进:

let(:account) do
  create :account,
    store: build(:live_store,
      shop_version: build(:shop_version,
        name: "Example"
      )
    )
end

这有意义吗?还是我在杂草丛生?我发现默认值非常丑陋,在尝试强制执行 80 个字符行时尤其令人沮丧。

谢谢!

我找到了一个合理的解决方法。如果我在代码中使用散列文字,Vim 将按照我想要的方式自动缩进。例如,像这样输入上面的示例就可以正常工作:

let(:account) do
  create :account,
    store: build(:live_store, {
      shop_version: build(:shop_version, {
        name: "Example"
      })
    })
end

这感觉是一个足够合理的妥协。

vim-ruby 将您的示例缩进如此深的原因是为了支持这种编码风格:

let(:account) do
  create :account,
    store: build(:live_store,
                 shop_version: build(:shop_version,
                                     name: "Example"))
end

很多人喜欢这种 "hanging" 风格,这就是为什么如果您在同一行的第一个参数中使用圆括号,那么 vim-ruby 就是这样缩进的。正如@Amadan 指出的那样,您可以将所有参数放在新行中:

let(:account) do
  create :account,
    store: build(
      :live_store,
      shop_version: build(
        :shop_version,
        name: "Example"
      )
  )
end

或者,我首选的支持缩进样式使用大括号:

let(:account) do
  create :account,
    store: build(:live_store, {
    shop_version: build(:shop_version, {
      name: "Example"
    })
  })
end

有很多不同的缩进首选项组合,我们在支持多少可变性方面受到限制(我是一名维护者)——代码陈旧且充满边缘案例。恐怕这三种风格基本上就是它了,我希望你能调整你的编码风格来达成折衷。可能在未来的某个时候我会坐下来尝试一些彻底的改变,但这是一个很难找到时间和精力的项目。