laravel pint 在 sublime text 不生效,因 sublime 默认不调用全局 shell 环境中的 pint,需手动配置构建系统或安装 sublimelinter-contrib-pint 插件,并确保 ~/.composer/vendor/bin 在 path 中、项目根目录含 pint.json 配置文件。

为什么 laravel-pint 在 Sublime Text 里不生效?
因为 Sublime Text 默认不调用全局 Shell 环境里的 laravel-pint,它只认你系统 PATH 里明确可执行的二进制路径,且不会自动加载 ~/.composer/vendor/bin 这类 Composer 全局 bin 目录。
常见现象:保存时没反应、右键菜单里找不到 Pint、手动运行命令提示 command not found: pint。
- 确认
laravel-pint是否已全局安装:composer global require laravel/pint - 检查
~/.composer/vendor/bin是否在系统 PATH 中(macOS/Linux 运行echo $PATH;Windows 查环境变量) - Sublime Text 启动方式影响 PATH:从终端用
subl .打开项目,比双击图标更可靠
Sublime Text 安装并配置 SublimeLinter + SublimeLinter-contrib-pint
这不是官方插件,但目前最轻量、最贴近原生 Pint 行为的方案。它不依赖 PHP 插件或复杂构建系统,直接调用 CLI。
- 用 Package Control 安装
SublimeLinter和SublimeLinter-contrib-pint - 确保
SublimeLinter已启用:Preferences → Package Settings → SublimeLinter → Settings,检查"enabled": true - 在项目根目录放
pint.json或.pint.json配置文件,SublimeLinter-contrib-pint会自动识别 - 默认只 lint 不 fix —— 想保存即格式化,需额外配
SublimeLinter的fix模式(见下一条)
让保存时自动运行 pint --write
SublimeLinter 本身不支持自动写入,得靠 Sublime Text 的 on_post_save_async API 自定义命令,或改用 ApplySyntax 类插件思路。
推荐更稳妥的做法:用 Sublime Text 原生构建系统 + 快捷键触发,避免监听保存带来的冲突风险。
- 新建构建系统:
Tools → Build System → New Build System - 填入以下内容并保存为
Pint.sublime-build:
{
"shell_cmd": "pint --write \"$file\"",
"selector": "source.php",
"working_dir": "$project_path",
"quiet": true
}
- 按
Ctrl+Shift+B(Win/Linux)或Cmd+Shift+B(macOS),选Pint,即可对当前文件格式化 - 想绑定快捷键?在
Preferences → Key Bindings加一行:{"keys": ["ctrl+alt+f"], "command": "build", "args": {"build_system": "Pint.sublime-build"}}
pint.json 配置和 Laravel 版本兼容性注意点
新版 Laravel(10.28+)默认启用 psr-12 + phpunit 规则集,但 pint.json 若手动指定规则,可能和 Laravel 内置规则冲突,导致格式化结果不一致。
- 最简配置(推荐):
{"preset": "laravel"}—— 与 Laravel 官方保持同步 - 若项目用 Laravel 9,别盲目套用 Laravel 11 的
pint.json,不同版本 preset 支持的规则项有差异 -
pint --test可预览改动而不写入,调试配置时必用 - Sublime Text 不会自动重载
pint.json修改,改完需重启 Sublime 或手动触发一次构建
真正麻烦的不是配置,是团队里有人用 VS Code + Pint 插件、有人用 Sublime + 构建系统,pint.json 路径、preset 版本、PHP 运行时版本稍有不一致,就会出现“我格式化完你再格式化一遍”的循环。统一开发环境或 CI 强制校验,比编辑器配置更重要。











