sublime text 中必须用 ${project_path} 而非 $file_path 指定 rust 项目根目录,因后者仅为当前文件所在目录(如 src/),而 cargo 需在含 cargo.toml 的顶层目录运行;${project_path} 仅在通过 open folder 加载项目后有效,且需配合 "shell": true 处理空格路径。

Sublime Text 里不能靠 $file_path 拿到 Rust 项目根目录,必须用 ${project_path},且它只在项目已加载、构建系统被显式启用时才有效。
为什么 $file_path 不是项目根目录
$file_path 是当前打开文件的父目录,比如你在 src/main.rs 编辑,$file_path 就是 src/,而 cargo 要求工作目录是含 Cargo.toml 的那一层(比如 myapp/)。直接用它跑 cargo build 必然报错 “no Cargo.toml found”。
-
${project_path}才对应你通过 File → Open Folder… 打开的那个顶层路径 - 如果没打开文件夹、只打开了单个
.rs文件,${project_path}为空字符串,命令会静默失败 - Windows 下路径含空格时,
"working_dir": "${project_path}"必须配合"shell": true,否则 cmd 解析中断
构建系统里怎么正确写 working_dir
在 Packages/User/Rust.sublime-build 中,必须这样写:
{
"cmd": ["cargo", "build"],
"working_dir": "${project_path}",
"shell": true,
"file_regex": "^(.*?):([0-9]+):([0-9]+): (.*?)(?:\n|$)",
"selector": "source.rust"
}
- 别用
"working_dir": "$file_path"或"working_dir": "${file_path}/.."—— 层级不确定,跨平台也不可靠 - 如果项目含多个文件夹(Add Folder to Project),
${project_path}只取第一个添加的根路径,不是“最外层统一根” - 确保该构建系统被项目显式启用:在
.sublime-project的settings里加"build_system": "Rust",或手动选中 Tools → Build System → Rust
项目没加载时 ${project_path} 为空怎么办
这不是配置错误,是 Sublime 的行为限制。它不支持“自动向上查找 Cargo.toml”来推导项目根。
- 必须通过 File → Open Folder… 打开整个项目目录(即含
Cargo.toml的那层) - 确认右下角语法已设为 Rust(不是 Plain Text),否则构建系统可能不触发
- 检查
.sublime-project文件是否格式正确:folders是必填数组,路径用正斜杠,UTF-8 编码,不能有中文或空格 - 改完
.sublime-project后必须执行 Project → Reload Project,仅保存无效
真正容易被忽略的是:Sublime 的 ${project_path} 和 shell 进程的 PWD 不是一回事——它只在构建系统变量展开阶段起作用,PATH、rust-analyzer 启动等环节还得单独确保 .cargo/bin 在进程环境里。所以即使 working_dir 对了,cargo 命令找不到仍是常见失败点。











