第142章 指南:如何从 RustRover 迁移到 Zed
本指南涵盖按键映射、设置配置,以及 Rust 开发者从 RustRover 切换时需注意的差异。
安装 Zed
Zed 支持 macOS、Windows 和 Linux。
macOS 用户可从 zed.dev/download 下载,或通过 Homebrew 安装:
brew install --cask zed
Windows 用户可从 zed.dev/download 下载安装程序,或通过 winget 安装:
winget install Zed.Zed
对于大多数 Linux 用户,通过官方安装脚本安装 Zed 最为简便:
curl -f https://zed.dev/install.sh | sh
安装完成后,你可以通过应用程序文件夹(macOS)、开始菜单(Windows)启动 Zed,或在终端中直接输入 zed . 来打开当前目录。
配置 JetBrains 按键映射
如果你来自 RustRover,要最快获得熟悉的手感,建议使用 JetBrains 按键映射。在新手引导期间,你可以将其选为基准按键映射。如果跳过了该步骤,也可以随时更改:
- 按
Cmd+,(macOS)或Ctrl+,(Linux/Windows)打开设置 - 搜索
Base Keymap - 选择
JetBrains
此映射保留了熟悉的快捷键,例如:使用 Shift Shift 执行“搜索所有”(Search Everywhere),Cmd+O 跳转至类(Go to Class),Cmd+Shift+A 查找操作(Find Action)。
在编辑器中,JetBrains 按键映射还支持 Alt+Left / Alt+Right 和 Shift+Alt+Left / Shift+Alt+Right 按子单词移动和选择。这样,camelCase 和 snake_case 等标识符的行为将类似于 RustRover 的 CamelHumps 导航方式。
配置编辑器偏好
大多数设置可在设置编辑器({#kb zed::OpenSettings})中配置。如需高级设置,请通过命令面板运行 {#action zed::OpenSettingsFile} 直接编辑设置文件。
RustRover 用户通常会首先配置以下设置:
| Zed 设置项 | 功能说明 |
|---|---|
format_on_save |
保存时自动格式化。设置为 "on" 即可启用(默认使用 rustfmt)。 |
soft_wrap |
长行自动换行。选项:"none"、"editor_width"、"preferred_line_length" |
preferred_line_length |
换行和标尺使用的列宽。Rust 约定通常为 100。 |
inlay_hints |
内联显示类型提示、参数名称及方法链提示。 |
relative_line_numbers |
如果你之前使用 IdeaVim,这个选项会很实用。 |
Zed 还支持按项目设置。在项目根目录创建 .zed/settings.json 文件,即可针对该项目覆盖全局设置。
提示:如果你正在加入一个现有项目,首次提交代码前请先检查
format_on_save设置。否则,当你只想修改一行时,可能会不小心重新格式化整个文件。
打开或创建项目
完成初始设置后,按下 Cmd+Shift+O(假设使用 JetBrains 键位)即可打开一个文件夹。在 Zed 中,这就是你的工作区。
若要启动新项目,请在终端中使用 Cargo:
cargo new my_project
cd my_project
zed .
如果是创建库:
cargo new --lib my_library
你也可以在任意现有的 Cargo 项目内部,通过终端运行 zed . 来启动 Zed。
进入项目后:
- 使用
Cmd+Shift+O或Cmd+E在文件间快速跳转(类似 RustRover 的“最近文件”) - 使用
Cmd+Shift+A或双击Shift打开命令面板(类似 RustRover 的“随处搜索”) - 使用
Cmd+O搜索符号(类似 RustRover 的“转到符号”)
打开的缓冲区会以标签页形式显示在顶部。项目面板展示文件树和 Git 状态,可通过 Cmd+1 切换显示(就像 RustRover 的项目工具窗口)。
按键绑定的差异
如果在入门向导中选择了 JetBrains 键位,你大多数快捷键应该已经感觉很熟悉了。以下是 Zed 与 RustRover 的快速对照参考。
常见的通用按键绑定
| 操作 | 快捷键 |
|---|---|
| 随处搜索 | Shift Shift |
| 查找操作 / 命令面板 | Cmd + Shift + A |
| 跳转到文件 | Cmd + Shift + O |
| 跳转到符号 | Cmd + O |
| 最近文件 | Cmd + E |
| 跳转到定义 | Cmd + B |
| 查找用法 | Alt + F7 |
| 重命名符号 | Shift + F6 |
| 格式化代码 | Cmd + Alt + L |
| 切换项目面板 | Cmd + 1 |
| 切换终端 | Alt + F12 |
| 复制当前行 | Cmd + D |
| 删除当前行 | Cmd + Backspace |
| 上移/下移当前行 | Shift + Alt + Up/Down |
| 扩大/缩小选区 | Alt + Up/Down |
| 按子词移动 | Alt + Left/Right |
| 按子词选中 | Shift + Alt + Left/Right |
| 注释当前行 | Cmd + / |
| 后退 / 前进 | Cmd + [ / Cmd + ] |
| 切换断点 | Ctrl + F8 |
不同的快捷键(RustRover → Zed)
| 操作 | RustRover | Zed(JetBrains 键位方案) |
|---|---|---|
| 文件结构 | Cmd + F12 |
Cmd + F12(大纲) |
| 跳转到下一个错误 | F2 |
F2 |
| 运行 | Ctrl + R |
Ctrl + Alt + R(任务) |
| 调试 | Ctrl + D |
Alt + Shift + F9 |
| 停止 | Cmd + F2 |
Ctrl + F2 |
| 展开宏 | Alt+Enter |
Cmd + Shift + M |
Zed 独有的快捷键
| 操作 | 快捷键 | 说明 |
|---|---|---|
| 切换右侧面板 | Cmd + R |
Agent 面板、通知 |
| 拆分窗格 | Cmd + K,然后按方向键 |
可朝任意方向拆分 |
自定义快捷键的方法
- 打开命令面板(按
Cmd+Shift+A或连续按两次Shift) - 运行 {#action zed::OpenKeymap}
这会列出所有可用的快捷键映射。你可以覆盖单个快捷键或解决冲突。
Zed 还支持按键序列(多键快捷键)。
界面差异
不同的分析引擎
RustRover 使用自有的 Rust 智能代码分析引擎。Zed 则通过 Language Server Protocol (LSP) 使用 rust-analyzer。
这意味着:
- 自动补全、跳转定义、查找引用、类型推断 — 均通过 rust-analyzer 在 Zed 中提供
- 宏展开 — 两者均支持(在 Zed 中按
Cmd+Shift+M) - Inlay hints(内嵌提示) — 两者均支持类型、参数及链式调用提示
你可能注意到的差异:
- RustRover 中的某些重构操作在 rust-analyzer 中可能没有对应功能
- RustRover 特有的代码检查(除 Clippy 外)在 Zed 中不存在
- 在 Zed 中,rust-analyzer 通过 JSON 配置,而非 GUI 界面
适应建议:
- 按
Alt+Enter触发可用的代码操作,rust-analyzer 提供了很多选项 - 在项目特定的
.zed/settings.json中配置 rust-analyzer 设置 - 运行
cargo clippy进行代码检查(它与 rust-analyzer 诊断功能集成)
项目配置
两款编辑器都将每个项目的配置存储在隐藏文件夹中。RustRover 使用 .idea(包含 XML 文件),Zed 使用 .zed(包含 JSON 文件)。
运行配置无法自动迁移。 RustRover 将运行/调试配置存储在 .idea 中,没有自动迁移路径。你需要在 .zed/tasks.json 中将其重新创建为 Zed tasks(任务),并在 .zed/debug.json 中配置调试设置。
没有 Cargo 工具窗口。 RustRover 提供工作区成员、目标、特性及依赖项的可视化树。Zed 没有此功能,你需要直接操作 Cargo.toml 和 Cargo CLI。
工具链管理是外部化的。 RustRover 允许你在设置界面中选择和切换工具链。在 Zed 中,你需要通过 rustup 来管理工具链。
配置是可选的。 打开项目时,RustRover 会自动生成 .idea 目录。Zed 不会生成任何文件。你需要按需手动创建 .zed/settings.json、tasks.json 和 debug.json。
如何适应:
- 在项目根目录创建一个
.zed/settings.json文件,用于配置项目专属设置 - 在
tasks.json中定义常用命令(可通过命令面板打开:{#action zed::OpenTasks}):
[
{
"label": "cargo run",
"command": "cargo run"
},
{
"label": "cargo build",
"command": "cargo build"
},
{
"label": "cargo test",
"command": "cargo test"
},
{
"label": "cargo clippy",
"command": "cargo clippy"
},
{
"label": "cargo run --release",
"command": "cargo run --release"
}
]
- 使用
Ctrl+Alt+R快速运行任务 - 对于任务未覆盖的操作,请充分利用终端(
Alt+F12)
无 Cargo 集成界面
RustRover 的 Cargo 工具窗口提供了可视化界面,让你可以访问项目的构建目标、依赖项以及常用 Cargo 命令。你只需点击即可运行构建、测试和基准测试。
Zed 没有提供 Cargo 图形界面。你可以通过以下方式与 Cargo 交互:
- 终端 — 直接运行任何 Cargo 命令
- 任务 — 为常用命令定义快捷方式
- 边缘图标 — 通过可点击的图标运行测试和二进制文件
如何适应:
- 熟悉 Cargo CLI 命令:
cargo build、cargo run、cargo test、cargo clippy、cargo doc - 为你频繁使用的命令创建任务
- 对于依赖管理,直接编辑
Cargo.toml(rust-analyzer 会为 crate 名称和版本提供自动补全)
工具窗口与停靠栏
RustRover 把各种辅助视图组织成带编号的工具窗口(Project = 1,Cargo = Alt+1,Terminal = Alt+F12 等)。Zed 也有类似的概念,叫做"docks"(停靠面板):
| RustRover 工具窗口 | Zed 对应面板 | 快捷键(JetBrains 键位) |
|---|---|---|
| Project (1) | Project Panel | Cmd + 1 |
| Git (9 或 Cmd+0) | Git Panel | Cmd + 0 |
| Terminal (Alt+F12) | Terminal Panel | Alt + F12 |
| Structure (7) | Outline Panel | Cmd + 7 |
| Problems (6) | Diagnostics | Cmd + 6 |
| Debug (5) | Debug Panel | Cmd + 5 |
Zed 有三个停靠位置:左侧、底部和右侧。面板可以通过拖拽或在设置中移动到不同位置。
注意,Zed 中没有专门的 Cargo 工具窗口。常用 Cargo 命令可以直接在终端执行,或者定义为任务(task)。
调试
RustRover 和 Zed 都支持 Rust 集成调试,但底层实现不同:
- RustRover 使用自带的调试器集成
- Zed 使用 CodeLLDB(VS Code 中广受欢迎的那个调试适配器)
在 Zed 中调试 Rust 代码:
- 用
Ctrl+F8设置断点 - 用
Alt+Shift+F9开始调试,或按F4选择调试目标 - 用
F7(单步进入)、F8(单步跳过)、Shift+F8(单步跳出)逐行调试 - 用
F9继续执行
Zed 能自动检测 Cargo 项目中可调试的目标,按 F4 即可查看可用选项。
如需更精细的控制,可以创建一个 .zed/debug.json 文件:
[
{
"label": "Debug Binary",
"adapter": "CodeLLDB",
"request": "launch",
"program": "${workspaceFolder}/target/debug/my_project"
},
{
"label": "Debug Tests",
"adapter": "CodeLLDB",
"request": "launch",
"cargo": {
"args": ["test", "--no-run"],
"filter": {
"kind": "test"
}
}
},
{
"label": "Debug with Arguments",
"adapter": "CodeLLDB",
"request": "launch",
"program": "${workspaceFolder}/target/debug/my_project",
"args": ["--config", "dev.toml"]
}
]
运行测试
RustRover 拥有专用的测试运行器,通过可视化界面显示每个测试的通过/失败状态。Zed 则通过以下方式运行测试:
- 侧边栏图标 — 点击
#[test]函数或测试模块旁边的播放按钮 - 任务 — 在
tasks.json中定义cargo test命令 - 终端 — 直接运行
cargo test
测试输出会显示在终端面板中。若需更详细的输出,请使用:
cargo test -- --nocapture以查看 println! 的输出cargo test -- --test-threads=1以串行执行测试cargo test specific_test_name以运行单个测试
扩展与插件的区别
RustRover 提供了完整的 JetBrains 插件目录。
Zed 的扩展目录规模较小,但更专注于以下领域:
- 语言支持与语法高亮
- 主题
- 上下文服务器(Context servers)
在其他编辑器中可能需要插件实现的若干功能,在 Zed 中已内置:
- 带语音聊天的实时协作
- AI 编码辅助
- 内置终端
- 任务运行器
- rust-analyzer 集成
- rustfmt 格式化
Zed 中尚未具备的功能
以下是 RustRover 提供而 Zed 目前尚未支持的功能:
- 性能分析器集成 — 需使用
cargo flamegraph、perf或其他外部性能分析工具 - 数据库工具 — 使用 DataGrip、DBeaver 或 TablePlus
- HTTP 客户端 — 使用
curl、httpie或 Postman 等工具 - 覆盖率可视化 — 在外部使用
cargo tarpaulin或cargo llvm-cov
关于许可与遥测说明
关于许可与遥测:
- Zed 是开源的(主要为 GPL 许可,部分组件采用 Apache 许可)
- 遥测功能是可选的,可在入职引导期间或在设置中禁用
Zed 与 RustRover 的协作对比
RustRover 将“Code With Me”作为独立功能提供协作服务。Zed 则将协作功能直接集成在核心体验中。
连接后,你可以实时看到彼此的鼠标指针、选中和编辑操作。系统包含语音聊天功能。无需额外工具或第三方登录。
在 Zed 中使用 AI
Zed 内置了 AI 功能。如果你之前使用过 JetBrains AI Assistant,以下是设置方法。
配置 GitHub Copilot
- 按
Cmd+,(macOS)或Ctrl+,(Linux/Windows)打开设置 - 导航至 AI → 编辑预测
- 在“配置提供商”旁点击 配置
- 在 GitHub Copilot 下,点击 登录 GitHub
登录完成后,直接开始输入即可。Zed 会在行内提供建议供你接受。
其他 AI 选项
要在 Zed 中使用其他 AI 模型,你有以下选择:
- 使用 Zed 托管的模型,具有更高的速率限制。需要身份验证,并通过 Zed Pro 访问。
- 使用你自己的API 密钥,无需身份验证
- 使用外部代理(如 Claude Agent)
高级配置与生产力优化
Zed 为高级用户提供了丰富的设置项,方便精细化调整开发环境。
以下是一些对 Rust 开发者很实用的配置:
保存时格式化(默认使用 rustfmt):
"format_on_save": "on"
配置 Rust 的 inlay hints:
{
"inlay_hints": {
"enabled": true,
"show_type_hints": true,
"show_parameter_hints": true,
"show_other_hints": true
}
}
配置 rust-analyzer(需要手动编辑 JSON):
{
"lsp": {
"rust-analyzer": {
"initialization_options": {
"checkOnSave": {
"command": "clippy"
},
"cargo": {
"allFeatures": true
},
"procMacro": {
"enable": true
}
}
}
}
}
为 rust-analyzer 使用独立的 target 目录(加快构建速度):
{
"lsp": {
"rust-analyzer": {
"initialization_options": {
"rust-analyzer.cargo.targetDir": true
}
}
}
}
这样 rust-analyzer 会使用 target/rust-analyzer 而不是 target,IDE 的分析就不会和你手动执行的 cargo build 冲突了。
启用 direnv 支持(对使用 direnv 的 Rust 项目很有用):
"load_direnv": "shell_hook"
为工作区配置 linked projects:
如果你有多个不在同一 workspace 里的 Cargo 项目,可以把它们告诉 rust-analyzer:
{
"lsp": {
"rust-analyzer": {
"initialization_options": {
"linkedProjects": ["./project-a/Cargo.toml", "./project-b/Cargo.toml"]
}
}
}
}
接下来做什么
环境搭建完成后,可以参考以下资源,充分发挥 Zed 的潜力: