我正在使用带有 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 的情况下以某种方式做到这一点吗?
一句话:没有。
gofmt
从设计上讲,是固执己见且不可配置的。Go 对此毫无歉意。来自Go Proverbs:
如果可以配置gofmt
为执行此操作或其他任何操作,它将立即失去其大部分价值,即它一劳永逸地解决了所有愚蠢的格式化参数。
学会爱这个。正如链接的视频剪辑所解释的,绝大多数有经验的 Go 程序员都喜欢 Go。我希望你也能及时。
作为旁注,在您的特定示例中, gofmt 选择这种格式是有充分理由的:单行 if 语句的可读性要差得多。通过将操作放在单独的行上,任何读者都可以立即清楚代码的作用。考虑以下两种选择:
if foo && (bar > baz) || quxx { return foo && bar }
对比
if foo && (bar > baz) || quxx {
return foo && bar
}
解析第一个例子的认知负荷远大于第二个例子。即使在一个非常简化的示例中,例如if x { return }
,拆分行也没有任何害处,并且可以说,由于更高的一致性,它仍然提高了可读性。