save_on_focus_lost 是唯一真正生效的保存钩子,它在切换到外部窗口时触发真实磁盘写入,不区分语言、不修改不写盘、只对已修改可写文件生效;Rust 文件自动格式化需配合 rust-analyzer 的 formatOnSave 或构建系统模拟,二者必须协同验证。

save_on_focus_lost 是唯一真正生效的保存钩子
Sublime Text 没有“保存前执行命令”或“on_save_pre”这类钩子;所谓“Rust 文件保存钩子”,实际只能靠 save_on_focus_lost 触发真实磁盘写入,再配合外部工具(如 cargo fmt 或 rust-analyzer)实现格式化或检查。任何试图用 auto_save、save_on_modified 等字段实现自动保存的配置都无效——这些键名在 Sublime 源码中根本不存在。
-
save_on_focus_lost必须设为 true,且只在你点击终端、浏览器、桌面等外部窗口时触发一次保存,不修改不写盘,只读文件跳过 - 它不区分语言,对所有已修改可写文件一视同仁,Rust 文件只是其中之一
- 启用后无需重启,改完设置按
Ctrl+S保存 User Settings 即刻生效 - 验证方式:打开一个
main.rs,输入几行代码,点一下桌面,再切回来,用stat main.rs(Linux/macOS)或dir main.rs(Windows)看修改时间是否更新
Rust 文件保存后自动格式化的可行路径
Sublime 本身不支持“保存后调用 cargo fmt”,但可通过构建系统 + 插件组合模拟。关键不是 hook,而是让格式化成为保存流程的自然延伸。
- 确保
cargo fmt在 Sublime 控制台可用:按Ctrl+`,输入import subprocess; subprocess.run(['cargo', 'fmt', '--version']),无FileNotFoundError才算 PATH 正确 - 不要依赖
rustfmt命令本身——2026 年起它已随rustup component add rustfmt安装,但 Sublime 不读 shell 配置,必须确认.cargo/bin在控制台os.environ.get('PATH')输出里 - 推荐用
AutoSave插件 + 自定义 build system:安装 AutoSave 后,在 User Settings 加"auto_save_delay_milliseconds": 1000,再配一个 build system,shell_cmd设为cargo fmt --quiet,working_dir设为${project_path:${folder}} - 注意:该 build system 不要绑定快捷键,仅用于 AutoSave 调用;否则
Ctrl+B会重复触发
为什么别碰 RustEnhanced 的 on_save 配置
RustEnhanced 插件文档里写的 rust_on_save 看似是“保存钩子”,但它实际只是包装了 cargo check 或 clippy,且严重依赖插件自身状态。2026 年多数用户反馈该配置静默失效,主因是:
- 插件未正确识别
.rs文件语法:右下角必须显示Rust,不是Plain Text;否则 selector 匹配失败,rust_on_save根本不运行 -
rust_on_save值设为"check"或"clippy"时,若项目根目录无Cargo.toml,会直接跳过,不报错也不提示 - 它不保证格式化,也不阻塞保存流程——即使
cargo clippy报错,文件照样被save_on_focus_lost写入磁盘 - 与
AutoSave插件共存时,可能因执行时机冲突导致命令卡住或输出乱序
真正可控的保存后动作:用 LSP 配置 rust-analyzer 的 formatOnSave
如果你需要“保存即格式化”,唯一稳定路径是绕过 Sublime 构建系统,走 LSP 协议。rust-analyzer 支持 formatOnSave,但必须手动指定二进制路径,不能依赖 PATH。
- 下载对应平台的
rust-analyzer二进制(如rust-analyzer-aarch64-apple-darwin),放至/usr/local/bin/rust-analyzer(macOS/Linux)或C:\tools\rust-analyzer.exe(Windows) - LSP.sublime-settings 中的
clients配置段必须写绝对路径:"command": ["/usr/local/bin/rust-analyzer"],不能是["rust-analyzer"] - 确保
.rs文件语法设为Rust,且项目根目录含Cargo.toml,否则 rust-analyzer 不启动,formatOnSave不生效 - 该机制在保存瞬间调用 rust-analyzer 的 formatting endpoint,比 shell 构建系统更轻量、更及时,且错误直接标在行尾,不弹出控制台
最易被忽略的一点:rust-analyzer 的 formatOnSave 和 Sublime 的 save_on_focus_lost 是两套独立机制。前者负责格式化内容,后者负责落盘。两者必须同时配置且各自验证通过,才能形成完整闭环——少一个,就只剩半截流程。


















