只有同时满足cargo和rustc在sublime控制台可调用、右下角语法手动设为rust、rust-analyzer路径配置为绝对路径这三件事,lsp补全、跳转、诊断及ctrl+b运行才真正可用;缺一即静默失效。

cargo 和 rustc 在 Sublime 控制台里能跑,右下角显示 Rust,rust-analyzer 路径写死为绝对路径——这三件事全做到,LSP 补全、跳转、错误诊断、Ctrl+B 运行才真正可用。少一个,功能就静默失效,不报错,只“没反应”。
验证 cargo 和 rustc 是否真被 Sublime 识别
终端里能跑不等于 Sublime 里能调用。Sublime 启动时读的是自己的环境变量,和 shell 配置无关。
- 按
Ctrl+`打开 Sublime 控制台,执行:import os; print(os.environ.get('PATH'))
确认输出中包含.cargo/bin(如/Users/xxx/.cargo/bin或C:\Users\xxx\.cargo\bin) - macOS/Linux:确保
~/.cargo/bin已写入~/.zshrc(或对应 shell 配置),并执行source ~/.zshrc;但 GUI 启动的 Sublime 不加载它,推荐从终端用subl启动 - Windows:必须把
%USERPROFILE%\.cargo\bin加进「系统环境变量」,加完要彻底退出 Sublime(不是关窗口),再重开 - 如果控制台里
subprocess.run(['cargo', '--version'])报FileNotFoundError,就是 PATH 没继承到,别往下配插件
右下角必须手动选 Rust,不是 Plain Text
Sublime 不自动识别 .rs 文件,靠右下角语法标识匹配 source.rust ——这个 selector 错了,构建、高亮、LSP 全挂。
- 打开任意
.rs文件,点右下角状态栏(默认显示Plain Text),手动选Rust - 如果列表里没有
Rust,说明插件未加载:用 Package Control 安装Rust(by rust-lang),不要装 RustEnhanced;二者共存会导致状态栏卡死在Plain Text - 装完后进
View → Syntax → Rust → Rust,设为默认,避免每次手动切 - 检查 LSP 设置中
"scopes": ["source.rust"]和"syntaxes": ["Packages/Rust/Rust.sublime-syntax"]是否与之严格对应
rust-analyzer 必须用绝对路径,不能依赖 PATH 或 ~
cargo install rust-analyzer 已废弃,rustup component add rust-analyzer 在 macOS/Linux 上常静默失败。LSP 插件找不到可执行文件,就直接放弃连接。
- 去 rust-lang/rust-analyzer/releases 下载对应平台二进制(如
rust-analyzer-x86_64-unknown-linux-gnu) - 解压后得到单个无后缀可执行文件,放进:
Linux/macOS:/usr/local/bin/rust-analyzer
Windows:%USERPROFILE%\.cargo\bin\rust-analyzer.exe - 终端运行
rust-analyzer --version验证可执行 - LSP 设置中
"command"必须写绝对路径:"command": ["/usr/local/bin/rust-analyzer"](不能只写["rust-analyzer"])
构建系统要配对 shell_cmd、working_dir 和 file_regex
网上抄的 JSON 常漏关键字段,导致 cargo 找不到 Cargo.toml,或错误信息无法双击跳转。
- 用
"shell_cmd": "cargo run",不用"cmd":前者走系统 shell,能复用 PATH 和别名;后者直调进程,Windows 上空格路径大概率崩 -
"working_dir": "${project_path:${folder}}"必须写:否则cargo在当前文件目录执行,找不到项目根下的Cargo.toml,直接报no Cargo.toml found -
"file_regex": "^(.*?):([0-9]+):([0-9]+):.*$"必须配:否则编译报错后点不了错误行,跳转失效 - 单文件快速测试可用
"shell_cmd": "rustc $file -o $file_path/$file_base_name && $file_path/$file_base_name",但仅限含fn main() { }的独立文件
PATH、文件的 source.rust 标识、LSP 配置里的绝对 rust-analyzer 路径。任一错位,功能就断链,且不提示——你只会觉得“怎么又没反应”。











