Cpp VSCode 配置
记录一下VSCode配置C++的内容吧。
插件列表
首先列一下目前在VSCode上使用的,涉及到C++的核心插件:
- C/C++ (Microsoft):微软官方默认的C/C++插件,禁用了代码提示,但是调试这些还需要用它,不能完全禁用
- clangd (LLVM):LLVM官方提供的,当前代码提示的主力插件
- CMake (twxs):CMake的语言支持,CMakeLists的语法高亮等
- CMake Tools (Microsoft):微软官方提供的CMake支持,提供CMake命令工具条和快捷指令
- CodeLLDB (Vadim Chugunov):lldb调试支持,非官方支持
还有两个不太重要的插件:
- C/C++ Themes (Microsoft)
- Better C++ Syntax (Jeff Hykin)
C/C++ 插件和 clangd 插件配置
主要的内容是禁用默认C/C++插件的主要功能,然后用clangd以及对应插件替换掉,并对clangd进行配置。
1 | //**************************************************************************// |
CMaketools 插件配置
对CMake提供支持的插件配置。
1 | //**************************************************************************// |
如果CMakeLists.json插件在识别编译工具链时出现错误,可以手动修改下面的配置文件,或者直接删除,让它重新扫描配置
- 在Windows中,配置文件位于
~/AppData/Local/CMakeTools/cmake-tools-kits.json
- 在WSL2中,配置文件位于
~/.local/share/CMakeTools/cmake-tools-kits.json
C++ 调试配置
下面的部分是关于CMake项目调试的配置,早期这种配置必须存放在项目的.vscode/launch.json
文件中,
现在已经支持在settings.json中添加默认配置了。
这三种配置使用的调试器分别是:
- lldb
- gdb
- vsdbg
分别对应与clang,gcc和MSVC。
用它们调试对应的编译器得到的可执行程序通常是没问题的,但是混用是很可能有问题的,在Windows上
- vsdbg可以调试target是MSVC的clang得到的可执行文件
- vsdbg不支持调试gcc+MinGW或clang+MinGW得到的可执行文件
- lldb可能可以替代gdb
1 | //**************************************************************************// |
clangd 配置
这里的clangd指的是专门的软件(通常在下载clang时附带下载),并不是VScode插件,关于clangd主要有三种配置文件:
.clangd
:主配置文件;.clangd-tidy
:关于C++静态检查的配置文件;.clangd-format
:关于C++格式化检查的配置文件;
.clangd
clangd有时候比较蠢,我们可以通过在项目根目录添加.clangd
配置文件来协助,例如它很可能在Windows上找不到正确的标准库头文件,而是会跳转到MSVC的标准库头文件,我们可以添加--include-directory=
来指定。
.clangd
示例如下 1
2
3
4
5
6
7
8CompileFlags:
Add:
- '-Wall'
- '-Wextra'
- '-Wshadow'
- '-Wno-unused-parameter'
- '-std=c++17'
- '--include-directory=/path/to/compiler/include'
有时候需要使用C语言项目,但是默认的配置是针对C++的,对于C语言项目可以使用下面的配置,重点是-xc
选项
1
2
3
4
5
6
7CompileFlags:
Remove: [-std=*]
Add: [-xc, -Wall]
Compiler: clang
Diagnostics:
ClangTidy:
Remove: readability-identifier-naming
除此之外,clangd主要会基于compile_commands.json
文件进行代码提示,CMake项目可以用特定选项在build/
中自动生成compile_commands.json
。
.clang-tidy
clang-tidy可以提供C++的静态语法检查,包括很多具体规则的检查,需要通过.clang-tidy
配置文件设置。
可以使用如下的注释去关闭特定位置的特定检查 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15关闭当前行的所有检查 // NOLINT
关闭当前行的特定检查 // NOLINT(xxx)
关闭下一行的所有检查 // NOLINTNEXTLINE
关闭下一行的指定检查 // NOLINTNEXTLINE(xxx)
关闭一部分区域的全部检查
// NOLINTBEGIN(check-name)
...
// NOLINTEND(check-name)
关闭一部分区域的指定检查
// NOLINTBEGIN
...
// NOLINTEND
.clang-tidy
模板如下,具体含义可以参考clang官方文档。
1 | Checks: 'bugprone-*, |
.clang-format
clang-format可以提供C++的代码格式化,包括很多具体规则的检查,需要通过.clang-format
配置文件设置。
可以使用如下的注释去关闭特定位置的格式化 1
2
3// clang-format off
...
// clang-format on
.clang-format
模板如下,下文中的注释行是默认设置或者目前被舍弃的选项,
更完整的内容可以参考clang官方文档。
1 | --- |
移除注释之后,更简洁的版本如下 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36---
Language: Cpp
BasedOnStyle: LLVM
AccessModifierOffset: -4
AllowShortBlocksOnASingleLine: Always
AllowShortCaseLabelsOnASingleLine: true
AllowShortIfStatementsOnASingleLine: WithoutElse
AllowShortLoopsOnASingleLine: true
AlwaysBreakTemplateDeclarations: true
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: true
BeforeElse: true
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: true
KeepEmptyLinesAtTheStartOfBlocks: false
SeparateDefinitionBlocks: Always
SpacesBeforeTrailingComments: 2
IndentWidth: 4
TabWidth: 4
UseTab: Never
---
补充
必要软件
为了正常使用所有功能,除了针对VSCode的配置,至少还需要单独安装下列软件,并把路径添加到PATH
- Git
- CMake
- ninja
vscode 快捷键
和 vim 类似,为了提高效率,有必要整理一下 vscode 常用的快捷键。(虽然 vscode 也支持 vim 模式,但是毕竟没有原始的快捷键体系方便)
两个最主要的:
ctrl+p
快速打开:n
转到第 n 行@symbol
查找并跳转到符号(对于 md 文件是各级目录)filename
打开当前文件夹的其他文件
ctrl+shift+p
快速打开命令面板(相当于快速打开后加上>
继续输入命令)ctrl+shift+o
快速打开符号查找(相当于快速打开后加上@
继续输入命令)
主要操作
ctrl+,
进入设置的 GUI 界面ctrl+shift+n
打开新的 vscode 窗口实例ctrl+shift+m
显示问题界面- `ctrl+`` 显示或关闭集成终端界面
ctrl+shift+~
显示集成终端界面并新建一个终端实例ctrl+<enter>
在下方插入一行,光标也随之移动ctrl+shift+<enter>
在上方插入一行,光标也随之移动(这个有很多快捷键冲突,可能没有用)
当前光标未选择内容时,复制剪切粘贴都是以当前行为单位进行的:
ctrl+c
复制当前行ctrl+x
剪切当前行ctrl+v
粘贴到当前行的前面
其他
ctrl+shift+k
删除当前行alt+up
把当前行上移alt+down
把当前行下移shift+alt+up
把当前行复制并插入到上方shift+alt+down
把当前行复制并插入到下方