Skip to content
Published at:

VSCode C/C++环境

VSCode

官网:https://code.visualstudio.com/

下载页面:https://code.visualstudio.com/#alt-downloads

介绍

  • 开源:代码https://github.com/microsoft/vscode
  • 跨平台:支持macOS,Linux,Windows,远程开发,容器开发(docker)
  • 更新快:一月一更
  • 插件:插件数量多,而且质量高

VSCode的定位

UI外观

  • Editor Groups:编辑区
  • Side Bar侧边栏:
    • 项目
    • 全局搜索
    • 版本管理
    • 调试Debug
    • 插件管理
  • Status Bar状态栏:
    • git相关信息
    • 错误和警告Problems
    • 光标位置
    • indent对齐信息
    • 文件编码格式
    • 文件结束符号LF(Linux)/CRLF(Windows)
    • 当前文件的编程语言
  • Activity Bar:
  • Panels面板:(ctrl + J显示和隐藏)
    • Terminal终端
    • Debug相关信息
    • 错误和警告Problems

常用快捷键

VSCode中最最最最最重要的快捷键:Ctrl+Shift+P / F1 Command Pattern

这个窗口能执行VSCode所有操作/命令:

  • 设置:VSCode设置,主题设置,语言设置...
  • 格式化代码
  • Debug控制:
  • git操作:切换分支,新建tag,
  • ...

设置

  • 默认设置(不能修改,提供初始设置,模板的作用)
  • 用户设置👍
  • 项目设置:项目根目录下.vscode

一般改用户配置就可以了,项目具体需要可以去添加项目设置

修改设置有两种方式:UI修改直接修改settings.json文件,本质都是修改settings.json文件

命令Preferences:Open Settings

主题设置

上千种主题

命令Preferences:Color Theme

图标设置

增加文件辨识度

命令Preferences:File Icon Theme

语言设置

VSCode默认是英文版本,可修改成中文

命令:Configure Display Language

键盘设置

VSCode + Vim:能提供最高效的编辑代码方式

命令:Preferences:Keymaps

基本使用

  • 代码导航
  • 多光标编辑
  • 列选中
  • 查找和替换
  • 智能提示
  • 格式化
  • 代码折叠

代码导航

  • 文件转跳
    • 直接左侧打开
    • Ctrl+P搜索打开
  • 文件内转跳
    • 左侧Outline
    • 跳到Symbol(函数,全局变量,枚举,宏)Ctrl+Shift+O
    • 搜索转跳Ctrl+F
    • 通过minimap转跳,滚动
    • 按住Alt键,加速窗口滚动
  • 转跳到定义,在对应的变量上,右键Go to DefinitionF12

多光标编辑

Alt+Click

列选中

按住Shift+Alt,同时按鼠标左键

查找与替换

  • 查找
    • 当前文件查找Ctrl+F
    • 项目里面查找(大项目可能有问题,用grep替代)Ctrl+Shift+F
  • 匹配
    • 大小写匹配
    • 匹配整个单词
    • 使用正则表达式匹配

格式化

配置文件自动保存,保存时并格式化

json
{
  "files.autoSave": "afterDelay",
  "files.autoSaveDelay": 100, // 延时100ms保存文件
  "editor.formatOnSave": true // 保存时格式化代码
}

代码折叠

Snippets

作用: 生成代码模板

使用:Tab键补全,Tab键在定义的光标转跳

配置Snippets

每个语言有对应的json配置文件;比如c语言对应的配置文件是c.json

命令Preferences: Configure User Snippets回车,选择c.json

json
{
  "init main": {
    "prefix": "main",
    "body": [
      "#include <stdio.h>",
      "#include <stdlib.h>",
      "#include <string.h>",
      "",
      "int main(int argc, char *argv[])",
      "{",
      "    $0",
      "    return 0;",
      "}"
    ],
    "description": "Basic main function"
  }
  // ...
}

配置解释:输入prefix里面的内容,Tab补全生成body中的模板

Terminal终端

打开方式:

  • 快捷键Ctrl+`(Tab键上的按键)
  • 菜单栏:View > Terminal

功能:

  • 多窗口
  • 分屏
  • 最大化

配置:设置选中同时复制

json
{
  "terminal.integrated.copyOnSelection": true
}

Debug调试

需要安装插件:CodeLLDB

配置文件.vscode/launch.json,将<my program>替换成你的debug版本程序

json
{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "lldb",
      "request": "launch",
      "name": "Debug",
      "program": "${workspaceFolder}/<my program>",
      "args": [],
      "cwd": "${workspaceFolder}"
    }
  ]
}

VSCode命令行

配置:将code命令添加到环境变量

命令:Shell Command: install code command in PATH

bash
# 1.打开目录或文件
# 	语法:code <file or dir>
$ code linux-kit

# 2.简单对比文件差异
# 	语法:code -d <file> <file>
$ code -d file1 file2

插件

推荐插件列表:

其它美化插件:

插件安装:

  1. 打开上面插件的链接地址,转跳到浏览器
  2. 复制插件的安装命令,类似ext install llvm-vs-code-extensions.vscode-clangd (仅Linux,其它平台有安装按键,点击即可)
  3. 在VSCode按Ctrl+P,然后粘贴上面内容,回车即可

clangd:c/c++插件

文档:https://clangd.llvm.org/

功能

  • 代码补全
  • 自动导入头文件
  • 编译错误和警告
  • 代码转跳
  • 代码格式化
  • 简单重构(经量少用)F2

配置

clangd的提示依赖于compile_commands.json文件

生成compile_commands.json文件

  • CMake项目:编译时开户CMAKE_EXPORT_COMPILE_COMMANDS
    • 命令行添加:-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
    • CMakeLists.txt中添加set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  • Makefile项目:执行make clean; bear -- make

clangd整合了代码格式化工具clang-format,代码静态检查工具clang-tidy

clang-format配置:

在项目根目录下添加.clang-format文件

clang-tidy配置

在项目根目录下添加.clangd文件

CodeLLDB:debug插件

配置文件.vscode/launch.json,将<my program>替换成你的debug版本程序

json
{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "lldb",
      "request": "launch",
      "name": "Debug",
      "program": "${workspaceFolder}/<my program>",
      "args": [],
      "cwd": "${workspaceFolder}"
    }
  ]
}

CMake:CMake语法插件

提供CMake语法高亮,简单提示

CMake Tools:CMake工具插件

简单项目演示:

  1. CMake:Quick Start 新建项目
    • 选择编译器(可以先不选)
    • 项目名字
    • 选择生成还是可执行程序
  2. CMake:Select Variant 选择编译版本
  3. CMake:Configure 配置(生成其它编译系统的配置文件)
  4. CMake:Build 编译

Code Runner:一键运行插件(c/c++:单个源文件)

原理:提供了一种触发机制

c语言会触发下面cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt的shell命令

Code Runner中的一段配置:

json
{
  "code-runner.executorMap": {
    "javascript": "node",
    "php": "C:\\php\\php.exe",
    "python": "python",
    "perl": "perl",
    "ruby": "C:\\Ruby23-x64\\bin\\ruby.exe",
    "go": "go run",
    "html": "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"",
    "java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
    "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
  }
}

GitLens:Git增强插件

文档:https://github.com/eamodio/vscode-gitlens

gitignore:Git ignore插件

简化.gitignore文件编写,提供了不同语言,不同项目的.gitignore模板

  • 命令Add gitignore,没有.gitignore会创建,有可以选择追加或覆盖

Doxygen Documentation Generator:生成注释模板插件

输入/**,然后按Tab键生成注释模板

如果tab无法生成模板,注意在上面空行

Error Lens:把错误和警告显示在编辑区

默认错误和警告在panel面板里面,查看不方便

vscode-icons:文件图标增强插件

配置演示图:

Todo Tree:显示项目中的todo列表,高亮todo

Color Highlight:颜色值高亮

'#FFFF00' '#FF00FF' '#FF0000' '#0000FF'

配置文件

VSCode设置文件:settings.json

Snippets配置文件:c.json,cpp.json

代码格式化文件:.clang-format

代码静态分析文件:.clangd

常见问题:

1.VSCode遇到了Bug:

重新加载VSCode

2.插件遇到了Bug:

安装老版本,或者用过的相对稳定的版本的插件

3.大项目全局搜索失效:

解决方式:

  1. 配置只搜索哪些文件,和配置不搜索哪些文件
  1. 使用grep做为替代

4.大项目文件更新或者创建了VSCode不显示:

项目文件过多,vscode无法跟踪目录下所有文件变化

解决方式:

  1. 配置VSCode不去跟踪哪些目录或文件的变化,来减少VSCode跟踪文件的数目
json
// todo
{
  "files.exclude": {
    "**/.git": false,
    "**/.idea": true,
    "**/.classpath": true,
    "**/.settings": true,
    "**/.project": true,
    "**/.factorypath": true,
    "**/node_modules": true
  }
}
  1. 手动刷新

Updated at: