• 使用 vscode 配置安装 clang-format


    目前,网上能找到的配置教程都是乱教的。他们以C++为语言讲配置,其实clang-format默认就是C++.所以他们在配置时,即是错了。也会以默认C++格式化,也不会提示配置错误。结果他们还不知道他们错在哪?如果让他们配置.CS, .json,估计就不会了。
    这里我给个正确的完整配置教程:

    1. 首先安装中间件。在vscode扩展商店里搜索 clang-format ,安装排名第一个。xaver.clang-format.
    2. 用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”.
      如果你没找到这个程序,那走第三步。如果有,走第四步。
    3. 其次还要安装真正的格式化工具clang-format.exe。这个工具集成在工具包 LLVM里,下载地址:
      https://github.com/llvm/llvm-project/releases
      这里我选择最新的 “LLVM-14.0.6-win64.exe”. 安装后居然有 2G! 在安装目录里找到 clang-format.exe。提取出来一般能用,不能就把附加的DLL一并提出来。其它可以卸载了。
    4. 把可执行程序的路径添加到 settings.json 文件里。不是工作目录里的,是vscode 的用户目录里。比如我电脑上的目录是:
      “C:\Users\tiandyoin\.vscode\User\settings.json”
    5. 在这个配置文件里添加配置如下:
    "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",
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    .Google.cpp.clang-format 的代码如下:

    ---
    Language:        Cpp
    BasedOnStyle:  Google
    Standard: Auto
    ColumnLimit:     80
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 生成.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
    
    • 1
    • 2
    • 3

    输出格式化后文件的命令是:

    clang-format --style=file:${workspaceRoot}/xxx.clang-format --assume-filename=.cpp xxx.cqq > xxx2.cqq
    // 要自行替换${workspaceRoot}
    
    • 1
    • 2

    这里因为程序不认识 .cqq 文件,使用 --assume-filename=.cpp 表示以C++语言格式化 .cqq 文件。
    7. 在代码里按ctrl+shift+F 或
    全选代码-鼠标右键-使用…格式化代码-选择"Clang-Format"。
    8. 测试一下效果
    格式化前:

    // #include 
    #include 
     
    #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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    格式化后:

    
    // #include 
    #include 
    
    #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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    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",
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    ./.Google.cs.clang-format 代码如下:

    ---
    Language:        CSharp
    BasedOnStyle:  Google
    Standard: Auto
    ColumnLimit: 50
    ...
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    (4) 格式化代码
    为是突出assumeFilename的效果,我把要格式的文件名,改成 Command.cqq.
    vscode会认为是纯文本
    command.cs 改名成  command.cqq
    点击它让vscode 认定它是CSharp. 这样才能使用格式化命令。
    在这里插入图片描述

    在这里插入图片描述
    这里把列数限制了
    ColumnLimit: 50
    按 ctrl+a, ctrl+k,ctrl+f 执行一下试试
    得到效果图如下:
    在这里插入图片描述
    成功按50列换行。

    如果有什么不明白的地方,请留言讨论。

  • 相关阅读:
    小白备战大厂算法笔试(三)——栈、队列、双向队列
    如何根据CAP原理设计分布式系统
    23. Opencv——图像拼接项目
    【第二十篇】-Maven IntelliJ
    2022年国赛高教杯数学建模E题小批量物料的生产安排解题全过程文档及程序
    Android音视频开发系列:手撕FFmpeg音视频编解码
    MVC设计模式+过滤器与监听器
    C# 辗转相除法求最大公约数
    嵌入式常见接口协议总结
    Kubernetes 监控与日志管理
  • 原文地址:https://blog.csdn.net/tiandyoin/article/details/126666447