Sublime GUI启动不继承终端PATH,需手动配置绝对路径:Go用gopls绝对路径、Java编译器和working_dir匹配包结构、Python/C等语言Build System写死解释器路径,并重启进程生效。

subl 命令无效、go 找不到、javac 报 command not found——这些问题不是 Sublime 配错了,是它根本没拿到你终端里能用的环境变量。GUI 启动方式(双击图标、开始菜单、Dock)在 macOS/Linux/Windows 上都默认不继承 shell 的 $PATH,必须手动补全或硬编码。
为什么 GUI 启动的 Sublime 没有 PATH?
macOS 和 Linux 的图形会话启动应用时,不加载 ~/.zshrc 或 ~/.bash_profile;Windows 从开始菜单启动 Sublime,用的是系统登录时缓存的环境变量快照,改了 PATH 不重启进程就看不到。这不是插件或配置问题,是操作系统级行为。
- 验证方法:在 Sublime 里按
Ctrl+`打开控制台,输入import os; print(os.environ.get('PATH')),对比终端里echo $PATH的输出 - 常见错觉:以为装完 Go/JDK 就自动可用,其实只是终端能用,Sublime 进程完全隔离
- Windows 用户特别注意:必须把
bin目录加到「系统变量」Path,仅「用户变量」对 GUI 启动无效
Go 环境:gopls 必须用绝对路径
LSP-Go 插件默认查 $PATH 启动 gopls,但 GUI 启动下这个变量常为空。不硬编码,语言服务器直接起不来,跳转、补全、诊断全失效。
- 先在终端运行
which go和which gopls,记下完整路径,例如/Users/you/go/bin/gopls - 打开
Preferences → Package Settings → LSP → Settings,在"clients"下写死路径:{ "gopls": { "command": ["/Users/you/go/bin/gopls"], "enabled": true } } - 别装 GoSublime:它和
gopls冲突,且已停止维护 - 项目根目录必须有
go.mod,否则gopls当普通文本处理,所有功能退化
Java 编译:working_dir 和 classpath 必须匹配 package 结构
Could not find or load main class 错误几乎全是工作目录或类名写法不对,和代码本身无关。
- Build System 的
"shell_cmd"必须用绝对路径,例如"/usr/lib/jvm/jdk-17.0.1/bin/javac",不能只写javac - 带
package com.example;的文件,"working_dir"要设为$file_path/../../..(即包含com/目录的父目录) - 编译命令必须加
-d .输出 class 到包结构路径,运行命令传入的是全限定类名(如com.example.Hello),不是文件名 - 中文源码必加
-encoding UTF-8,Windows 下java命令建议额外加-Dfile.encoding=UTF-8
Python / C / 其他语言:Build System 里别信自动继承
所有 Build System 的 "cmd" 或 "shell_cmd" 字段,只要涉及解释器或编译器,一律优先写绝对路径。尤其当你机器上装了多个 Python(比如 pyenv)、多个 JDK 或 MinGW/MSVC 混用时,PATH 查找顺序不可控。
- Python 示例(避免中文乱码):
"cmd": ["/usr/local/bin/python3", "-u", "$file"]
,其中-u强制无缓冲输出,防止 Sublime 输出面板卡住 - C 语言示例(兼容 Windows/macOS/Linux):
"cmd": ["/usr/bin/gcc", "$file", "-o", "$file_base_name"]
,Windows 用"cmd": ["C:\MinGW\bin\gcc.exe", "$file", "-o", "$file_base_name"]
- 统一加
"file_regex": "^(.*?):([0-9]+):([0-9]+): (.*)$",让错误行可点击跳转 - EnvFile 插件可加载项目级
.env,但只对 Build System 生效,不影响 LSP 或语法检查——LSP 的环境变量得单独在插件设置里填
subl.exe,Linux 上 pkill subl。不彻底清理旧进程,PATH 永远不会更新。

















