必须显式指定working_dir字段,否则sublime默认在启动目录执行命令,导致相对路径导入失败、配置文件读取不到等问题;最常用的是"$file_path"表示当前文件所在目录。

working_dir 字段必须显式指定
Sublime 的 build_systems 不会自动把工作目录设为当前文件所在路径,哪怕你只运行一个 .py 或 .cpp 文件。不写 working_dir,命令默认在 Sublime 启动时的工作目录下执行(通常是用户主目录或安装目录),极易导致相对路径导入失败、配置文件读取不到、node_modules 找不到等现象。
常用 working_dir 变量及适用场景
Sublime 支持一组内置变量,用法简单但容易混淆:
-
$file_path:当前文件所在目录(不含文件名),最常用。适合脚本依赖同目录下的config.json或data/子目录 -
$project_path:项目根目录(即.sublime-project所在路径)。适合多文件协作项目,如前端项目中tsc -p .或npm run build -
.:字面量点号,表示“当前打开的文件夹”——仅在单文件夹项目中可靠;若项目含多个folders,它可能指向第一个路径,行为不稳定 -
${file_path}和$file_path等价,但大括号写法在嵌套路径中更安全(如"${file_path}/../shared")
Windows 下路径分隔符和空格问题
Windows 用户常踩两个坑:
- 路径含空格(如
C:My Projectsrc)时,cmd数组里直接拼接会导致命令截断,必须用双引号包裹整个路径变量:"cmd": ["python", "$file"]是安全的,但"cmd": ["cd", "$file_path", "&&", "python", "$file"]会崩——这种 shell 链式调用应改用shell_cmd+ 引号转义 - 分隔符用
/或\均可,但不能混用;$file_path返回的是系统原生格式(Windows 返回C:oo),所以不要手动替换成/foo
项目级配置优先于用户级配置
如果你同时在 Packages/User/Python.sublime-build 和 myproject.sublime-project 中定义了 working_dir,后者会生效。但注意:
- 项目文件中的
build_systems必须完整包含working_dir字段,不能只靠继承 - 修改
.sublime-project后必须关闭再重新打开项目,否则working_dir不刷新 - 如果项目配置里写了
"working_dir": "$project_path",但$project_path实际为空(比如没保存项目就直接编辑了 project 文件),Sublime 会静默 fallback 到默认目录,控制台也无提示
working_dir 看似生效了,但子进程(比如 Python 调用的 subprocess.run(["ls"]))实际工作目录仍是启动时的路径——这时候得检查是否被 shell 封装层或环境变量干扰。











