是,code命令行工具支持自更新,其逻辑位于Rust源码cli/src/self_update.rs中,通过比对本地与服务器的commit哈希决定是否更新,但仅限官方安装包部署且未被覆盖或重命名的场景。

code 命令行工具本身支持自更新吗
支持,但仅限于通过官方安装包(.exe / .dmg / .deb / .rpm)安装的 VS Code,且 code 命令必须指向系统安装路径下的可执行文件(比如 /usr/bin/code 或 C:\Users\X\AppData\Local\Programs\Microsoft VS Code\bin\code),而非手动软链或 PATH 中的旧副本。
关键点在于:code CLI 的自更新逻辑写在 Rust 源码 cli/src/self_update.rs 里,它只会在启动时检查自身 commit hash 是否与服务器最新 release 一致。如果一致,就跳过;不一致才触发下载+原子替换。
常见误判场景:
- 你用
sudo apt install code安装,但 Ubuntu 官方仓库版本长期滞后——此时code --version显示的是 1.85.0,而官网已发 1.98.0,code --update-id会静默失败,因为 apt 包不带自更新能力 - 你把
code二进制手动拷贝到/usr/local/bin,它就脱离了 VS Code 自身的更新上下文,code --check-updates不生效 - macOS 上用 Homebrew 安装的
code(brew install --cask visualstudiocode)由 Homebrew 管理更新,不是 VS Code 自身逻辑
如何用 code 命令强制触发更新检查
前提是你的 code 是官方安装包部署的、且未被覆盖或重命名。运行以下命令:
code --check-updates
注意:该命令不会立即弹窗或重启,它只是主动发起一次后台检查。成功时终端无输出;失败时可能打印类似 Failed to check for updates: network error 的错误。
更可靠的验证方式是结合日志和网络诊断:
- 先确认能连通更新服务器:
curl -I https://update.code.visualstudio.com/api/update/win32-x64/stable(Windows)、curl -I https://update.code.visualstudio.com/api/update/darwin-arm64/stable(macOS M系列)或对应 Linux 架构路径 - 若返回 200 OK,说明通道正常;若超时或 403,需检查代理、防火墙或 hosts 是否拦截了
update.code.visualstudio.com - 更新实际发生在下次 VS Code 启动时——不是
code --check-updates运行后立刻发生
Linux 下用 code --update-id 更新失败的典型原因
code --update-id 命令依赖一个有效的系统标识符,它不是随便填的字符串。这个 ID 必须来自 code --list-versions 输出的第一行(即当前安装版本的 commit hash)。
正确操作流程:
- 运行
code --list-versions,复制第一行的哈希值(例如7fbcbb93a8e263b3123922598639198256525282) - 再执行
code --update-id=7fbcbb93a8e263b3123922598639198256525282 - 如果提示
Unknown argument: --update-id,说明你用的是非官方渠道安装的code(如 snap 或第三方 repo),该参数不被识别
另一个易错点:某些 Linux 发行版(如 Fedora Silverblue)使用 rpm-ostree,code 被打包为只读层,任何 --update-id 尝试都会被系统拒绝,此时只能等发行版同步或改用 tar.gz 手动安装。
更新后插件和设置真的不会丢吗
会保留,但有前提条件:你没动过用户数据目录,且不是用 sudo apt remove code && sudo apt install code 这类包管理器“重装”方式。
VS Code 的设计是严格分离安装目录和用户目录:
- Windows:用户数据在
%APPDATA%\Code(含extensions、User\settings.json) - macOS:在
~/Library/Application Support/Code - Linux:在
~/.config/Code
只要你是通过官网安装包双击安装、或运行 code --check-updates 触发的更新,所有这些路径的内容都原封不动。唯一例外是便携版(Portable Mode)——它的用户数据默认跟安装目录混在一起,一旦覆盖安装,.vscode 文件夹若放在安装根目录下,就会被新包擦除。
所以最稳妥的做法始终是:别依赖 code 命令更新本体,直接去 https://www.php.cn/link/919431c2f78cb0f50e79937f6dccb356 下载最新安装包覆盖安装。它比命令行更可控,也绕过了所有通道、签名、权限校验的中间环节。











