Sublime中rustfmt需手动配置绝对路径、禁用冲突插件并确保已安装;RustEnhanced插件须启用rustfmt_on_save且设正确rustfmt_path,文件需为Rust语法且位于Cargo项目内。

Sublime 里 rustfmt 不会自动生效,除非你手动配对路径、禁用冲突插件、并确认它真正在 $PATH 里可执行——Sublime 不解析 ~,也不读 shell 的 $PATH,静默失败是常态。
rustfmt --version 在终端能跑,但 Sublime 里没反应
这不是插件问题,而是 Sublime 启动时根本没拿到 rustfmt 的路径。它不继承 shell 环境变量,也不展开波浪号 ~。
- 先在终端运行
cargo install rustfmt(Rust 1.75+ 默认不带) - 再运行
which rustfmt(Linux/macOS)或where rustfmt(Windows),拿到**绝对路径** - Windows 用户注意:路径末尾必须带
.exe,比如C:\Users\username\.cargo\bin\rustfmt.exe - 别写
~/.cargo/bin/rustfmt—— Sublime 看到的就是字面意思,不会替你展开
RustEnhanced 的 rustfmt_on_save 配置要点
这是目前 Sublime 上唯一稳定支持保存即格式化的插件,但它默认关闭 rustfmt,且配置项敏感。
- 打开
Preferences → Package Settings → RustEnhanced → Settings - 确保
"rustfmt_on_save": true是布尔值true,不是字符串"true" - 显式设置
"rustfmt_path"为上一步拿到的绝对路径,例如"/home/alex/.cargo/bin/rustfmt" - 如果保存无反应,按
Ctrl+`打开控制台,看有没有rustfmt: command not found或Permission denied - 别和官方
Rust插件共存——二者语法高亮规则冲突,会导致格式化触发失败
为什么 rustfmt_on_save 有时只对部分文件生效
不是插件 Bug,而是 RustEnhanced 依赖文件语法识别和 Cargo 项目结构双重判断。
- 右下角状态栏必须显示
Rust,不是Plain Text;点它手动切一次,再进View → Syntax → Rust → Rust设为默认 - 文件需在 Cargo 项目内(即存在
Cargo.toml),否则插件可能跳过格式化(尤其对独立.rs文件) - 若文件含
#![cfg_attr(rustfmt, rustfmt_skip)]或// rustfmt-off,rustfmt会主动跳过该区域 - Sublime 不支持
rustfmt的--emit=stdout模式,所以它只能原地覆盖文件,不能预览 diff
最常被忽略的是:rustfmt 路径写对了,但用户忘了 cargo install rustfmt 这一步——Rust 工具链更新后,旧版本 rustfmt 可能已失效,重装才是最快验证方式。


















