在Visual Studio Code中自动格式化C#代码

12

我已在我的 Visual Studio Code 编辑器中启用了最新的 C# 扩展。不再通过保存文件或应用快捷键组合 Ctrl + K, Ctrl + FAlt + Shift + F 对代码进行格式化,而是需要在按下 Enter 键时对当前行的代码进行格式化。这一功能在 Visual Studio 中已经可用,但不是 Visual Studio Code 的默认功能。

以下是我需要实现的示例代码输出:

输入图像说明


如果你的项目有 DBContext(通常至少是中等规模的项目),那么相对于 VS Community,VSCode 是更适合你的工具吗? - Brad
1
@Brad 这只是一个示例代码。如果我尝试任何简单的C#代码,我需要在VSCode编辑器中手动格式化代码。例如,在类中添加新属性-> public string property {get; set;} 如果我按Enter键或分号,则不会像在Visual Studio中那样自动格式化。 - Joseph Jojo John
1
[Ctrl+K Ctrl+F]Alt+Shift+F 有用吗? - Brad
1
@Brad 是的,它起作用了。但是它没有像我们在Visual Studio中使用的即时代码格式化功能。在那里,我不需要手动担心任何代码格式化。 - Joseph Jojo John
有人知道为什么这是个问题吗?说实话,这是我不喜欢VSCode的唯一原因。当整天编写代码时,我在完整的VS中更加高效。这只是一个简单的事情。 - Luke Puplett
5个回答

22

我找到了一个选项,可以在打字时更轻松地格式化代码。

我在工作区设置中应用了以下设置:

{
      "editor.formatOnSave": true,
      "editor.formatOnType": true
}

这对我来说很好用。


你的问题并不完全符合你所寻找的解决方案。你提到按下“回车键”时需要更改缩进,这就是为什么所有人都试图帮助你配置键盘设置。 - errakeshpd
1
@errakeshpd,你是正确的。但是我在那里提到了我需要类似于Visual Studio的功能,即能够编辑当前行的代码而不需要应用任何快捷键或组合键。 - Joseph Jojo John
1
这正是我需要的,谢谢。我一直想知道为什么即使在UI中设置了自动格式化,VS Code也不能自动格式化东西。 - CvRChameleon

14

打开菜单,选择 文件首选项设置

搜索 格式

选择您想要的选项:

  • 粘贴时格式化

  • 保存时格式化

  • 输入时格式化

关闭设置窗口。

请输入图片描述

你也可以在你的 settings.json 文件中看到它:

请输入图片描述


正是我正在寻找的。在我看来,应该默认开启。 - RoboYak

8

转到菜单 文件首选项键盘快捷方式 (Ctrl + K, Ctrl + S)

点击 keybindings.json 链接:

Enter image description here

输入以下绑定到Enter键。此绑定将覆盖当前用户的默认设置。

{
  "key": "enter",
  "command": "editor.action.formatDocument",
  "when": "editorHasSelection"
}

另一种替代方案是使用宏扩展——Visual Studio Code的自定义宏支持,这样您就可以在一个键绑定中执行多个命令。

将宏添加到用户设置中:

"macros": {
    "formatWithEnter": [
        "editor.action.insertLineAfter",
        "editor.action.formatDocument"
    ]
}

并将以下按键绑定添加到keybindings.json中:

{
    "key": "enter",
    "command": "macros.formatWithEnter"
}

1
感谢您的回答。这个选项可以格式化代码,但会产生新问题。现在我无法在按Enter键时选择代码智能。 另一个新问题是,如果我有打开和关闭括号 {},并且在第一个 {之后按Enter键,它不像以前那样工作。我需要使用Shift + Enter来完成此操作。您能提供任何替代方法吗? - Joseph Jojo John
检查更新的答案将在仅选择文本时执行格式,但您仍会覆盖非常常见的“enter”键功能。 - ElasticCode
这比之前的选项要好得多。但仍然喜欢像在Visual Studio中显式应用快捷方式而不是格式化。 - Joseph Jojo John
这并不完全满足我的需求,但似乎比 VS Code 中的默认选项要好。因此,我将其作为正确答案。 - Joseph Jojo John
谢谢,还请查看我的回答中的替代解决方案。 - ElasticCode

3

Visual Studio默认提供代码格式化工具,使用方法如下:

  • 在Windows上:按下Shift + Alt + F
  • 在Mac上:按下Shift + Option + F

如果你想在按下Enter键时也进行格式化,需要设置工作区首选项并配置按键绑定:

{ "key": "enter", "command": "editor.action.format" }

现在,如果没有选择任何内容,它会格式化整个文档;否则,它会格式化所选内容。

另外还有beautify.onSave和editor.formatOnSave选项,请尝试使用它们使代码更加美观。


@errakseshpd 谢谢您的评论。但是在设置了这些选项之后,我遇到了一些奇怪的行为。请查看我对其他答案的评论。我认为目前没有更好的解决方案可用。 - Joseph Jojo John
Visual Studio 或者 Visual Studio Code - Peter Mortensen

-2

编辑:这并不起作用,因为它会抑制常规的Enter键行为。

为了让我能够使用这个,我不得不安装两个扩展程序

如果没有第二个扩展程序,我就会收到错误消息visual studio code there is no formatter for 'csharp'-files installed

我还确保我的Visual Studio Code是最新的(菜单* → 帮助重新启动和更新检查更新

然后我添加了一个自定义按键绑定。菜单 文件首选项键盘快捷方式"要进行高级自定义,请打开并编辑keybindings.json"

[{
    "key": "enter",
    "command": "editor.action.formatDocument",
    "when": "editorTextFocus"
}
]

我不得不输入单词enter,因为捕获按键的对话框无法识别它。


这个选项可以格式化代码,但会带来新问题。现在我在按回车键时无法选择代码智能提示。 另一个新问题是,如果我有开放和关闭大括号 {} 并且在第一个 { 后按回车键,它不像以前那样工作。我需要使用 Shift+Enter 来完成此操作。您能提供任何替代方法吗? - Joseph Jojo John
是的,我认为你是对的。这确实可以进行格式化,但它会抑制“Enter”键。显然,你需要两者兼备。 - Brad
@JosephJojoJohn 你可能需要使用宏来完成这个操作,因为它可能需要运行多个命令(格式和回车键)。 - Brad
很抱歉,我不能回答这个问题。 - Brad
检查 Wael 的解决方案。他使用了一些缩写来实现这个。 - Joseph Jojo John
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接