clang-format -style=file 在 Ubuntu 18.04 中不起作用

clang-format -style=file not working in Ubuntu 18.04

我在 Ubuntu 18.04 上使用 clang-format 9.

我已阅读 clang-format 文档,其中写道:

clang-format supports two ways to provide custom style options: directly specify style configuration in the -style= command line option or use -style=file and put style configuration in the .clang-format or _clang-format file in the project directory.

When using -style=file, clang-format for each input file will try to find the .clang-format file located in the closest parent directory of the input file. When the standard input is used, the search is started from the current directory.

无论我如何创建 .clang_format 文件(我已经尝试使用 clang-format -style=google -dump-config > .clang_format)或我将它放在哪里,如果我执行 clang-format -style=file <file> 它不会格式化任何东西。

有人遇到同样的问题吗?

例如,如果我有一个文件 hello.cpp:

#include <stdio>

std::string s=" VERY BAD"
"FORMATTING";

int   main()   {
  std::cout<< "Hello world!"<<'\n';
  return 0;


}

如果我运行:

$ clang-format -style=mozilla -dump-config > .clang_format

即使我不编辑 .clang_format 文件,

$ clang-format -style=file hello.cpp

我得到了默认的 LLVM 格式化样式,而不是 Mozilla 样式:

#include <stdio>

std::string s = " VERY BAD"
                "FORMATTING";

int main() {
  std::cout << "Hello world!" << '\n';
  return 0;
}

但是如果我 运行 $ clang-format -style=mozilla hello.cpp 那么我得到

#include <stdio>

std::string s = " VERY BAD"
                "FORMATTING";

int
main()
{
  std::cout << "Hello world!" << '\n';
  return 0;
}

如果我将之前生成的 .clang_format 移动到 hello.cpp 目录的父目录中,也会发生同样的情况。

我什么都试过了,但似乎我必须坚持使用预配置的样式。

有人遇到同样的问题吗?

我可以从 clang-format 获取某种日志记录吗?

解决方案:

文件名必须是.clang-format,不是.clang_format!

clang-format -i <file> 如果您将 .clang-format 文件放在项目根目录下就足够了。 -i 代表到位。您粘贴的命令应该将格式化文件输出到标准输出。原因是默认情况下 clang-format 不会更改您的文件。起初对于格式化程序来说似乎很奇怪,但在我看来,这是一个很好的安全预防措施。

我正在创建一个名称错误的配置文件。

必须命名为.clang-format,而不是.clang_format