如何在VSCode中自动缩进switch-case语句?

4

使用switch-case语句时,让人有些沮丧的是,虽然vscode会自动完成很多工作,但在冒号后并不会自动缩进。以下是我在不进行任何干预的情况下所得到的结果:

int x = 32;
switch (x){
    case 33:
    break;
    case 32:
    break;
    default:
}

这是我希望看到的内容

int x = 32;
switch (x){
    case 33:
        break;
    case 32:
        break;
    default:
}

1
如果Visual Studio在您输入代码时未按您想要的方式进行缩进,则这是VS的默认缩进。 - machine_1
2
个人而言,我会将 case 标签与 switch 和闭合括号对齐。你知道,因地制宜嘛。 - Bathsheba
1个回答

5

可定制格式规则的Clang Format

对于任何需要C++格式化的需求,我建议使用Clang Format,它可以与VS Code毫无缝隙地集成。

在您的示例中,您可以使用IndentCaseLabels样式选项:

IndentCaseLabels (bool)

Indent case labels one level from the switch statement.

When false, use the same indentation level as for the switch statement. Switch statement body is always indented one level more than case labels (except the first block following the case label, which itself indents the code - unless IndentCaseBlocks is enabled).

false:                                 true:
switch (fool) {                vs.     switch (fool) {
case 1:                                  case 1:
  bar();                                   bar();
  break;                                   break;
default:                                 default:
  plop();                                  plop();
}                                      }

应用到你的例子中:

//  IndentCaseLabels: true
int x = 32;
switch (x) {
  case 33:
    void();
    break;
  case 32:
    break;
  default:
}

//  IndentCaseLabels: false
int x = 32;
switch (x) {
case 33:
  void();
  break;
case 32:
  break;
default:
}

将Clang格式集成到VS Code中

引用自VS Code文档中的在Visual Studio Code中编辑C++ [重点 是我的]:

[...]

代码格式化

Visual Studio Code的C/C++扩展支持使用已包含在扩展中的clang-format对源代码进行格式化。

您可以使用“格式化文档”(Ctrl + Shift + I) 对整个文件进行格式化,或使用右键菜单中的“格式化选择内容”(Ctrl + K Ctrl + F) 对当前选择的内容进行格式化。您还可以通过以下设置配置自动格式化:

  • editor.formatOnSave - 保存文件时进行格式化
  • editor.formatOnType - 在键入时进行格式化(触发字符为 ;)。

默认情况下,clang-format样式设置为“file”,这意味着它会查找工作区中的.clang-format文件。如果找到了.clang-format文件,则根据文件中指定的设置应用格式化。如果在您的工作区中没有找到.clang-format文件,则根据C_Cpp.clang_format_fallbackStyle设置中指定的默认样式应用格式化。目前,默认格式化样式为“Visual Studio”,这是Visual Studio中默认代码格式化程序的近似值。

[...]


1
这是一个不错的起点,但我需要关于如何集成它的具体指令。没有任何来源提供明确的建议。从我的理解来看,我需要安装 https://marketplace.visualstudio.com/items?itemName=xaver.clang-format 然后在工作区的根目录中创建一个名为 .clang-format 的文件,并在其中添加 IndentCaseLabels: true,但这并不起作用。 - Managor
1
在尝试自定义.clang-format文件之前,请确保已调用clang-format(例如,在保存时)。有关详细信息,请参见Clang Format文档。我自己使用Emacs,但是我认为上面链接的集成说明非常清晰(假设您已经阅读了一些有关Clang Format本身的资料),我知道我自己曾经使用它们(几个月前)来帮助一个使用VS Code的同事设置Clang Format。 - dfrib
1
啊,editor.formatOnType 需要在 vscode 的设置中进行设置。 - Managor

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