我正在使用Vim版本8.1.1401和go版本go1.13.1 linux / amd64。我试图禁止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来执行此操作或执行其他操作,则它将立即失去其大部分值,即它将一劳永逸地解决所有愚蠢的格式化参数。

学会爱这个。正如链接的视频片段所述,绝大多数有经验的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/

10-12 22:20