通过仔细检查the documentation,我了解到Emacs haskell-mode
附带了三种不同的,相互排斥的自动缩进方法。它们被称为haskell-indentation
,haskell-indent
和haskell-simple-indent
。谁能解释这些方法是如何相似的以及它们是如何不同的?我不仅对个别功能感兴趣,而且如果一个是事实上的标准,或者如果一个或两个不再维护,我感兴趣。
答案 0 :(得分:19)
实际上,据我所知,人们没有事实上的标准,人们对自己喜欢的内容有强烈的意见,除了“在大多数情况下它对我有用”之外几乎没有具体的证据。
haskell-indentation
包和haskell-indent
包是最受欢迎的:
每个人都会在不同的情况下做正确的事情,但同样,没有单元测试,没有真正的解析器等等,只是作者碰巧想到的一堆特殊情况,所以文档和理解关于他们在严格意义上的表现如何是稀疏的。 haskell-indentation
比haskell-indent
更了解Haskell,但很多人会告诉你,包括我在内,你花了很多时间骑自行车缩进以找到正确的。
haskell-simple-indent
包不知道Haskell,它只知道列对齐,它没有制表符循环,它有缩进和去缩进。这是我使用的版本,因为前面的模式中有上述边缘情况,有时可能会分散注意力。
我认为,对于这些图书馆来说,除了传闻之外,很难描述他们之间的差异。我会欢迎一些严格的比较(虽然花时间编写更好的模式可能会更好)。
simple-indent
由我维护。我不知道其他人的作者是否对维护感兴趣。
答案 1 :(得分:2)
我相信你提到的3种模式对应于this article中描述的3种haskell模式,即;
haskell-indentation
== Tab Cycling haskell-indent
==矩形区域haskell-simple-indent
==对齐代码然而,由于我不是百分百肯定,所以当我回到家时,我会留意更多。
答案 2 :(得分:0)
haskell-indentation
和haskell-indent
具有误导性相似之处,两者都通过重复输入TAB提供循环提示,这是他们的主要特征IMO。
然而haskell-indent
绝对是我最喜欢的,主要是因为它会提出一些非常有用的完成:
我最近刚刚切换环境,不得不重新设置emacs,并且错误地使用了haskell-indentation
,而男孩我错过了这些。 OTOH,你可能会发现其中一些完成令人讨厌;在某些情况下他们不会做什么工作:如果你的功能以下划线开头,或者(如果你是鸟类跟踪)。