☰
VS Code 从C语言到嵌入式与AI编程:一套可复现的完整配置指南
2026/9/26 5:25:38 网站建设 项目流程

简介:微软Visual Studio Code(简称VS Code)是微软推出的免费开源代码编辑器,长期活跃于Web前端、服务端脚本、桌面与移动应用等各类开发场景,既适合初学者熟悉编码流程,也适合专业开发者进行多项目协同与复杂调试,其强大的扩展生态允许用户随时按需定制工具链。这份压缩包提供了完整的VS Code程序资源,共收录7094个文件,涵盖JavaScript、TypeScript等语言文件、JSON配置、Markdown文档、License许可文本以及大量扩展依赖、工具链组件与辅助脚本,压缩后约64.63MB,目录结构基本沿用原生布局,便于在离线环境获取、按需检索与二次定制,这些文件共同构成了可运行的开发环境,并保留了语言服务与调试器所需的关键依赖。目前已有820人学习下载,适合需要本地化保存或搭建开发环境、研究编辑器内部构成、补充安装扩展依赖的用户。资源中不仅包含代码编辑器主体,还涉及内置Git版本控制、IntelliSense智能补全、多语言调试适配、扩展市场相关模块、集成终端配置以及Live Share协作组件等,用户可据此深入了解VS Code的功能组织方式,快速复现常用开发特性,为日常编码、项目版本管理与团队协作提供可靠的工具支撑。

1. VS Code 不是编辑器,是开发者工作台:它到底在替我们解决什么

很多人第一次打开 Microsoft 出品的 VS Code,会觉得它不过是个记事本加强版——装完打开,一片空白,连个编译按钮都找不到。但真正用顺手的人都明白,这是一套能自己拼装的工作台:跑 C 程序、做 STM32 嵌入式、接 AI 编程助手、连远程服务器排查问题,全部收在同一个窗口里。它和传统 IDE 最大的差异在于不替你规定工作流,而是让插件生态替你拼出适合自己项目的那套流程。这篇笔记写给三类人:刚学 C 语言的学生、想从老式 IDE 里解放出来的嵌入式工程师,以及想低成本接入 AI 编程助手的开发者。路径是真实可复现的,装什么、怎么配、坑在哪,一步步说清楚。

2. 本地环境从 0 到 1:安装、C 语言编译和 Code Runner 的最小配置

2.1 下载安装:三个勾选项决定你后面少走多少弯路

VS Code 的下载页面有两个版本:用户安装版和系统安装版。新手最容易忽略这个选择。用户安装版装在当前用户目录下,不需要管理员权限,公司电脑受限时也能装;系统安装版装到 Program Files,所有登录用户共享。我的建议是无脑选用户安装版,理由是后续升级扩展、装工具链时碰到的权限问题会少一大半,卸载也干净,不用跟 UAC 弹窗较劲。

安装界面里有几个默认勾选项,很多人直接一路 Next,回头才发现命令行里敲 code 打不开编辑器。真正值得留意的就三项:把“添加到 PATH”勾上,这样终端里能直接用 code 命令打开工程;“通过 Code 打开”和“添加到资源管理器目录上下文菜单”看个人习惯,我通常会勾,右键就能打开项目目录;文件关联那项建议选上,以后双击 .c 文件默认用它打开,省得再手动关联。

安装选项作用我的建议
用户安装版免管理员权限,装在用户目录推荐,权限坑最少
添加到 PATH终端可用code命令必勾,否则后悔药都没有
添加到资源管理器上下文菜单右键直接打开目录建议勾,日常效率提升明显

装完先别急着搜扩展。打开终端敲code --version,能正常输出版本号就说明环境没问题。这一步是验证 PATH 是否生效,很多后续配置都是从这里开始的。

2.2 用 Code Runner 跑通第一个 C 程序:编译器、executorMap 与中文编码

装完 VS Code 不代表能跑 C。很多人卡在这一步:编辑器装好了,但点运行没反应,其实缺的是一个 C 编译器。Windows 上最常见的选择是 MinGW-w64,它会把 gcc、gdb 一起打包进来,编译和调试都靠它。装完要确认一件事:把 MinGW 的 bin 目录加进系统 PATH。验证方式很简单,新开一个终端,输入gcc --version,看到版本信息才算真的装好了。

然后装 Code Runner 扩展。这扩展的作用就一条:选中或打开文件,点右上角三角形,直接编译运行。默认配置在 Windows 下跑 C 语言时对中文不太友好,输出窗口经常是一堆乱码,根源是 gcc 默认按 UTF-8 处理源文件,而 Windows 终端习惯用 GBK。我现在的配置是这样:

{ "code-runner.executorMap": { "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt -fexec-charset=GBK && $dir$fileNameWithoutExt" }, "code-runner.runInTerminal": true, "code-runner.saveFileBeforeRun": true }

executorMap里的$dir表示当前文件所在目录,$fileName是文件名,$fileNameWithoutExt是不带扩展名的文件名。关键是-fexec-charset=GBK,它让编译出的程序按 GBK 输出中文,Windows 控制台就不会乱码。runInTerminal设为 true 是让程序跑在 VS Code 内置终端里,这样能正常读键盘输入;saveFileBeforeRun会在运行前自动保存,避免改完代码忘了保存、跑的还是旧版本。

第一次运行如果报“gcc 不是内部或外部命令”,不是 VS Code 的问题,是编译器路径没进 PATH。新装完 MinGW 之后,已经打开的 VS Code 要彻底重启一次,环境变量才会被重新读取。这一步卡住过的人不在少数。

2.3 扩展清单:哪些装完即用,哪些要避开

VS Code 的扩展市场鱼龙混杂,同名的、仿冒的都不少。我按用途整理了一份日常必装清单,照着装基本不会出错:

扩展名用途什么时候需要
C/C++(微软官方)语法高亮、IntelliSense、调试支持写 C 或 C++ 就装
Code Runner单文件编译运行练习算法、写小工具时
PlatformIO IDE嵌入式工程编译、烧录、串口监视做 STM32、Arduino 开发时
Continue接入 DeepSeek 等大模型 API 的 AI 助手想用 AI 辅助写代码时
Remote-SSH连接远程服务器改代码服务器开发、部署排查时
Chinese Language Pack中文界面对英文界面不敏感可不装
Marp for VS Code用 Markdown 写幻灯片做技术分享、内部培训时

这里有个需要避开的坑:尽量只装同一用途的扩展。比如 C 语言相关的智能提示,装了 C/C++ 官方扩展就别再装其他 C 语言提示插件,它们会同时竞争补全,结果就是互相覆盖,弹出来的代码提示反而变慢。还有人问写 LaTeX 该用 TeXStudio 还是 VS Code,我的回答是:如果只是写论文和文档,VS Code 装个 LaTeX Workshop 完全够用,还能和 git 集成,换来换去反而没必要。

3. 嵌入式开发:用 PlatformIO 把 STM32 工程搬进 VS Code

3.1 为什么把 STM32 工程从 Keil 挪到 VS Code:三条硬理由

很多从学校一路用 Keil 过来的工程师,第一次听到在 VS Code 里做 STM32 会皱眉。我的看法是:如果你的项目只需要一个人、一块开发板、一个下载器,Keil 没问题;但一旦涉及多人协作、跨平台、代码评审,Keil 的短板就很明显了。第一,Keil 的工程文件是私有格式,进 git 之后每次操作都会产生大量无意义的 diff,Code Review 基本没法做。第二,Keil 在 Windows 之外的平台上跑不起来,团队里有人用 macOS 或 Linux 就完全没法参与。

PlatformIO 解决的就是这些问题。它的工程就是一个文件夹加一个platformio.ini配置文件,所有依赖和工具链都由它自动管理,可以用 git 正常追踪。底层还是 GCC 工具链,编译出来的固件该烧照样烧,但对工程的管理方式现代了很多。另一个明显的改善是代码提示:VS Code 里看 STM32 寄存器定义、跳转到 HAL 库源码,比在 Keil 里按 F12 要顺滑得多,整个库的索引是实时的。

3.2 platformio.ini 逐行解读:board、framework 与烧录参数

PlatformIO 的核心理念是“配置即工程”。新建项目时它会问三件事:开发板型号、开发框架、项目目录。以最常见的蓝丸 F103C8 为例,一份最小可用的配置文件长这样:

[env:bluepill_f103c8] platform = ststm32 board = bluepill_f103c8 framework = arduino upload_protocol = stlink monitor_speed = 115200

platform字段指定芯片厂商平台,写 STM32 就是ststm32,它决定了工具链和 SDK 的下载来源。board字段是关键,它对应一块具体的开发板,PlatformIO 会从板级配置里读出芯片型号、Flash 大小、烧录方式等参数。framework选arduino是走 Arduino 封装,适合快速原型;生产级项目我一般换成stm32cube,用 HAL 库裸写,可控制性强很多。

烧录相关有两个参数要留意。upload_protocol指定下载器协议,ST-Link 就写stlink,如果用的是串口烧录(比如板载 USB 转串口的 DFU 模式),要改成对应的协议或直接去掉让 PlatformIO 自动识别。monitor_speed是串口监视器的波特率,必须和固件里初始化串口时设的波特率一致,最常见的值是 115200 和 9600,设错了串口输出全是乱码。

lib_deps不是每个项目都需要,但用 Arduino 框架时基本躲不开。它声明的第三方库会在首次编译时自动下载,省去手动翻 GitHub 找 zip 的麻烦。写法是用户名/库名@版本号,比如bblanchon/ArduinoJson@^7.0.0。这里提醒一句:第一次编译 STM32 工程会非常慢,因为 PlatformIO 要下载 ARM 工具链、OpenOCD 和整个 HAL 库,十分钟到半小时都正常,不是卡死了,耐心等就行。

3.3 编译、烧录、串口监视:三条 pio 命令和没板子时的替代方案

PlatformIO 装好后,VS Code 底部会出现一行快捷按钮,像“勾号”“右箭头”“插头”三个图标,对应的是编译、烧录、串口监视。但命令行永远是更可靠的排查手段,报错信息比图标友好得多。我常用的三条命令:

pio run # 编译工程 pio run -t upload # 编译并烧录 pio device monitor # 打开串口监视器

第一条命令是纯编译,生成固件文件,不接硬件也能跑,适合在 CI 或无板子环境下验证代码能否通过编译。第二条会读取upload_protocol指定的烧录方式,执行编译后调用工具把固件写入芯片。第三条打开串口监视器,能看到板子通过串口打印的调试信息,退出快捷键是Ctrl+C。

烧录失败是新手最容易崩溃的时刻。现象往往是pio run -t upload报Failed to connect或Cannot connect to target。原因分为几种:ST-Link 驱动没装好,Windows 设备管理器里能看到黄色感叹号;接线松动,SWD 的四根线接触不良;还有一种是板子处于低功耗休眠状态。这类问题经常没明确提示,像玄学一样,我的排查顺序是先查驱动、再换线、最后按一下板子上的复位键重试。

如果手头还没有开发板,又不想干等硬件到货,可以先用 Wokwi for VS Code 的仿真扩展。它能在 VS Code 里直接模拟一块 STM32 或 Arduino 板子,LED 亮灭、串口输出都能看到,基本行为验证够用。我在写验证性质的串口测试代码时,经常先在 Wokwi 里跑通再上真板子,少烧几次板子,也少等快递。

4. 接上 AI 编程助手:Continue + DeepSeek 的完整配置记录

4.1 先定路线:本地模型还是 DeepSeek 云端 API

AI 编程助手现在已经不是要不要装的问题,而是选哪条路线的问题。两条主流路子:一是本地起一个模型用 Ollama 跑,二是注册云服务商拿 API 来调用。两者的取舍很清楚。本地模型的好处是免费、离线、代码不出机器,隐私上没负担;代价是显存不够时模型小、效果差,8GB 显存跑起来的模型在代码补全上的表现只能说能用。云端 API 的效果好得多,DeepSeek 的 deepseek-chat 在代码理解和补全上比同价位的本地小模型强几个档次,按 token 计费,日常辅助写代码一个月几块钱人民币是常态。

我的建议是:主力用云端 API,本地模型作为网络不可用时的兜底。原因很简单,API 方式不需要你维护模型、不用管显存和模型版本,扩展层面配置一次就完事,换模型只改一行配置。而本地模型每次换版本要重新拉模型文件、处理依赖库,折腾的精力远超省下的几块钱。

4.2 Continue 接入 DeepSeek:config.json 的完整配置

Continue 是 VS Code 生态里对国内用户比较友好的 AI 助手扩展。它不绑定某一家云厂商,而是通过配置文件指定用哪家模型,DeepSeek 就是最常见的配置之一。安装扩展后,左侧会出现 Continue 的图标,第一次打开会引导创建配置文件。

它的全局配置是一个 JSON 文件,点击扩展面板里的齿轮图标可以打开。一份可用的 DeepSeek 配置长这样:

{ "models": [ { "title": "DeepSeek Chat", "provider": "deepseek", "model": "deepseek-chat", "apiKey": "${env.DEEPSEEK_API_KEY}" } ], "tabAutocompleteModel": { "title": "DeepSeek Coder", "provider": "deepseek", "model": "deepseek-coder", "apiKey": "${env.DEEPSEEK_API_KEY}" }, "customCommands": [ { "name": "explain", "prompt": "用中文解释当前选中的代码,指出潜在风险和优化点。", "description": "解释选中代码" } ] }

models数组里声明可用的模型。provider填deepseek,Continue 内置了对 DeepSeek 的支持,apiKey建议不要直接把密钥写进配置文件,用${env.DEEPSEEK_API_KEY}这种环境变量引用,密钥只在当前用户的环境变量里存在,不会因为分享配置文件而泄露。tabAutocompleteModel是可选配置,它控制按 Tab 时的行内补全,这里指定一个专门用于补全的模型,避免自动补全走对话模型导致响应偏慢。

配置文件的参数里有个细节值得多说两句。如果你是代理中转用户,或者想试其他兼容 OpenAI 接口的服务,需要加一行"apiBase": "https://api.deepseek.com/v1"来覆盖默认请求地址。DeepSeek 官方在这里是正常工作范围内的,不需要任何特殊网络配置。配置保存后重启 VS Code,在 Continue 面板里选中 DeepSeek Chat 模型,随便问一句,能返回内容就说明链路通了。第一次请求会偏慢,属于冷启动,后面会快起来。

4.3 Copilot、Cursor、Windsurf、Trae 怎么选:一张表看懂差异

把 Continue 配好后,很多人还是会纠结:要不要干脆换 Cursor 或者 Trae?我的看法是看你的团队形态。下表是几个主流方案的差异,都是基于公开信息和实际使用感受整理的:

方案形态补全质量适配 VS Code 工程适合人群
VS Code + Continue + DeepSeek扩展中上原生想留在 VS Code、控制成本
GitHub Copilot扩展强官方深度集成愿意付费、追求稳定补全
Cursor独立 IDE强可导入但配置要迁移想要开箱即用 AI 功能
Windsurf独立 IDE强类似 Cursor偏 Agent 式多步操作
Trae独立 IDE中上类似 Cursor习惯中文界面、尝鲜

如果你已经用 VS Code 搭好了一套环境,扩展、任务、调试配置都调好了,我的建议是留在 VS Code 里加 Continue,没必要为了 AI 功能把整个环境搬到另一个 IDE。Cursor 本质上是 VS Code 的一个分支,十年前叫“把 VS Code 改造成 AI IDE”的路线,今天依然是这样,但换来换去的过程里,快捷键、settings.json、tasks 配置全要重新磨合,成本不小。Copilot 的补全质量确实是目前最稳的,但它按月订阅,且只对单个用户生效,团队内共享不方便。至于 Claude 这类模型,Continue 同样支持,在models数组里增加一个anthropicprovider 的配置项即可,不影响现有 DeepSeek 配置。

5. 高频问题排查:远程连接失败、头文件报错与中文乱码

5.1 远程开发报 failed to fetch:服务器端到底卡在哪一步

用 Remote-SSH 连服务器时弹窗报“未能下载 VS Code 服务器 (failed to fetch)”,这个报错几乎每个远程开发的人都见过。现象是本地 VS Code 检测到远程没有服务端程序,尝试下载时失败,连接中断。原因在 VS Code 的机制:远程开发需要在目标机器上放一个名为vscode-server的目录,它和本地版本一一对应,版本号都挂在同一个 commit 上。下载失败通常是目标机器访问微软下载通道的网络不稳定,或者下载过程中连接被重置。

解决思路分两步。第一步是换网络环境重试,办公楼和家庭宽带对同一个下载域名的可达性差别很大,切换后多数情况能解决。第二步是手动补齐服务端:本地 VS Code 的关于页面能看到当前 commit 号,从微软官方渠道下载对应 commit 的 server 压缩包,解压后放到~/.vscode-server/bin/对应commit目录,然后重连。手动放置时目录结构要对,bin下面是一长串 commit 哈希,里面直接放服务端文件。放错位置会反复报同一错误,检查方式是看远程机器上该目录是否存在且文件完整。

5.2 头文件 not found:编译器路径与 tasks.json 的关联性

C 语言项目报fatal error: stdio.h: No such file or directory是另一类高频事故。现象是 VS Code 编辑器里语法高亮正常,Run Code 的按钮也能点,但一运行就报找不到头文件。原因是编辑器用的编译器和实际编译用的编译器不是同一套:VS Code 的 C/C++ 扩展会自己扫描系统里的编译器路径,而 Code Runner 是调 shell 命令执行gcc,两者找到的可能不是同一个安装位置。

排查时先打开终端敲where gcc,Windows 下会列出所有出现在 PATH 里的 gcc 可执行文件路径。如果同时存在 MinGW 和别的工具链装进来的多个 gcc,问题就出在这里——Code Runner 用的gcc是 PATH 里排前面的那个,而 C/C++ 扩展的 IntelliSense 用的可能又是另一个。解决方法是只保留一套编译器,把多余的从 PATH 里移除。另一个相关场景是打开老项目时 tasks.json 里写死了编译器路径,比如写的是C:/MinGW/bin/gcc.exe,换个机器路径变了就报错。我一般建议tasks.json里直接用命令名gcc而不是绝对路径,从 PATH 里解析,这样换机器不用改配置。

5.3 中文乱码:文件编码和终端代码页两层处理

中文乱码分两种,一种是编译运行后控制台输出乱码,一种是编辑器里打开的源码本身乱码。前者主要是字符集问题,上一章讲 Code Runner 时提到的-fexec-charset=GBK就是解决方案;也可以反向操作,把终端代码页切到 UTF-8,在终端里执行chcp 65001,然后源文件保持 UTF-8、编译参数去掉-fexec-charset。两条路都能通,但别混用——源文件是 UTF-8、编译参数又指定 GBK、终端还在用 UTF-8,三重叠加必然乱。最省心的组合是源文件统一 UTF-8 编码,终端用chcp 65001,编译时加-finput-charset=UTF-8明确告诉 gcc 输入编码。

编辑器里打开旧项目源码全是乱码,是另一类问题。VS Code 默认用 UTF-8 读文件,遇到 GBK 编码的旧文件就会显示成乱码。这时点击右下角状态栏的“UTF-8”字样,选择“通过编码重新打开”,选中“中文 (GBK)”就能正常显示。如果想彻底解决,重新保存时选“通过编码保存”为 UTF-8,然后把文件统一转码。转码是件需要谨慎的操作,改编码会动文件内容,最好在 git 里确认 diff 只有编码变化再提交,这是很多团队翻车的地方。

5.4 格式化把代码改坏:无关扩展的副作用

格式化功能本身是好用的,但扩展之间互相抢格式化权限时会出很尴尬的事。现象是保存文件后整个代码的缩进、换行、引号全变了,甚至把原本能编译的代码改出语法错误。原因是安装了多个带格式化能力的扩展,VS Code 默认会用最近装的那个处理保存格式化的动作,而它的格式风格跟你项目的.clang-format配置不一致。

解决思路是主动指定格式化工具。在 VS Code 设置里搜defaultFormatter,把默认格式化器设为 C/C++ 扩展或项目对应的工具,不同语言可以分别指定。另一个重要选项是formatOnSave,我建议改成 true 的同时配好.clang-format,让格式稳定可复现。如果项目是老代码,改动格式会引发大量无意义的 diff,那就直接关掉 formatOnSave,只保留手动格式化快捷键,在进入大规模重构时再打开。

6. 最后一公里:一份能断点调试的 launch.json 与我的调试习惯

6.1 从编译到断点:一份最小可用的 launch.json

Code Runner 能跑通,但遇到逻辑复杂的问题还是要靠断点。VS Code 里给 C 程序加断点,只需要在.vscode目录写一个launch.json,并保证编译时加了-g参数。以 MinGW 的 gdb 为例:

{ "version": "0.2.0", "configurations": [ { "name": "Debug C", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:/mingw64/bin/gdb.exe", "preLaunchTask": "build-c" } ] }

program指向编译生成的可执行文件,注意和 tasks.json 里输出路径保持一致,否则调试器找不到程序。preLaunchTask的值必须和tasks.json里某个 task 的label完全一致,它的作用是点击调试按钮时先自动执行编译任务,保证调试时跑的是最新的代码。miDebuggerPath是 gdb 的绝对路径,Windows 下反斜杠要写成C:/这种正斜杠形式。externalConsole设为 false 时程序和控制台都嵌在 VS Code 里,方便一起看;但如果程序需要读特殊键盘输入,可以改为 true,用独立的系统控制台运行。

现在的调试工作流已经固化成我自己的习惯了:先pio run验证能编译,再按 F5 进入调试,断点打在怀疑的函数入口检查和预期不符的变量。遇到平台相关的 bug,先在 Wokwi 里复现一遍,再回真板子确认。这套流程被身边同事拿去后,反馈是“终于不用靠串口打印猜代码了”。也希望这份配置记录能帮你省下摸索的时间,把精力留在真正难的问题上。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询