第140章 如何从 PyCharm 迁移到 Zed
本文介绍了从 PyCharm 迁移到 Zed 时如何配置 Zed,包括快捷键、设置项以及你需要注意的差异。
安装 Zed
Zed 支持 macOS、Windows 和 Linux。
在 macOS 上,你可以从 zed.dev/download 下载,或通过 Homebrew 安装:
brew install --cask zed
在 Windows 上,从 zed.dev/download 下载安装包,或通过 winget 安装:
winget install Zed.Zed
对于大多数 Linux 用户,最简单的方式是通过安装脚本:
curl -f https://zed.dev/install.sh | sh
安装完成后,你可以从应用程序文件夹(macOS)、开始菜单(Windows)启动 Zed,或者在终端直接运行:
zed .
这会在 Zed 中打开当前目录。
配置 JetBrains 键盘映射
如果你从 PyCharm 迁移过来,使用 JetBrains 键盘映射是最快找回熟悉感的方式。在引导设置中,你可以将其选为基础键盘映射。如果当时漏了,之后随时可以更改:
- 按
Cmd+,(macOS)或Ctrl+,(Linux/Windows)打开设置 - 搜索
Base Keymap - 选择
JetBrains
这将映射熟悉的快捷键,例如用 Shift Shift 执行全局搜索,用 Cmd+O 跳转到类,用 Cmd+Shift+A 查找操作。
在编辑器中,JetBrains 键盘映射还让 Alt+Left / Alt+Right 和 Shift+Alt+Left / Shift+Alt+Right 能按单词片段移动和选词,使 camelCase 和 snake_case 等标识符表现得像 PyCharm 的驼峰导航一样。
配置编辑器偏好设置
大多数设置可以在设置编辑器中配置({#kb zed::OpenSettings})。对于高级设置,通过命令面板运行 {#action zed::OpenSettingsFile} 可直接编辑设置文件。
PyCharm 用户通常会首先配置的设置:
| Zed 设置项 | 作用 |
|---|---|
format_on_save |
保存时自动格式化。设为 "on" 即可启用。 |
soft_wrap |
自动换行。可选值:"none"、"editor_width"、"preferred_line_length" |
preferred_line_length |
换行和标尺的列宽。默认是 80,PEP 8 推荐的是 79。 |
inlay_hints |
在代码中内联显示参数名和类型提示,类似 PyCharm 的提示功能。 |
relative_line_numbers |
如果你是从 IdeaVim 转过来的,这个功能很有用。 |
Zed 还支持按项目单独配置。在项目根目录创建一个 .zed/settings.json 文件,即可覆盖该项目的全局设置,作用类似于 PyCharm 里的 .idea 文件夹。
提示:如果你加入的是一个已有项目,第一次提交前先检查一下
format_on_save的配置。否则你可能只想改一行代码,结果整个文件都被重新格式化了。
打开或创建项目
完成初始设置后,按 Cmd+Shift+O(JetBrains 键位方案)即可打开文件夹,它就成为你在 Zed 中的工作区。和 PyCharm 不同,这里没有项目配置向导、没有解释器选择对话框,也不需要设置项目结构。
要新建项目,用终端或文件管理器创建一个目录,然后在 Zed 中打开它即可,编辑器会把该文件夹当作项目根目录。
你也可以在任意文件夹的终端里用以下命令启动 Zed:
zed .
进入项目后:
- 用
Cmd+Shift+O或Cmd+E在文件之间快速跳转(类似 PyCharm 的"Recent Files") - 用
Cmd+Shift+A或Shift Shift打开命令面板(类似 PyCharm 的"Search Everywhere") - 用
Cmd+O搜索符号(类似 PyCharm 的"Go to Symbol")
打开的文件以标签页的形式显示在顶部。项目面板展示文件树和 Git 状态,用 Cmd+1 切换显示(和 PyCharm 的 Project 工具窗口一样)。
快捷键差异
如果你在初始设置时选择了 JetBrains 键位方案,大部分快捷键应该已经让你感到熟悉了。下面是 Zed 与 PyCharm 的快捷键对照速查表。
通用快捷键
| 操作 | 快捷键 |
|---|---|
| 全局搜索 | 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 + 上/下 |
| 扩大/缩小选区 | Alt + 上/下 |
| 按子词移动 | Alt + 左/右 |
| 按子词选择 | Shift + Alt + 左/右 |
| 注释行 | Cmd + / |
| 后退 / 前进 | Cmd + [ / Cmd + ] |
| 切换断点 | Ctrl + F8 |
键位差异(PyCharm → Zed)
| 操作 | PyCharm | Zed(JetBrains 键位) |
|---|---|---|
| 文件结构 | Cmd + F12 |
Cmd + F12(大纲) |
| 跳转至下一错误 | F2 |
F2 |
| 运行 | Ctrl + R |
Ctrl + Alt + R(任务) |
| 调试 | Ctrl + D |
Alt + Shift + F9 |
| 停止 | Cmd + F2 |
Ctrl + F2 |
Zed 独有功能
| 操作 | 快捷键 | 备注 |
|---|---|---|
| 切换右侧停靠栏 | Cmd + R |
Agent 面板、通知 |
| 分屏 | Cmd + K,然后按方向键 |
可在任意方向创建分屏 |
如何自定义键盘快捷键
- 打开命令面板(
Cmd+Shift+A或Shift Shift) - 执行 {#action zed::OpenKeymap}
这将打开所有可用快捷键的列表。你可以覆盖单个快捷键,或移除冲突项。
Zed 还支持按键序列(多键快捷键)。
用户界面差异
无索引过程
如果你在大型项目中用过 PyCharm,肯定熟悉那种等待:"正在建立索引..."的时间从 30 秒到几分钟不等,具体取决于项目规模和依赖项。PyCharm 会为整个代码库构建全面索引以支持代码智能功能,并且在依赖项变更或安装新包时重新建立索引。
Zed 不进行索引。你只需打开文件夹即可立即开始工作,无论项目多大,文件搜索和导航始终快速响应,无需等待索引暂停。
PyCharm 的索引功能支撑着跨整个代码库查找所有用法、理解类层次结构以及检测未使用的导入等功能。Zed 将这些工作委派给语言服务器,它们可能无法进行如此深入或广泛的分析。
适应建议:
- 进行项目范围符号搜索时,使用
Cmd+O/ 转到符号(依赖语言服务器) - 按名称查找文件时,使用
Cmd+Shift+O/ 转到文件 - 跨文件文本搜索时,使用
Cmd+Shift+F——即使在大型代码库中也很快 - 进行深度静态分析时,考虑在终端中运行
mypy、pylint或ruff check等工具
LSP 与原生语言智能
PyCharm 拥有专为 Python 构建的语言分析引擎。该引擎能深刻理解你的代码:它能在无注解的情况下解析类型、跟踪数据流、识别 Django 模型和 Flask 路由,并提供专门的代码重构功能。
Zed 使用语言服务器协议(LSP)实现代码智能。对于 Python,Zed 默认提供多个语言服务器:
- basedpyright(默认)—— 快速的类型检查和自动补全
- Ruff(默认)—— 代码检查和格式化
- ty—— 来自 Astral 的新兴语言服务器,专为速度打造
- Pyright—— 微软的类型检查器
- PyLSP — 基于插件的服务器,可集成各种工具
Python 的 LSP 体验相当成熟。basedpyright 能提供准确的代码补全、类型检查和跳转导航;Ruff 则以出色的性能负责格式化和代码检查。
可能让你感到不同的地方:
- 没有内置针对特定框架的智能支持(如 Django ORM、Flask 路由)
- 一些复杂的重构操作(比如带作用域分析的提取方法)可能没那么精细
- 自动导入建议取决于语言服务器对你环境的了解程度
如何适应:
- 用
Alt+Enter触发可用的代码操作——具体列表取决于语言服务器 - 确保已选中虚拟环境,这样语言服务器才能正确解析依赖
- 用 Ruff 做快速、统一的格式化(默认已启用)
- 想要类似 PyCharm「Inspect Code」的代码检查,可以运行
ruff check .或查看诊断面板(Cmd+6)——basedpyright 和 Ruff 组合起来能查出大部分同类问题
虚拟环境与解释器
在 PyCharm 里,你通过图形界面选择 Python 解释器,由 PyCharm 负责维护项目和解释器之间的关联:显示已安装的包、帮你安装新包,并记录每个项目使用的环境。
Zed 通过工具链(toolchain)系统来管理虚拟环境:
- Zed 会自动发现常见位置的虚拟环境(
.venv、venv、.env、env) - 检测到虚拟环境后,终端会自动激活它
- 语言服务器会自动配置为使用发现的环境
- 如果自动检测选错了,可以手动切换工具链
如何适应:
- 用
python -m venv .venv或uv sync创建虚拟环境 - 在 Zed 中打开项目文件夹,它会自动检测环境
- 需要切换环境时,使用工具链选择器
- 使用 conda 环境时,先在 shell 中激活环境再启动 Zed
提示:如果 basedpyright 报告已安装包的导入错误,请检查 Zed 是否选中了正确的虚拟环境。使用工具链选择器确认或切换当前活动的环境。
没有项目模型
PyCharm 通过包含 XML 配置文件、解释器分配和运行配置的 .idea 文件夹来管理项目。这种模式让 PyCharm 能够记住你的解释器选择,通过 UI 管理依赖项,并持久化复杂的运行/调试设置。
Zed 没有项目模型。一个项目就是一个文件夹。没有向导,没有解释器选择界面,也没有项目结构配置。
这意味着:
- 不存在运行配置。你需要定义任务或使用终端。你现有的 PyCharm 运行配置在
.idea/中不会被读取——你需要在tasks.json中重新创建所需的那些。 - 解释器管理是外部的。Zed 可以发现环境,但不创建它们。
- 依赖项通过 pip、uv、poetry 或 conda 管理——而不是通过编辑器。
- 没有 Python 控制台(交互式 REPL)面板。请改用终端中的
python或ipython。
如何适应:
- 在项目根目录创建一个
.zed/settings.json用于特定于项目的设置 - 在
tasks.json中定义常用命令(通过命令面板打开:{#action zed::OpenTasks}):
[
{
"label": "run",
"command": "python main.py"
},
{
"label": "test",
"command": "pytest"
},
{
"label": "test current file",
"command": "pytest $ZED_FILE"
}
]
- 使用
Ctrl+Alt+R快速运行任务 - 对于任务未涵盖的功能,依赖终端(
Alt+F12)
没有框架集成
PyCharm Professional 对 Web 开发的价值很大程度上来自于其框架集成。Django 模板可被理解并导航。Flask 路由已被索引。SQLAlchemy 模型获得特殊处理。模板变量支持自动补全。
Zed 没有这些限制。语言服务器将 Python 代码视为纯粹的 Python 代码——它不理解 @app.route 定义了一个端点,也不了解 Django 模型类会创建数据库表。
如何适应:
- 灵活使用 grep 和文件搜索。
Cmd+Shift+F配合正则表达式可以查找路由定义、模型类或模板使用位置。 - 依赖语言服务器的“查找引用”功能(
Alt+F7)进行导航——它是有效的,只是缺少框架上下文。 - 考虑在 Zed 的终端中使用框架特定的 CLI 工具(如
python manage.py、flask routes)。
提示: 进行数据库工作时,可以选用 DataGrip、DBeaver 或 TablePlus 等专用工具。许多转向 Zed 的开发者会专门保留 DataGrip 用于 SQL 操作。
工具窗口与停靠面板
PyCharm 将辅助视图组织为编号的工具窗口(如 Project = 1, Python Console = 4, Terminal = Alt+F12 等)。Zed 使用类似的概念,称为“停靠面板”(docks):
| PyCharm 工具窗口 | Zed 对应功能 | 快捷键 (JetBrains 键位) |
|---|---|---|
| Project (1) | 项目面板 | Cmd + 1 |
| Git (9 或 Cmd+0) | Git 面板 | Cmd + 0 |
| Terminal (Alt+F12) | 终端面板 | Alt + F12 |
| Structure (7) | 大纲面板 | Cmd + 7 |
| Problems (6) | 诊断 | Cmd + 6 |
| Debug (5) | 调试面板 | Cmd + 5 |
Zed 有三个停靠位置:左侧、底部和右侧。面板可以通过拖拽或在设置中移动到不同的停靠位置。
调试
PyCharm 和 Zed 都提供集成调试功能,但体验有所不同:
- Zed 使用
debugpy(即 VS Code 使用的同一调试适配器)。 - 使用
Ctrl+F8设置断点。 - 使用
Alt+Shift+F9开始调试,或按F4并选择一个调试目标。 - 使用
F7(单步进入)、F8(单步跳过)和Shift+F8(单步跳出)逐步执行代码。 - 使用
F9继续执行。
Zed 能自动检测可调试的入口点。按下 F4 即可查看可用选项,包括:
- Python 脚本
- 模块
- pytest 测试
如果需要更精细的控制,可以创建一个 .zed/debug.json 文件:
[
{
"label": "Debug Current File",
"adapter": "Debugpy",
"program": "$ZED_FILE",
"request": "launch"
},
{
"label": "Debug Flask App",
"adapter": "Debugpy",
"request": "launch",
"module": "flask",
"args": ["run", "--debug"],
"env": {
"FLASK_APP": "app.py"
}
}
]
运行测试
PyCharm 有专门的测试运行器,用可视化界面展示每个测试的通过/失败状态。Zed 提供以下几种运行测试的方式:
- Gutter 图标——点击测试函数或类旁边的播放按钮
- Tasks——在
tasks.json中定义 pytest 或 unittest 命令 - 终端——直接运行
pytest
测试输出会显示在终端面板中。运行 pytest 时,可以用 --tb=short 获得简洁的 traceback,或用 -v 输出详细信息。
扩展与插件
PyCharm 拥有庞大的插件目录,覆盖语言支持、数据库工具、部署集成等方方面面。
Zed 的扩展目录规模更小,也更聚焦:
- 语言支持与语法高亮
- 主题
- Context server
PyCharm 中一些需要装插件才能实现的功能,在 Zed 里都是内置的:
- 带语音聊天的实时协作
- AI 编程辅助
- 内置终端
- 任务运行器
- 基于 LSP 的代码智能
- Ruff 格式化与代码检查
Zed 缺少的功能
先把预期说清楚,以下是 PyCharm 有而 Zed 没有的功能:
- 科学模式 / Jupyter 集成——如果需要 notebook 和数据科学工作流,可以搭配 JupyterLab 或带 Jupyter 扩展的 VS Code,与 Zed 配合进行 Python 编辑
- 数据库工具——可以使用 DataGrip、DBeaver 或 TablePlus
- Django/Flask 模板导航 — 使用文件搜索和 grep
- 可视化包管理器 — 在终端使用 pip、uv 或 poetry
- 远程解释器 — Zed 支持远程开发,但机制不同
- Profiler 集成 — 在外部使用 cProfile、py-spy 或类似工具
Zed 与 PyCharm 中的协作功能对比
PyCharm 通过独立的 Code With Me 插件提供协作功能。Zed 则将协作直接整合到核心体验中。
连接成功后,你可以实时看到彼此的光标、选区和编辑操作。系统内置了语音聊天功能,无需依赖单独的工具或第三方登录。
在 Zed 中使用 AI
如果你习惯在 PyCharm 中使用 AI 助手(如 GitHub Copilot 或 JetBrains AI Assistant),Zed 也提供类似功能,且具备更高的灵活性。
配置 GitHub Copilot
- 按
Cmd+,(macOS)或Ctrl+,(Linux/Windows)打开设置 - 导航至AI → 编辑预测(Edit Predictions)
- 点击“配置提供商”旁边的配置(Configure)
- 在GitHub Copilot下方,点击登录 GitHub
登录后,只需开始输入,Zed 就会提供内联建议供你接受。
其他 AI 选项
若想在 Zed 中使用其他 AI 模型,你有以下几种选择:
- 使用 Zed 托管的模型,拥有更高的速率限制。需要身份验证,并通过Zed Pro访问。
- 使用自己的API 密钥,无需身份验证
- 使用诸如 Claude Agent 等外部代理
高级配置与生产力优化
Zed 为希望精细调整环境的高级用户提供了详细的设置选项。
以下是一些实用的调整建议:
保存时格式化:
"format_on_save": "on"
启用 direnv 支持(适用于使用 direnv 的 Python 项目):
"load_direnv": "shell_hook"
自定义虚拟环境检测(需手动编辑 JSON):
{
"terminal": {
"detect_venv": {
"on": {
"directories": [".venv", "venv", ".env", "env"],
"activate_script": "default"
}
}
}
}
配置 basedpyright 类型检查严格程度:
如果觉得 basedpyright 过于严格或过于宽松,可在项目根目录的 pyrightconfig.json 中配置:
{
"typeCheckingMode": "basic"
}
可选值包括 "off"、"basic"、"standard"(默认)、"strict" 或 "all"。
后续步骤
配置完成后,借助以下资源充分发挥 Zed 的潜力: