go - 有没有办法在不完全禁用 gofmt 的情况下防止 gofmt 将代码函数转换为多行?

标签 go vim gofmt

我正在使用带有 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's style is no one's favorite, yet gofmt is everyone's favorite.



如果可以配置 gofmt要做到这一点或其他任何事情,它将立即失去其大部分值(value),即它一劳永逸地解决了所有愚蠢的格式化参数。

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

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

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

对比

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

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

关于go - 有没有办法在不完全禁用 gofmt 的情况下防止 gofmt 将代码函数转换为多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58658231/

相关文章:

go - 扫描查询 2 个参数

go - 在 Golang 中为类型定义字符串输出

go - 是我的 gofmt 工作错误还是我不明白什么?

go generate with gofmt,替换变量值

go - mgo 中的模型关系

go - Golang 是否需要在与服务器相同的端口上监听和服务?

vim - 缩进时 TypeScript 文件被视为 xml

vim - 将多行字符串粘贴到光标位置的GVIM中

python - 对 Vim 有用的 Python 命令列表?

vim - 在 vim ide 中禁用 vim-plug 中的 gofmt