0

我正在使用带有 go 版本 go1.13.1 linux/amd64 的 Vim 版本 8.1.1401。我试图禁止 gofmt 将所有 if 语句括号放在新行上,例如:

if thing { return }

被转换为

if thing {
   return
}

我发现禁用此功能的唯一方法是设置:

let g:go_fmt_autosave = 0

但是,这完全禁用了 gofmt。我可以在完全禁用 gofmt 的情况下以某种方式做到这一点吗?

4

1 回答 1

1

一句话:没有

gofmt从设计上讲,是固执己见且不可配置的。Go 对此毫无歉意。来自Go Proverbs

Gofmt 的风格没有人喜欢,但 gofmt 却是每个人的最爱。

如果可以配置gofmt为执行此操作或其他任何操作,它将立即失去其大部分价值,即它一劳永逸地解决了所有愚蠢的格式化参数。

学会爱这个。正如链接的视频剪辑所解释的,绝大多数有经验的 Go 程序员都喜欢 Go。我希望你也能及时。


作为旁注,在您的特定示例中, gofmt 选择这种格式是有充分理由的:单行 if 语句的可读性要差得多。通过将操作放在单独的行上,任何读者都可以立即清楚代码的作用。考虑以下两种选择:

if foo && (bar > baz) || quxx { return foo && bar }

对比

if foo && (bar > baz) || quxx {
    return foo && bar
}

解析第一个例子的认知负荷远大于第二个例子。即使在一个非常简化的示例中,例如if x { return },拆分行也没有任何害处,并且可以说,由于更高的一致性,它仍然提高了可读性。

于 2019-11-01T14:50:09.817 回答