记录一下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 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 37 38 39 40 41
|
"C_Cpp.formatting": "disabled",
"C_Cpp.intelliSenseEngine": "disabled",
"C_Cpp.autocomplete": "disabled",
"C_Cpp.errorSquiggles": "disabled",
"C_Cpp.codeAnalysis.runAutomatically": false,
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
"clangd.arguments": [ "--completion-style=detailed", "--clang-tidy", "--background-index", "--enable-config", "--header-insertion=never", "--header-insertion-decorators", "--fallback-style=LLVM", ],
"clangd.fallbackFlags": [ "-I${workspaceFolder}", "-I${workspaceFolder}/include", "-fsanitize=address", "-fsanitize=undefined", "-Wall", "-Wextra", "-Wshadow", "-Wfatal-errors", "-Wno-unused-variable", "-Wno-unused-parameter" ],
"clangd.detectExtensionConflicts": true, "clangd.checkUpdates": true,
|
对CMake提供支持的插件配置。
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
|
"cmake.autoSelectActiveFolder": false,
"cmake.configureOnOpen": false,
"cmake.configureOnEdit": false,
"cmake.options.statusBarVisibility": "compact", "cmake.options.advanced": { "cpack": { "statusBarVisibility": "hidden" }, "workflow": { "statusBarVisibility": "hidden" }, "debug": { "statusBarVisibility": "hidden" }, "ctest": { "statusBarVisibility": "icon" } }, "cmake.preferredGenerators": [ "Ninja" ], "cmake.pinnedCommands": [ "cmake.configure", "cmake.build", "cmake.cleanConfigure", "cmake.selectKit", "cmake.setVariant", "cmake.showConfigureCommand" ], "cmake.showOptionsMovedNotification": false,
|
如果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中添加默认配置了。
这三种配置使用的调试器分别是:
分别对应与clang,gcc和MSVC。
用它们调试对应的编译器得到的可执行程序通常是没问题的,但是混用是很可能有问题的,在windows上
- vsdbg可以调试target是MSVC的clang得到的可执行文件
- vsdbg不支持调试gcc+MinGW或clang+MinGW得到的可执行文件
- lldb可能可以替代gdb
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
"launch": { "configurations": [ { "name": "lldb(CMake)", "type": "lldb", "request": "launch", "program": "${command:cmake.launchTargetPath}", "args": [], "cwd": "${workspaceFolder}", "console": "integratedTerminal" }, { "name": "gdb(CMake)", "type": "cppdbg", "request": "launch", "program": "${command:cmake.launchTargetPath}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [ { "name": "PATH", "value": "${env:PATH}:${command:cmake.getLaunchTargetDirectory}" } ], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; /usr/bin/gdb -q --interpreter=mi" }, { "name": "vsdbg(CMake)", "type": "cppvsdbg", "request": "launch", "program": "${command:cmake.launchTargetPath}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [ { "name": "PATH", "value": "${env:PATH}:${command:cmake.getLaunchTargetDirectory}" } ], "console": "externalTerminal" } ], "compounds": [] },
|
补充
必要软件
为了正常使用所有功能,除了针对VSCode的配置,至少还需要单独安装下列软件,并把路径添加到PATH
- Git
- CMake
- clangd(通常是clang附带下载的)
- 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
把当前行复制并插入到下方