clang 格式文件无法在 Visual Studio 代码中工作

问题描述 投票:0回答:5

我已将

.clang-format
文件放入我的工作区中。但该格式并未应用于我的代码。我已经检查了设置,后备样式设置为 None,文件设置为
clang_format_style

好消息是后备样式不再起作用。这意味着当我尝试设置文档或选择的格式时,什么也没有发生。

这就是我制作自定义格式的方法:

visualstudio.com:在 Visual Studio Code 中编辑 C++

但是缺少一些东西并且格式化没有发生。这就是我工作区中的

.clang-format
的样子:

{ 
UseTab: 14, 
IndentWidth: 4,
 BreakBeforeBraces: BS_Attach,
 AllowShortIfStatementsOnASingleLine: false,
 IndentCaseLabels: false,
 ColumnLimit: 0 
}
visual-studio-code clang-format
5个回答
13
投票

我刚刚遇到了这个问题,但这似乎是 VS Code 中的一个小错误。在我的设置中,我打开了

Editor: Format On Save
,将
C_Cpp: Clang_format_style
设置为
file
,并将
C_Cpp: Formatting
设置为
Default
(这被称为 clang-format)。但保存时什么也没发生。

为了“修复”它,我通过选择一些代码并单击

Format Selection
来强制触发格式,然后出现一个对话框,抱怨有多个可用的格式化程序,我必须从命令面板中选择一个。看起来内置的 MS Intellisense 和 clang-format 正在争夺主导地位 - 尽管 clang-format 在设置中被列为默认格式!在这里选择 clang-format 后,一切又好了。


1
投票

仅供参考,如果其他人遇到此问题,我也遇到过此问题,但由于不同的原因。我向 .clang-format 文件添加了一个较新的选项,但我在系统上安装的 clang-format 版本不支持该选项。最终它默默地失败了,症状是文件没有被格式化。

因此,请确保您知道您正在使用哪种 clang-format、完整路径,并使用它手动格式化您的一个文件,以查看是否抛出任何错误消息。


1
投票

TL;DR - 如果 .clang-format 的编码是 UTF-16,请转换或生成 UTF-8 来解决问题。

我希望这对某些人有帮助。

我通常通过使用格式化程序转储样式配置来生成 .clang-format 文件,然后编辑我需要的选项。 IE。

clang-format.exe --style=Microsoft --dump-config > .clang-format

尝试格式化时,我不断出现格式化失败 - 请参阅输出窗口。输出窗口没有显示任何有用的内容。在命令行上输入这个似乎只是想从标准输入获取输入。

事实证明,Windows 版本的 clang-format.exe 在转储配置时会重定向到一个文件,Windows 会尽职尽责地将其保存为 UTF-16。

Windows 中的某个位置可能有一些设置要以 UTF-8 保存,但我通过使用 Linux 版本的 clang-format 生成文件,然后复制到 Windows 中我需要它的位置来修复此问题。


0
投票

由于某种原因,格式中出现以下选项

粘贴时设置格式

保存时格式化

保存模式下的格式:文件

必须检查。现在效果很好。另请查看应用程序创建的 settings.json 文件。仔细检查您的设置,然后重试。


0
投票

天啊!这太令人沮丧了。但以一个周六早上为代价,我相信我理解了根本原因(正如 Henrique Bucher 在另一个答案中所暗示的那样,谢谢 Henrique!)。

VS Code 调用 clang-format 的方式具有“优雅”的故障转移:如果您的 .clang-format 包含无法识别的设置,那么它会回退到“完全不同”的配置。但它默默地这样做! 那么会发生什么:

您的项目具有功能完美的 .clang 格式,您正在愉快地一起编码。
  1. 您向 .clang-format 添加了实际上无效的新内容(可能是因为它是 Github Copilot 的幻觉)。
  2. 因此,clang-format 现在会在您的自定义文件中默默失败,而是退回到完全不同的配置(可能是
  3. BasedOnStyle: Visual Studio
  4. 或其他配置)。但没有迹象表明这种情况正在发生。
    根据您的设置与后备的接近程度,您当时可能不会注意到这一点,特别是如果您仅更改/格式化极少量的行。
  5. 然后,当您尝试进行其他更改或调试为什么格式突然不起作用时,您会浪费生命中的几个小时。
  6. 这对于重现来说很简单,只需打开 .clang-format 并在文件顶部添加一些乱码“asdf”,然后(在 VS Code 中)
  7. format
  8. 各种代码块,格式就会发生巨大变化。
    
    
  9. 请注意,通过命令行调用,clang-format 不能以这种方式工作。它立即失败并且失败。

因此,如果您尝试调试为什么您的 .clang-format 显然不适用于 VS Code(尤其是以前适用的情况),请务必跳到终端并尝试手动调用。

副驾驶给予,副驾驶拿走:-(

© www.soinside.com 2019 - 2024. All rights reserved.