目前,网上能找到的配置教程都是乱教的。他们以C++为语言讲配置,其实clang-format默认就是C++.所以他们在配置时,即是错了。也会以默认C++格式化,也不会提示配置错误。结果他们还不知道他们错在哪?如果让他们配置.CS, .json,估计就不会了。
这里我给个正确的完整配置教程:
- 首先安装中间件。在vscode扩展商店里搜索 clang-format ,安装排名第一个。xaver.clang-format.
- 用eveythings查找一下 clang-format.exe, 发现最新的扩展 c/c++ 里集成了 clang-format。 这是我电脑上搜索到的目录:
“D:\Program Files.vscode\extensions\ms-vscode.cpptools-1.12.4-win32-x64\LLVM\bin\clang-format.exe”.
如果你没找到这个程序,那走第三步。如果有,走第四步。 - 其次还要安装真正的格式化工具clang-format.exe。这个工具集成在工具包 LLVM里,下载地址:
https://github.com/llvm/llvm-project/releases
这里我选择最新的 “LLVM-14.0.6-win64.exe”. 安装后居然有 2G! 在安装目录里找到 clang-format.exe。提取出来一般能用,不能就把附加的DLL一并提出来。其它可以卸载了。 - 把可执行程序的路径添加到 settings.json 文件里。不是工作目录里的,是vscode 的用户目录里。比如我电脑上的目录是:
“C:\Users\tiandyoin\.vscode\User\settings.json” - 在这个配置文件里添加配置如下:
"files.associations": {
"*clang-format*": "yaml",
},
// clang-format 扩展的配置
"clang-format.executable": "D:/Program Files/.vscode/extensions/ms-vscode.cpptools-1.12.4-win32-x64/LLVM/bin/clang-format.exe",
"clang-format.style" : "file:./.Google.cpp.clang-format", // 从指定配置文件读取格式化风格。
// "clang-format.style" : "file", // 从(当前目录->工作目录->path变量)查找默认配置文件(.clang-format)并读取格式化风格。找不到则使用fallbackStyle, 没有fallbackStyle则默认LLVM,C++.
// "clang-format.assumeFilename": ".cs",
//经测试,assumeFilename 该项有两个作用:
//(1)在输出配置文件时,给合本选项,确定输出配置文件的language.
//(2)在读取配置文件时,按后缀名分析取出相应的语言的配置部分来格式化代码。
// 如 ".cs" 表示使用 language:CSharp 的部分来格式化代码。如果找不到 CSharp部分会报错。默认c++。
"clang-format.fallbackStyle": "Google",
"editor.defaultFormatter": "xaver.clang-format",
// "[cpp]": {
// "editor.defaultFormatter": "xaver.clang-format"
// },
// C/C++ 扩展的配置
"C_Cpp.formatting": "Default",
.Google.cpp.clang-format 的代码如下:
---
Language: Cpp
BasedOnStyle: Google
Standard: Auto
ColumnLimit: 80
...
- 生成.clang-format 配置文件的命令是:
D:\Program Files\.vscode\extensions\ms-vscode.cpptools-1.12.4-win32-x64\LLVM\bin> clang-format --style=Google --dump-config > ./.clang-format
// 输出 .json 语言的格式化配置文件
D:\Program Files\.vscode\extensions\ms-vscode.cpptools-1.12.4-win32-x64\LLVM\bin> clang-format --style=Google --dump-config --assume-filename=.json > ./.clang-format
输出格式化后文件的命令是:
clang-format --style=file:${workspaceRoot}/xxx.clang-format --assume-filename=.cpp xxx.cqq > xxx2.cqq
// 要自行替换${workspaceRoot}
这里因为程序不认识 .cqq 文件,使用 --assume-filename=.cpp 表示以C++语言格式化 .cqq 文件。
7. 在代码里按ctrl+shift+F 或
全选代码-鼠标右键-使用…格式化代码-选择"Clang-Format"。
8. 测试一下效果
格式化前:
// #include <stdlib.h>
#include <stdio.h>
#define MACRO1(x) (++(x)) //fgfg
#define MACRO2(x) (MACRO1(x)+100) //efee
#define MACRO3(x) (MACRO2(x)+200)
class cman{
public:
int i;
};
int main(void)
{
int a = 0; // a
int b = 0; //b
//
b = MACRO3(a);// c
printf("%d\n", b);
return 0;
}
格式化后:
// #include <stdlib.h>
#include <stdio.h>
#define MACRO1(x) (++(x)) // fgfg
#define MACRO2(x) (MACRO1(x) + 100) // efee
#define MACRO3(x) (MACRO2(x) + 200)
class cman {
public:
int i;
};
int main(void) {
int a = 0; // a
int b = 0; // b
//
b = MACRO3(a); // c
printf("%d\n", b);
return 0;
}
Ok.本文到此结束。
Tips:
另外有个类似智能提示的扩展:
Clang-Format-Check.
可以自己试试。
第5步是以C++为例子,因为默认是C++,无法测出“配置语言不正确”。下面我换成CSharp的例子。
(1) 安装扩展 mjohns.clang-format. xaver.clang-format 1.9 当前版本没有支持CSharp.
禁用它,避免冲突麻烦。
(2) 安装配置clang-format.exe 同上。
(3) settings.json 里的配置如下:
// clang-format 扩展的配置
"editor.defaultFormatter": "mjohns.clang-format",
// "[cpp]": {
// "editor.defaultFormatter": "mjohns.clang-format",
// },
// "clang-format.executable": "D:/Program Files/.vscode/extensions/ms-vscode.cpptools-1.12.4-win32-x64/LLVM/bin/clang-format.exe",
"clang-format.executable": "D:/Program Files/LLVM/bin/clang-format.exe",
"clang-format.style" : "file:./.Google.cs.clang-format", // 从指定配置文件读取格式化风格。找不到文件会报错。
// "clang-format.style" : "file", // 从(当前目录->工作目录->path变量)查找配置文件并读取格式化风格。找不到则默认LLVM,C++.
//经测试,assumeFilename 有两个作用:
//(1)用于读入配置文件。是在输出配置文件时,给合本选项,确定输出配置文件的language.
//(2)在读取配置文件里时,按后缀名分析取出相应的语言的配置部分来格式化代码。如 ".cs" 表示使用 language:CSharp 的部分来格式化代码。如果找不到 CSharp部分会报错。默认c++。
"clang-format.assumeFilename": ".cs", //在vscode里,即使文件后缀名为.cs,也得指定该项。估计是中间件或exe不够完善。指定了该项,其它后缀名文件统统按csharp语言来格式化。
"clang-format.fallbackStyle": "Google",
"clang-format.language.csharp.enable": true,
// C/C++ 扩展的配置
"csharp.format.enable": true,
"C_Cpp.formatting": "Default",
./.Google.cs.clang-format 代码如下:
---
Language: CSharp
BasedOnStyle: Google
Standard: Auto
ColumnLimit: 50
...
(4) 格式化代码
为是突出assumeFilename的效果,我把要格式的文件名,改成 Command.cqq.
vscode会认为是纯文本
点击它让vscode 认定它是CSharp. 这样才能使用格式化命令。
这里把列数限制了
ColumnLimit: 50
按 ctrl+a, ctrl+k,ctrl+f 执行一下试试
得到效果图如下:
成功按50列换行。
如果有什么不明白的地方,请留言讨论。