行业知识
vscode搭配clangd配置现代c++环境
2026-11-07 14:48:52
来源:互联网转载
Vscode Modern CPP 环境配置
摘要
本文介绍了clangd, clang-format, clang-tidy的相关内容,主要是给出了包括VSCode在内的若干配置文件。下载VSCode、安装相关插件等过程略。
clangd版本配置
clangd是一个…(clangd官网),简单来说就是一个提供高亮补全等功能的lsp,不能直接用,一般需要通过插件进行访问。
要想在VSCode中使用clangd进行高亮、补全,而且指定使用的c++标准,大致需要以下操作:
- 关闭官方包的 intelligence, 可以在settings.json中指定 "C_Cpp.intelliSenseEngine": "disabled",
- 指定clangd的版本。打开vscode设置,搜索 clangd: fallback,然后添加你想用的c++标准
更精细的配置是使用配置文件,如下:
常用配置文件
.clangd或config.yaml
在当前项目目录,或者全局目录(LINUX: ~/.config/clangd/config.yaml, WINDOWS: %LocalAppData%\clangd\config.yaml)下创建配置文件。可以指定clangd使用的c++版本,以及clangd-tidy进行诊断的条目
Index: Background: BuildCompileFlags: Add: [-xc++, -Wall, -std=c++20] Compiler: clang++Diagnostics: ClangTidy: Add: ["*"] Remove: [ abseil*, fuchsia*, llvmlib*, zircon*, altera*, google-readability-todo, readability-braces-around-statements, hicpp-braces-around-statements, modernize-use-trailing-return-type, # 不要每个都加上尾返回值类型 readability-identifier-length, # 不检查变量名长度 cppcoreguidelines-avoid-magic-numbers, # 不检查魔法数字 readability-magic-numbers, #同上 ]
.clang-format
#基于那个配置文件BasedOnStyle: GoogleLanguage: Cpp# 标准: Cpp03, Cpp11, AutoStandard: c++20ColumnLimit: 120BraceWrapping: # case标签后面 AfterCaseLabel: false # class定义后面 AfterClass: false # 控制语句后面 AfterControlStatement: Never # enum定义后面 AfterEnum: false # 函数定义后面 AfterFunction: false # 命名空间定义后面 AfterNamespace: false # ObjC定义后面 AfterObjCDeclaration: false # struct定义后面 AfterStruct: false # union定义后面 AfterUnion: false #ExternBlock定义后面 AfterExternBlock: false # catch之前 BeforeCatch: false # else之前 BeforeElse: false # lambda块之前 BeforeLambdaBody: false # while之前 BeforeWhile: false # 缩进大括号 IndentBraces: false # 分割空函数 SplitEmptyFunction: true # 分割空记录 SplitEmptyRecord: true # 分割空命名空间 SplitEmptyNamespace: true# 在 @property 后面添加空格, \@property (readonly) 而不是 \@property(readonly).ObjCSpaceAfterProperty: true# 访问说明符(public、private等)的偏移AccessModifierOffset: -4# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)AlignAfterOpenBracket: Align# 连续赋值时,对齐所有等号AlignConsecutiveAssignments: Consecutive# 连续声明时,对齐所有声明的变量名AlignConsecutiveDeclarations: Consecutive# 连续宏声明时,对齐空格 #clang-format-10 可用AlignConsecutiveMacros: Consecutive# 对齐连接符: DontAlign(不对齐), Left(左对齐), Right(右对齐)AlignEscapedNewlines: Left# 水平对齐二元和三元表达式的操作数AlignOperands: Align# 对齐连续的尾随的注释AlignTrailingComments: true# 允许函数调用的所有参数在放在下一行AllowAllArgumentsOnNextLine: true# 允许函数声明的所有参数在放在下一行AllowAllParametersOfDeclarationOnNextLine: true# 允许短的块放在同一行AllowShortBlocksOnASingleLine: Never# 允许短的case标签放在同一行AllowShortCaseLabelsOnASingleLine: false# 允许短的枚举放在同一行AllowShortEnumsOnASingleLine: false# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), AllAllowShortFunctionsOnASingleLine: None# 允许短的if语句保持在同一行AllowShortIfStatementsOnASingleLine: Never# 允许短的Lambdas语句保持在同一行AllowShortLambdasOnASingleLine: None# 允许短的循环保持在同一行AllowShortLoopsOnASingleLine: false# 总是在定义返回类型后换行(deprecated)AlwaysBreakAfterDefinitionReturnType: None# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数),# AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)AlwaysBreakAfterReturnType: None# 总是在多行string字面量前换行AlwaysBreakBeforeMultilineStrings: false# 总是在template声明后换行AlwaysBreakTemplateDeclarations: Yes# false表示函数实参要么都在同一行,要么都各自一行BinPackArguments: true# false表示所有形参要么都在同一行,要么都各自一行BinPackParameters: true# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效# 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)BreakBeforeBinaryOperators: NonAssignment# 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似),# Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似),# Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom# 注:这里认为语句块也属于函数BreakBeforeBraces: Custom# 在三元运算符前换行BreakBeforeTernaryOperators: true# 在构造函数的初始化列表的逗号前换行BreakConstructorInitializersBeforeComma: falseBreakConstructorInitializers: BeforeColon# 在类声明继承列表的逗号前换行BreakInheritanceList: BeforeColonBreakAfterJavaFieldAnnotations: false# 允许中断长字符串BreakStringLiterals: true# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变CommentPragmas: '^ IWYU pragma:'# 允许连续的名称空间声明将在同一行CompactNamespaces: false# 构造函数的初始化列表的缩进宽度ConstructorInitializerIndentWidth: 4# 延续的行的缩进宽度ContinuationIndentWidth: 4# 去除C++11的列表初始化的大括号{后和}前的空格Cpp11BracedListStyle: true# 继承最常用的指针和引用的对齐方式DerivePointerAlignment: true# 关闭格式化DisableFormat: false# 修饰符后放置空行EmptyLineAfterAccessModifier: Never# 修饰符前放置空行EmptyLineBeforeAccessModifier: LogicalBlock# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)ExperimentalAutoDetectBinPacking: false# 修正命名空间注释FixNamespaceComments: true# 需要被解读为foreach循环而不是函数调用的宏ForEachMacros: - foreach - Q_FOREACH - BOOST_FOREACH# 需要解读为if的函数IfMacros: - KJ_IF_MAYBEIncludeBlocks: Regroup# 对#include进行排序,匹配了某正则表达式的#include拥有对应的优先级,匹配不到的则默认优先级为INT_MAX(优先级越小排序越靠前),# 可以定义负数优先级从而保证某些#include永远在最前面IncludeCategories: - Regex: '^' Priority: 2 SortPriority: 0 CaseSensitive: false - Regex: '^' Priority: 1 SortPriority: 0 CaseSensitive: false - Regex: '^
下一篇:javaee服务器锁住怎么办?