我正在使用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/