需在Sublime Text中配置自定义sublime-build文件,显式指定fpc绝对路径、正确file_regex正则匹配错误行号,并处理Windows路径空格、编码及运行后窗口闪退问题。

怎么让 Sublime Text 正确调用 Free Pascal 编译器
Sublime Text 本身不自带 Pascal 支持,必须靠外部编译器(如 fpc)和自定义 sublime-build 文件协同工作。关键不是“装插件”,而是让 Sublime 知道去哪找 fpc、怎么传参、怎么捕获错误行号。
常见错误现象:Unable to find command fpc 或编译后没输出、报错不跳转到对应行。
- 先确认终端里能直接运行
fpc -v;如果不行,说明系统 PATH 没配好,Sublime(尤其 macOS/Linux GUI 启动时)默认不读 shell 的PATH,得在sublime-build里显式写绝对路径,比如/usr/local/bin/fpc或C:\fpc\3.2.2\bin\i386-win32\fpc.exe - Windows 用户注意:不要用带空格的路径(如
Program Files),否则fpc参数解析会崩;建议装到C:\fpc\这类干净路径 -
fpc默认输出是 UTF-8,但 Windows 控制台可能是 GBK,导致中文乱码——这不是 Sublime 问题,而是终端编码不一致,临时解决可加参数-Cg(生成控制台程序时强制用系统编码)
如何写一个靠谱的 Pascal.sublime-build 文件
这个 JSON 文件决定了 Sublime 怎么调用编译器、怎么解析错误、怎么运行结果。不能只抄网上旧模板,要匹配你本地的 fpc 版本和目标平台。
使用场景:单文件编译(.pas)、需要自动运行、希望双击错误跳转到源码行。
- 必须设
"shell_cmd"为完整命令,例如:fpc -Mdelphi -O2 -o"$file_base_name" "$file";其中-Mdelphi是为了兼容常见 Pascal 语法(如begin..end.后多点),-O2开启优化,-o指定输出名避免默认的program覆盖 - 错误正则表达式
"file_regex"必须匹配fpc实际输出格式,新版默认是:^([^:]+):([0-9]+):([0-9]+),对应hello.pas(12,5) Error: ...;如果用的是老版 fpc(输出类似Hello.pas(12,5)带括号),就得改成^([^:]+)\(([0-9]+),([0-9]+)\) - 想编译完自动运行,得加
"variants"分支,用"shell_cmd": "./$file_base_name"(macOS/Linux)或"shell_cmd": "$file_base_name.exe"(Windows),并确保"working_dir": "$file_path"
为什么编译成功却看不到运行结果窗口
这是最常被卡住的一点:Sublime 的 build system 默认只捕获标准输出,但 Pascal 控制台程序退出太快,窗口一闪就没了。
性能 / 兼容性影响:加暂停逻辑本身不耗资源,但硬写 readln 会污染源码逻辑;用外部 wrapper 更干净。
- 推荐方案:不改 Pascal 源码,而用 shell 包一层,比如 Linux/macOS 下
"shell_cmd": "fpc -o\"$file_base_name\" \"$file\" && ./$file_base_name; read -p \"Press enter to continue...\" - Windows 下更麻烦,CMD 不支持分号链式执行,得写成批处理或用 PowerShell:
powershell -Command "& { & './$file_base_name.exe'; pause }" - 另一个思路:把 build 结果输出重定向到 Sublime 的 panel,但
fpc运行时是交互式的,panel 不支持 stdin 输入,所以readln在 panel 里会卡死——这点容易忽略
Mac 上 PATH 不生效的典型表现和修复
即使你在 Terminal 里 fpc -v 正常,从 Finder 双击启动 Sublime 后 build 仍报 command not found,这是 macOS 的沙盒机制导致 GUI 应用无法继承 shell 的 PATH。
可给出简短示例:
{
"shell_cmd": "/usr/local/bin/fpc -o\"$file_base_name\" \"$file\"",
"file_regex": "^([^:]+):([0-9]+):([0-9]+)",
"working_dir": "$file_path",
"selector": "source.pascal"
}
- 别依赖
which fpc的结果——它可能来自 zsh,但 Sublime 启动时用的是系统默认 sh,路径可能不同 - 查真实路径:打开 Terminal,运行
echo $PATH,再运行type -a fpc,取第一个绝对路径 - 如果用了 Homebrew 安装,路径通常是
/opt/homebrew/bin/fpc(Apple Silicon)或/usr/local/bin/fpc(Intel),不能假设都是后者
真正麻烦的不是写配置,而是每次换机器、换 shell、换安装方式,PATH 和 fpc 输出格式都可能变;建议把 fpc 路径和 file_regex 当作两个必验变量,而不是一次配好一劳永逸。










