sublime text 不管理 rust 工具链切换,实际由 rustup 控制;需用 rustup run 或 override 设置指定 toolchain,构建系统中应硬编码如 "rustup run nightly cargo build",并验证 cargo 执行环境是否正确。

Sublime Text 本身不管理 Rust 工具链切换,真正起作用的是 cargo 和 rustup;Sublime 只负责把当前项目“正确地交给 cargo”,而工具链选择必须由 rustup 控制——配错就直接报 error: toolchain 'xxx' is not installed 或静默 fallback 到 stable。
rustup toolchain 必须显式指定,不能靠 Sublime 自动识别
Sublime 的构建系统不会读 .rust-version 或自动调用 rustup override set。如果你的项目要求 nightly 或 1.78.0,就得在构建命令里硬编码或设环境变量。
- 最稳妥方式:在
.sublime-build的shell_cmd前加rustup run nightly,例如:"shell_cmd": "rustup run nightly cargo build" - 避免用
rustup default nightly全局切换——会影响其他项目,且 Sublime 启动时可能没继承新 default - 检查是否生效:在 Sublime 控制台运行
import subprocess; subprocess.run(['rustup', 'show', 'active-toolchain']),输出应含你期望的 toolchain 名称
多个项目共存时,override 设置比 default 更可靠
不同 Rust 项目常依赖不同 toolchain(比如一个用 async_trait 需要较新 nightly,另一个 CI 锁死在 1.75.0)。rustup override 是目录级绑定,比全局 default 更安全。
- 进项目根目录执行:
rustup override set 1.78.0(会生成.rust-version文件) - 验证:在该目录下运行
cargo --version,确认输出带1.78.0 - Sublime 构建时只要
working_dir正确(即指向该项目根),cargo就会自动用 override 的 toolchain,无需额外配置
构建系统里混用 toolchain 容易踩的坑
常见错误不是语法写错,而是 shell 层级和 PATH 冲突导致 rustup 找不到或降级执行。
-
"shell_cmd": "cargo +nightly build"可以用,但某些 Windows 环境下+会被 shell 当作参数分隔符崩掉,建议统一用rustup run形式 - 别在
env字段里手动改RUSTUP_HOME或CARGO_HOME——Sublime 不保证子进程完整继承,且容易和用户家目录冲突 - 如果用了 LSP(如
Lsp-rust-analyzer),它的 toolchain 选择是独立的:需在Lsp-rust-analyzer.sublime-settings里配"settings": {"rust-analyzer.rustcSource": "discover"},否则补全/跳转会卡在旧版本 std
切换后验证失败?先盯住 cargo 而不是 Sublime
所有 toolchain 切换问题,本质都是 cargo 在 Sublime 进程里执行时没拿到预期环境。不要一上来调构建系统 JSON,先确认底层命令通不通。
- 打开 Sublime 控制台(
Ctrl+`),运行:import subprocess; subprocess.run(['cargo', '+1.78.0', 'version']) - 若报
FileNotFoundError:PATH 没包含.rustup或.cargo/bin,回退到环境变量排查 - 若报
error: toolchain '1.78.0' is not installed:说明 rustup 根本没装那个版本,得先rustup install 1.78.0 - 成功后才去改
.sublime-build,否则纯属白调
toolchain 切换真正的复杂点不在 Sublime 配置,而在 rustup 的层级关系和 cargo 的执行上下文——它既要看当前目录有没有 override,又要看 rustup 是否已下载对应版本,还得确保 Sublime 进程能调用到 rustup 二进制。漏掉任意一环,cargo build 就会安静地用错版本,连错误提示都懒得给。











