如何为F#制作VS2008自动插入缩进?

时间:2010-11-20 22:30:54

标签: f#

就像我的头衔一样。我希望我的VS能像VBNET一样自动缩进。请帮忙。

3 个答案:

答案 0 :(得分:2)

据我所知,F#语言集成不支持此功能。

此外,自动格式化在F#中不如在Visual Basic中有用。在VB中,格式化并不重要(因此您可以使用疯狂的缩进编写代码,格式化程序可以修复它)。在F#中,indenation(部分)确定代码的含义,因此您需要正确编写缩进代码(尽管我同意自动格式化可以使代码更加一致)。

原则上应该可以使用F#的开源版本将此功能实现为Visual Studio插件。 Brian有一个类似的插件添加colors for nested expressions,因此可以作为灵感来使用,但肯定不是我可以在答案框中写的东西: - )。

答案 1 :(得分:1)

可悲的是,F#从Haskell等语言继承的缩进敏感语法使得无法自动缩进。这实际上是我对F#语言唯一的主要抱怨,因为除了不可能实现像自动压缩器这样的专业工具之外,它还会在没有正确缩进的情况下使程序变得脆弱,这意味着空白的意外更改会无声地破坏程序并且剪切和粘贴(例如来自博客)容易破坏或破坏程序。如果你给它提供OCaml代码,F#几乎总是搞砸了,部分原因是因为它无法处理标签。

该死的哭泣是因为OCaml已经通过提供简洁明确的语法和强大的工具来实现这一目标。例如,您可以通过在Emacs中按ALT + Q来自动添加任何定义。这使得操作OCaml代码变得更加容易,并且可以节省大量时间。我经常发现自己正在搜索F#代码试图手动重新编写它,必须详细阅读代码并理解算法只是为了缩进它是非常令人沮丧的。多次这样做之后,我也可以非常自信地说明#light语法的冗长节省是微不足道的。事实上,在实践中,F#几乎总是比OCaml更冗长。

答案 2 :(得分:-1)

我更喜欢在这个问题上泼冷水。原则上,不可能为空格重要的语言提供自动格式化程序。

(实际上,您可以向编辑器添加一些小细节,例如,如果您键入一行以if开头并以匹配的then结尾并按回车键,则编辑器可以变得聪明并且还插入下一个缩进,这样你就不必按Tab键。但这与自动格式化相差甚远,我认为这样做甚至是错误的。甚至尝试。)