【问题标题】:Auto format C# code In Visual Studio Code在 Visual Studio Code 中自动格式化 C# 代码
【发布时间】:2018-09-05 03:03:36
【问题描述】:

我在我的 Visual Studio Code 编辑器中启用了最新的 C# 扩展。而不是在保存时格式化代码或通过应用组合键 Ctrl + KCtrl + F 或 Alt + Shift + F,我需要在按下 Enter 键的同时格式化当前代码行。此功能已在 Visual Studio 中可用,但默认情况下在 Visual Studio Code 中没有。

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

【问题讨论】:

  • 如果你的项目有DBContext(通常至少是一个中等规模的项目)是VSCode,而不是VS Community,适合你吗?
  • @Brad 这只是一个示例代码。如果我尝试任何简单的 c# 代码,我需要在 VSCode 编辑器中手动格式化代码。例如,在类中添加新属性 -> public string property{get;set;} Here 如果我按 Enter Key 或分号,它将不会像在 Visual Studio 中那样自动格式化。
  • [Ctrl+K Ctrl+F]Alt+Shift+F 是否有效?
  • @Brad 是的,它有效。但是没有我们在 Visual Studio 中使用的移动代码格式。在那里我不需要手动担心任何代码格式。
  • 有谁知道为什么会出现这样的问题?老实说,这是我不喜欢 VSCode 的唯一原因。整天剪切代码时,我在完整的 VS 中的工作效率要高得多。这很简单。

标签: c# visual-studio-code


【解决方案1】:

转到菜单文件首选项设置

搜索格式

选择您想要的选项:

  • 粘贴时格式化

  • 保存时格式化

  • 类型格式

关闭设置窗口。

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

【讨论】:

  • Egg-zactly 我在找什么。 imo 应该默认开启。
【解决方案2】:

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

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

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

这对我来说很好。

【讨论】:

  • 您的问题与您寻找的解决方案不完全匹配。您在按下“回车键”时提到必须更改缩进,这就是为什么所有人都试图帮助您配置键配置。
  • @errakeshpd 你是对的。但我在那里提到,因为我需要与 Visual Studio 中类似的功能,即能够在不应用任何快捷方式或组合键的情况下编辑当前代码行。
  • 这是我需要的,谢谢。一直想知道为什么 VS Code 不能自动格式化,即使 UI 中的设置声称它们是。
【解决方案3】:

Visual Studio 上可用的代码格式化程序默认为

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

如果您希望在按 Enter 时再次执行此操作,则需要设置工作区首选项,然后配置键绑定:

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

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

还有 beautify.onSave、editor.formatOnSave 选项。请也尝试这样做以使代码更漂亮。

【讨论】:

  • @errakseshpd 感谢您的评论。但是在设置了这些选项之后,我得到了一些奇怪的行为。请通过我的 cmets 了解其他答案。我认为目前没有更好的解决方案。
【解决方案4】:

编辑:这实际上不起作用,因为这将抑制常规 Enter 键行为

要让它为我工作我必须安装两个扩展程序

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

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

然后我添加了一个自定义键绑定。菜单 FilePreferencesKeyboard Shortcuts“对于高级自定义打开和编辑 keybindings.json”: p>

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

我必须输入单词enter,因为捕获密钥的对话框不承认它。

【讨论】:

  • 此选项会格式化代码,但会产生新问题。现在我无法在按下回车键时选择代码智能。另一个新问题是如果我有左大括号 {} 并且我在第一个 { 之后按回车,它就不能像以前那样工作了。我需要使用 Shift+Enter 来执行此操作。你能提供任何替代方法吗?
  • 是的,我认为你是对的。这会进行格式化,但会抑制 Enter 键。你显然需要它来做这两件事。
  • @JosephJojoJohn 您可能需要一个宏来执行此操作,因为这可能意味着运行多个命令(格式然后还有回车键)。
  • 你是对的。但我想知道为什么这个选项在 VS Code 中默认不可用。我认为大多数开发人员都需要这个选项。
  • 那个,很抱歉,我无法回答
【解决方案5】:

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

点击keybindings.json链接:

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

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

另一种替代解决方案是使用 macros extension - Visual Studio Code 的自定义宏支持,因此您可以在一个键绑定中执行多个命令。

User Settings添加宏:

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

以下键绑定到keybindings.json

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

【讨论】:

  • 感谢您的回答。此选项会格式化代码,但会产生新问题。现在我无法在按下回车键时选择代码智能。另一个新问题是如果我有左大括号 {} 并且我在第一个 { 之后按回车,它就不能像以前那样工作了。我需要使用 Shift+Enter 来执行此操作。你能提供任何替代方法吗?
  • 检查更新的答案将在仅选择文本时执行格式,但是,您仍然覆盖了非常常用的键 enter 的功能。
  • 这比上一个选项要好得多。但仍然喜欢显式应用快捷方式,而不是像在 Visual Studio 中那样格式化。
  • 这并不能完全满足我的要求,但似乎比 VS Code 中的默认选项更好。所以我把它作为正确的答案。
  • 谢谢,同时检查我的答案的替代解决方案。
猜你喜欢
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 2017-08-13
  • 2021-03-02
  • 2011-08-10
  • 2018-02-26
相关资源
最近更新 更多