2

我想格式化文档:给它缩进之类的东西。

Ctrl KVisual Studio 中的+Ctrl D/F不适用于 F#,有人对此有任何解决方法吗?它确实适用于 C#...

编辑:我想做的是从外部源复制粘贴一些代码。我通常使用Ctrl K+Ctrl D来格式化它,它适用于 C#。但是,在 .fs 文件中,它似乎不起作用。最重要的是,缩进似乎几乎是 F# 的必备项......

4

2 回答 2

7

F# 对缩进敏感,因此如果您将有效代码从一个位置复制到另一个位置,您可能需要做的唯一一件事就是确保它与左侧有正确的偏移量。例如,假设您有:

let test () = 
  printfn "Hello world" // (*)

let another () = 
  for i in 0 .. 10 do
    test()              // (#)
  printfn "finished"

现在,如果您想复制该行(*)并使用它而不是调用test,只需复制和粘贴即可将您的代码转换为以下内容:

let another () = 
  for i in 0 .. 10 do
  printfn "Hello world" // (*)
  printfn "finished"

但这有不同的含义!它重复这两条printfn线10次。所以,相反,你想要得到的是:

let another () = 
  for i in 0 .. 10 do
    printfn "Hello world" // (*)
  printfn "finished"

在 Visual Studio 中进行复制和粘贴以保持代码含义相同的方法是像往常一样粘贴复制的代码 ( Ctrl+ V),然后在代码仍处于选中状态时更正缩进。进一步使用缩进代码Tab并减少缩进使用Shift+ Tab

这样,您就可以很好地对 F# 代码使用复制和粘贴。您不需要重新格式化整个块,因为复制到另一个地方的有效 F# 代码将自动格式化。你只需要修复缩进。

关于#light注释中提到的模式 - 在 F# 的早期版本中,可以使用额外的关键字和分号来代替缩进敏感模式。现代缩进敏感样式被称为#light,但它现在是默认的,您无需担心旧样式。

于 2012-09-06T20:35:48.653 回答
1

似乎唯一的答案是使用其中之一:

https://github.com/dungpa/fantomas

http://visualstudiogallery.msdn.microsoft.com/24ef5c87-b4e3-4c3b-b126-1064cc66e148

https://github.com/tpetricek/FSharp.Formatting

处理空格等

于 2014-01-22T14:54:42.997 回答