VSCode 2026年2月更新最大的看点就是技能市场、CLI增强和钩子支持这三个功能一口气全上了。我升级到最新版之后把这三个新东西从前到后都折腾了一遍发现它们不是三个孤立的新特性而是一套互相咬合的机制技能市场负责“分发能力”CLI负责“自动化编排”钩子支持负责“事件触发”。如果你平时喜欢研究开发工具、爱折腾工作流或者要带团队统一开发环境这篇文章值得花几分钟看完。先说说我为什么觉得这次更新有点东西。之前的VSCode更新大多是在现有框架里修修补补插件市场还是那个插件市场命令行还是那个启动器自动化的活儿基本靠插件和外部脚本硬凑。但这次开始变了——编辑器本身开始提供“工作流”层面的能力你可以把一整套开发环境、检查规则、钩子脚本打包成“技能”分发给队友也可以用命令行在CI服务器上完成配置还能让编辑器在保存、打开、执行命令的关键节点自动干活。这三件事以前分别要靠Makefile、husky、一堆插件配合才能完成现在原生就支持了。下面我按照自己的使用顺序把这三个特性逐个拆开讲再加上一个串联三者的实操案例最后是踩坑记录。内容偏实操按步骤走基本能复现。1. 2026年2月更新三个关键词一次说清1.1 技能市场插件之外的第二类生态技能市场的名字听起来很像插件市场但实际逻辑完全不同。插件市场分发的是“扩展功能”比如一个格式化工具、一个主题、一个语言支持包技能市场分发的则是“完整工作流场景”——一个技能包里可以同时包含配置项、依赖插件、提示词模板、钩子定义和脚本文件。举个例子以前让团队统一Python开发环境你得让每个人手动装一堆插件再同步一份settings.json还要写一个pre-commit脚本。现在可以直接发布一个“Python代码质量技能”队友只需要在VSCode里搜索这个名字点一下安装编辑器就会自动装好依赖插件、覆盖相关设置、注册钩子甚至把工作区的任务也配好。这对新同事加入项目尤其友好不再需要单独看一份配置文档。还有一个细节我很喜欢技能包是可以带版本的升级技能时可以选择一次性应用也可以先预览变更。和插件市场最大的区别在于技能会主动修改设置和钩子所以安装前会显示一个“将修改以下配置”的确认页避免一个技能把你精心调好的环境给冲了。1.2 CLI从启动器到自动化引擎过去的code命令行主要就三件事打开文件、安装插件、连远程。2026年2月这次更新给CLI加了一组针对技能市场和钩子的管理命令让我这种习惯在终端里干活的人非常舒服。现在你可以在不打开图形界面的情况下用code skill install安装技能用code hook set注册钩子用code exec运行任务。这意味着在CI流水线里你可以先拉起VSCode的环境配置再执行测试和构建保证本地开发和CI用的是同一套规则。甚至可以在服务器上安装一个技能包让远程开发环境的配置也变得可重复。更关键的是这些CLI命令和GUI是完全同步的。你可以在终端里注册一个钩子然后回到VSCode的图形配置里看到它列在hooks.json里。所以新CLI不是另起炉灶而是给原来的配置系统补上了一个自动化入口。1.3 钩子支持编辑器级的事件驱动钩子支持算是这三个特性里最“补课”的一个。VSCode本身有很多插件事件但那是插件开发者用的API普通用户没法直接干预。这次更新把“事件”开放到了用户级你可以在文件保存前、保存后、打开文件、执行命令、任务结束等节点触发一段脚本或一个命令。你可以把它理解为Git Hooks的编辑器版。Git钩子是在git commit等动作前后跑脚本VSCode钩子则是在编辑器操作发生时跑脚本。比如“保存文件后自动把README里的版本号更新掉”、“打开项目时自动拉取最新环境变量”、“启动调试前自动检查端口冲突”。这些原本要靠写插件才能实现的场景现在一个JSON配置就能搞定。2. 核心特性逐个拆解安装、命令、配置2.1 技能市场使用方法与注意事项技能市场的入口在活动栏左侧新增了一个“技能”图标点开之后是类似插件市场的界面可以搜索、筛选、查看技能包详情。不过我更习惯用CLI操作因为CLI可以结合脚本完成批量安装。一个技能包的典型目录结构是这样的my-skill/ skill.json # 技能描述和依赖 hooks.json # 随技能注册的钩子 scripts/ quality.sh # 实际执行的脚本 prompts/ review.md # 供AI助手使用的提示词模板skill.json是核心我写了一个最小示例{ name: python-code-quality, version: 1.2.0, description: Python 代码质量检查技能, dependencies: [ ms-python.black-formatter, ms-python.python ], settings: { python.formatting.provider: black, python.testing.pytestEnabled: true }, hooks: [ { event: onDidSave, script: ./scripts/quality.sh } ] }这里面dependencies会告诉VSCode需要预装哪些插件settings会在安装时合并到当前项目的设置里hooks会注册一个保存文件后触发的钩子。可以看到技能不只是一个静态配置它还带着行为。安装技能的方式有三种第一在GUI市场里点安装第二在项目目录执行code skill install 技能名第三加载本地技能文件夹。最后一种适合团队还没发布到市场的场景可以直接把技能目录放在仓库里用code skill install ./skiller这样的方式装。使用技能市场时有几个注意事项安装前一定看“变更预览”因为技能会修改你的用户设置或工作区设置不预览容易出幺蛾子。注意技能包的权限范围。官方现在区分“仅配置”“配置钩子”“配置钩子脚本执行”三个等级安装时不要给到最高权限除非你信任这个作者。团队使用时技能要提交到仓库并由固定的人维护否则版本漂移会让你排查配置差异查到崩溃。2.2 新增CLI命令速查表CLI更新之后我先把code --help输出从头翻了一遍挑出了几个和这次更新直接相关的命令整理成了表格命令作用示例code skill search 关键词搜索技能市场code skill search python-lintcode skill list查看已安装技能code skill list --versionscode skill install 技能名安装技能code skill install python-code-qualitycode skill uninstall 技能名卸载技能code skill uninstall python-code-qualitycode skill update 技能名更新技能到最新版code skill update python-code-qualitycode hook list查看当前项目的钩子code hook list --verbosecode hook set 事件 命令注册一个新钩子code hook set onDidSave bash ./fmt.shcode hook unset 事件移除钩子code hook unset onDidSavecode hook run 事件手动触发钩子code hook run onDidSave --file src/a.pycode exec 任务名运行VSCode任务code exec lint这些命令都有--project和--global两个作用域参数用来指定操作的是项目配置还是用户全局配置。我个人建议钩子尽量绑定项目因为全局钩子很容易把个人习惯带到团队项目里引发奇怪的冲突。对于喜欢用外部AI工具的人这次CLI也可以直接和外部CLI工具串起来。比如你装了Codex CLI完全可以在钩子脚本里调用codex命令让AI在特定事件发生时自动审查代码。我在后面的实操案例里会演示这个玩法。本质上CLI增强的意义就是让VSCode从一个“被操作对象”变成了“操作者”。2.3 钩子系统的事件模型与配置规范钩子的配置格式类似launch.json我建议直接用.vscode/hooks.json管理它的结构如下{ version: 1, hooks: [ { event: onDidSave, script: ${workspaceFolder}/.vscode/hooks/on_save.sh, when: ${file.extension} py, timeout: 15000 }, { event: onWillSave, script: bash ${workspaceFolder}/.vscode/hooks/pre_save.sh, when: ${file.endsWith(test.py)} !${file.dirname.includes(node_modules)} } ] }事件类型目前主要分几类文件事件onWillSave、onDidSave、onOpenFile、onCloseFile编辑器事件onDidChangeActiveText切换活动文件时触发命令事件onCommandStart、onCommandEnd可以监听指定的VSCode命令ID任务事件onTaskStart、onTaskEnd和任务系统联动调试事件onDidStartDebug、onDidStopDebug其中when条件表达式是钩子的核心。它和settings.json里的when表达式语法一致支持逻辑运算、文件路径匹配、环境变量判断。没写好when会造成脚本在不该跑的时候乱跑。钩子脚本支持三态系统Shell命令比如bash脚本、Python脚本适合读取环境变量和操作文件。VSCode内部Node脚本适合快速调用VSCode API但需要以.js文件形式提供。可执行文件适合二进制工具。执行钩子时VSCode会设置几个环境变量VSCODE_EVENT、VSCODE_FILE、VSCODE_WORKSPACE、VSCODE_PID。脚本里可以直接用这些变量判断上下文。比如保存Python文件时VSCODE_FILE就是当前文件路径。我踩过的一个坑是钩子的执行是有超时控制的。默认timeout是5000毫秒如果你在保存时同步跑一个耗时的黑盒格式工具会直接把编辑器卡住最后被强制中断。我的建议是把耗时的操作变成异步的或者把timeout调大到合理范围比如15000毫秒再配合任务系统做后台执行。3. 实操演示用技能CLI钩子搭建一条自动化流水线前面讲了这么多概念我们来做一个完整的案例。目标很简单团队内的Python项目每次保存.py文件后自动执行格式化和单元测试并把测试结果生成一份报告同时保存时让AI工具扫一眼代码把有问题的地方加到“待办”里。整个过程不需要装额外的第三方插件全部用技能市场、CLI和钩子完成。3.1 先做一个团队技能包我建议先把“格式化和测试”做成一个技能包这样新成员一条命令就能装好整个环境。先在项目里建一个skiller文件夹skiller/ skill.json hooks.json scripts/ post_save.shskill.json写成这样{ name: team-python-flow, version: 0.3.0, description: 团队Python项目保存后自动格式化并跑测试, dependencies: [ ms-python.python, ms-python.black-formatter, ms-python.debugpy ], settings: { python.formatting.provider: black, python.testing.pytestEnabled: true, python.testing.pytestArgs: [tests] } }然后写scripts/post_save.sh这里就是团队定义的“保存后动作”#!/usr/bin/env bash set -e WORKSPACE$VSCODE_WORKSPACE FILE$VSCODE_FILE black $FILE cd $WORKSPACE pytest tests/ --maxfail1 --tbshort | tee .reports/last_test.log code skill list .reports/skills.txt脚本里用到了CLI命令code skill list这就是我在2.2节说的——脚本和CLI是可以互相调用的。钩子脚本执行时VSCODE_WORKSPACE和VSCODE_FILE会自动注入不需要自己猜路径。3.2 用钩子把技能和CLI串起来技能里的hooks.json负责把上面的脚本挂到编辑器事件上{ version: 1, hooks: [ { event: onDidSave, script: ${workspaceFolder}/skiller/scripts/post_save.sh, when: ${file.extension} py, timeout: 30000 } ] }这里${file.extension} py是关键保证不是Python文件时不触发。timeout设成30秒因为要跑完整测试脚本执行时间会稍长。然后在项目根目录执行code skill install ./skiller这条命令会自动把技能里的设置合并到.vscode/settings.json把钩子注册到.vscode/hooks.json。安装完成后你还可以直接用CLI确认code skill list code hook list两个命令的输出应该能看到刚刚安装的team-python-flow和对应的onDidSave钩子。3.3 在钩子里再塞一个AI审查步骤这一步是把外部CLI工具接进来。我在钩子脚本最后加上了一段调用codex的代码用AI对新保存的文件做一次快速审查if command -v codex /dev/null; then codex review $FILE --format concise .reports/ai_review.log fi注意我用的是codex review这个命令实际使用时要看你装的CLI工具的具体指令格式。像Codex CLI本身支持/model、/resume这些参数你可以根据自己的需求调整。这里想强调的不仅仅是某个AI工具而是钩子脚本可以调用任何系统命令VSCode不会限制你。如果你不想把AI审查放到保存时也可以注册一个onCommandStart钩子监听用户执行特定命令时触发。这样更可控。3.4 验证整个流水线为了确保事情真的按预期跑起来我写了一个临时Python文件demo.py内容故意漏了类型注解然后保存。保存瞬间终端会弹出钩子的执行日志可以在输出面板里打开“Hooks”日志通道查看。日志大致长这样[onDidSave] triggered by /path/to/demo.py [black] reformatted demo.py [pytest] collected 3 items [pytest] 1 failed, 2 passed [codex] analysis complete, saved to .reports/ai_review.log如果某些步骤失败了set -e会让脚本立刻退出钩子也会返回非零状态码VSCode会在状态栏弹出通知提示“钩子执行失败”。这和我以前用外部watchman或者插件做自动化相比路径短了很多而且配置都在项目里可审计。另外我特意把报告路径.reports加入了.gitignore避免测试日志和AI审查结果污染仓库。团队其他成员拉代码之后只需要执行code skill install ./skiller就能获得完全一致的保存后工作流。4. 高频问题与避坑记录4.1 技能市场连接失败、搜索不到技能这是我实测下来遇到最多的问题。VSCode的技能市场默认连接官方服务器如果你所在网络的访问状况不好会出现搜索超时、技能详情加载不出的情况。我建议先确认网络连通性再检查是否配置了错误的镜像源。技能市场的镜像源配置在settings.json里{ skill.marketplace.url: https://your-mirror.example.com }如果公司内部有搭建私有技能市场直接把地址填到这里即可。不建议随便使用来路不明的公共镜像可能拿到被篡改过的技能包。另外本地团队内部分发技能最稳的方式是把技能文件夹放进Git仓库用code skill install ./skiller直接从本地安装根本不依赖远程市场。4.2code命令在终端里提示找不到这个和旧版一样解决思路没有变。新版安装包在安装时默认会加入系统PATH但如果你升级过系统或者用绿色便携版code命令可能丢了。在macOS上我习惯直接使用完整路径/Applications/Visual Studio Code.app/Contents/Resources/app/bin/codeWindows上可以先跑一次安装程序并勾选“添加到PATH”或者用where code排查当前code命令的实际路径。Linux下一般是/usr/bin/code或者/usr/local/bin/code如果找不到检查安装目录。这里有个小坑新版CLI的命令是拆分成了多个子命令如果直接运行code --skill install这样的旧写法会报错必须用code skill install。我一开始没看帮助习惯性用旧参数白白浪费了几分钟。4.3 钩子不执行或者重复执行钩子不执行先看三处事件名是否正确、when表达式是否成立、脚本路径是否有效。事件名必须和官方文档一致大小写敏感。比如保存事件叫onDidSave你写成onSave就不会触发。第二个是when条件我建议先在表达式里故意写一个必然成立的条件测试比如when: true确认钩子机制本身没问题再逐步加入过滤条件。重复执行多半是因为你的环境里既有项目级钩子又有用户级钩子而且两者注册了同一个事件。可以在code hook list里加上--verbose看每一行是从哪个作用域来的。如果确实需要两个钩子都保留那就要在脚本里加幂等逻辑用一个锁文件避免并发执行if [ -f /tmp/vscode-hook.lock ]; then exit 0 fi touch /tmp/vscode-hook.lock # 实际任务 sleep 1 rm -f /tmp/vscode-hook.lock这样即使被触发两次也不会把测试连续跑两遍。4.4 团队协作时配置漂移这是我们团队实际遇到的头疼问题。有人改了settings.json有人升级了技能包还有人直接在钩子里改了系统路径最后大家本地行为完全不一致。我给出的方案很简单把技能目录和.vscode/hooks.json都纳入Git仓库并且在团队文档里写明必须使用code skill install安装而不是手动改配置。同时技能包里所有脚本都使用${workspaceFolder}和内置环境变量不要写死绝对路径。跨平台场景下如果脚本又要跑在Windows又要跑在macOS我建议写成Node脚本因为Node在VSCode自带的运行时里可以直接执行不需要用户额外安装解释器而Bash脚本在Windows上会折腾不少。还可以利用CLI的导出功能code env export .vscode/env_backup.json把它提交到仓库别的成员可以用code env import快速对齐环境。我在新电脑上配环境的时间缩短到了十分钟以内。5. 关于这次更新我再多聊几句这三个新特性放在一起我最大的感受是VSCode正在从“编辑器里的插件”往“项目级自动化平台”走。技能市场提供标准化的环境分发CLI让自动化可以脱离图形界面运行钩子支持给所有自动化动作提供了触发器。以前我一个项目要同时维护husky、Makefile、.vscode/settings.json、pre-commit配置四个地方现在至少有一部分可以统一到技能和钩子体系里来。我个人目前最稳妥的用法是把“轻量任务”放进钩子把“重量任务”放进VSCode Task然后让钩子去调用code exec来运行任务。这样钩子本身不阻塞编辑器任务系统负责管理复杂的执行逻辑和错误提示。比如保存时只做文件内容层面的快速检查提交前再触发完整的测试和构建任务。如果你同样喜欢折腾这些底层机制建议先从一个很小的钩子开始体验比如保存文件后自动运行echo saved熟悉了事件和when表达式之后再上复杂技能。别一上来就把一堆扫码、测试、AI审查全塞进保存事件里那样会让每次保存都卡几秒你会果断关掉这些功能然后错过这次更新真正有价值的部分。最后分享一个小技巧code hook run可以手动触发任意钩子这意味着你完全可以把钩子当成“命令别名”来用。比如注册一个onCommandStart钩子监听某个自定义命令然后在命令行执行code hook run onCommandStart --args lint就等于一条CLI命令完成了一套工作流。这比直接写一堆shell函数可读性好而且这些配置能随着项目走新同事一看就懂。