docs/src/migrate/pycharm.md
This guide covers how to set up Zed if you're coming from PyCharm, including keybindings, settings, and the differences you should expect.
Zed is available on macOS, Windows, and Linux.
For macOS, you can download it from zed.dev/download, or install via Homebrew:
brew install --cask zed
For Windows, download the installer from zed.dev/download, or install via winget:
winget install Zed.Zed
For most Linux users, the easiest way to install Zed is through our installation script:
curl -f https://zed.dev/install.sh | sh
After installation, you can launch Zed from your Applications folder (macOS), Start menu (Windows), or directly from the terminal using:
zed .
This opens the current directory in Zed.
If you're coming from PyCharm, the fastest way to feel at home is to use the JetBrains keymap. During onboarding, you can select it as your base keymap. If you missed that step, you can change it anytime:
Cmd+, (macOS) or Ctrl+, (Linux/Windows)Base KeymapJetBrainsThis maps familiar shortcuts like Shift Shift for Search Everywhere, Cmd+O for Go to Class, and Cmd+Shift+A for Find Action.
You can configure most settings in the Settings Editor ({#kb zed::OpenSettings}). For advanced settings, run zed: open settings file from the Command Palette to edit your settings file directly.
Settings PyCharm users typically configure first:
| Zed Setting | What it does |
|---|---|
format_on_save | Auto-format when saving. Set to "on" to enable. |
soft_wrap | Wrap long lines. Options: "none", "editor_width", "preferred_line_length" |
preferred_line_length | Column width for wrapping and rulers. Default is 80, PEP 8 recommends 79. |
inlay_hints | Show parameter names and type hints inline, like PyCharm's hints. |
relative_line_numbers | Useful if you're coming from IdeaVim. |
Zed also supports per-project settings. Create a .zed/settings.json file in your project root to override global settings for that project, similar to how you might use .idea folders in PyCharm.
Tip: If you're joining an existing project, check
format_on_savebefore making your first commit. Otherwise you might accidentally reformat an entire file when you only meant to change one line.
After setup, press Cmd+Shift+O (with JetBrains keymap) to open a folder. This becomes your workspace in Zed. Unlike PyCharm, there's no project configuration wizard, no interpreter selection dialog, and no project structure setup required.
To start a new project, create a directory using your terminal or file manager, then open it in Zed. The editor will treat that folder as the root of your project.
You can also launch Zed from the terminal inside any folder with:
zed .
Once inside a project:
Cmd+Shift+O or Cmd+E to jump between files quickly (like PyCharm's "Recent Files")Cmd+Shift+A or Shift Shift to open the Command Palette (like PyCharm's "Search Everywhere")Cmd+O to search for symbols (like PyCharm's "Go to Symbol")Open buffers appear as tabs across the top. The Project Panel shows your file tree and Git status. Toggle it with Cmd+1 (just like PyCharm's Project tool window).
If you chose the JetBrains keymap during onboarding, most of your shortcuts should already feel familiar. Here's a quick reference for how Zed compares to PyCharm.
| Action | Shortcut |
|---|---|
| Search Everywhere | Shift Shift |
| Find Action / Command Palette | Cmd + Shift + A |
| Go to File | Cmd + Shift + O |
| Go to Symbol | Cmd + O |
| Recent Files | Cmd + E |
| Go to Definition | Cmd + B |
| Find Usages | Alt + F7 |
| Rename Symbol | Shift + F6 |
| Reformat Code | Cmd + Alt + L |
| Toggle Project Panel | Cmd + 1 |
| Toggle Terminal | Alt + F12 |
| Duplicate Line | Cmd + D |
| Delete Line | Cmd + Backspace |
| Move Line Up/Down | Shift + Alt + Up/Down |
| Expand/Shrink Selection | Alt + Up/Down |
| Comment Line | Cmd + / |
| Go Back / Forward | Cmd + [ / Cmd + ] |
| Toggle Breakpoint | Ctrl + F8 |
| Action | PyCharm | Zed (JetBrains keymap) |
|---|---|---|
| File Structure | Cmd + F12 | Cmd + F12 (outline) |
| Navigate to Next Error | F2 | F2 |
| Run | Ctrl + R | Ctrl + Alt + R (tasks) |
| Debug | Ctrl + D | Alt + Shift + F9 |
| Stop | Cmd + F2 | Ctrl + F2 |
| Action | Shortcut | Notes |
|---|---|---|
| Toggle Right Dock | Cmd + R | Assistant panel, notifications |
| Split Panes | Cmd + K, then arrow keys | Create splits in any direction |
Cmd+Shift+A or Shift Shift)Zed: Open Keymap EditorThis opens a list of all available bindings. You can override individual shortcuts or remove conflicts.
Zed also supports key sequences (multi-key shortcuts).
If you've used PyCharm on large projects, you know the wait: "Indexing..." can take anywhere from 30 seconds to several minutes depending on project size and dependencies. PyCharm builds a comprehensive index of your entire codebase to power its code intelligence, and it re-indexes when dependencies change or when you install new packages.
Zed doesn't index. You open a folder and start working immediately. File search and navigation stay fast regardless of project size, without waiting through indexing pauses.
PyCharm's index powers features like finding all usages across your entire codebase, understanding class hierarchies, and detecting unused imports project-wide. Zed delegates this work to language servers, which may not analyze as deeply or as broadly.
How to adapt:
Cmd+O / Go to Symbol (relies on your language server)Cmd+Shift+O / Go to FileCmd+Shift+F—this is fast even on large codebasesmypy, pylint, or ruff check from the terminalPyCharm has its own language analysis engine built specifically for Python. This engine understands your code deeply: it resolves types without annotations, tracks data flow, knows about Django models and Flask routes, and offers specialized refactorings.
Zed uses the Language Server Protocol (LSP) for code intelligence. For Python, Zed provides several language servers out of the box:
The LSP experience for Python is strong. basedpyright provides accurate completions, type checking, and navigation. Ruff handles formatting and linting with excellent performance.
Where you might notice differences:
How to adapt:
Alt+Enter for available code actions—the list will vary by language serverruff check . or check the Diagnostics panel (Cmd+6)—basedpyright and Ruff together catch many of the same issuesIn PyCharm, you select a Python interpreter through a GUI, and PyCharm manages the connection between your project and that interpreter. It shows available packages, lets you install new ones, and keeps track of which environment each project uses.
Zed handles virtual environments through its toolchain system:
.venv, venv, .env, env)How to adapt:
python -m venv .venv or uv syncTip: If basedpyright shows import errors for packages you've installed, check that Zed has selected the correct virtual environment. Use the toolchain selector to verify or change the active environment.
PyCharm manages projects through .idea folders containing XML configuration files, interpreter assignments, and run configurations. This model lets PyCharm remember your interpreter choice, manage dependencies through the UI, and persist complex run/debug setups.
Zed has no project model. A project is a folder. There's no wizard, no interpreter selection screen, no project structure configuration.
This means:
.idea/ won't be read—you'll recreate the ones you need in tasks.json.python or ipython in the terminal instead.How to adapt:
.zed/settings.json in your project root for project-specific settingstasks.json (open via Command Palette: zed: open tasks):[
{
"label": "run",
"command": "python main.py"
},
{
"label": "test",
"command": "pytest"
},
{
"label": "test current file",
"command": "pytest $ZED_FILE"
}
]
Ctrl+Alt+R to run tasks quicklyAlt+F12) for anything tasks don't coverPyCharm Professional's value for web development comes largely from its framework integration. Django templates are understood and navigable. Flask routes are indexed. SQLAlchemy models get special treatment. Template variables autocomplete.
Zed has none of this. The language server sees Python code as Python code—it doesn't understand that @app.route defines an endpoint or that a Django model class creates database tables.
How to adapt:
Cmd+Shift+F with a regex can find route definitions, model classes, or template usages.Alt+F7) for navigation—it works, just without framework contextpython manage.py, flask routes) from Zed's terminalTip: For database work, pick up a dedicated tool like DataGrip, DBeaver, or TablePlus. Many developers who switch to Zed keep DataGrip around specifically for SQL.
PyCharm organizes auxiliary views into numbered tool windows (Project = 1, Python Console = 4, Terminal = Alt+F12, etc.). Zed uses a similar concept called "docks":
| PyCharm Tool Window | Zed Equivalent | Shortcut (JetBrains keymap) |
|---|---|---|
| Project (1) | Project Panel | Cmd + 1 |
| Git (9 or 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 has three dock positions: left, bottom, and right. Panels can be moved between docks by dragging or through settings.
Both PyCharm and Zed offer integrated debugging, but the experience differs:
debugpy (the same debug adapter that VS Code uses)Ctrl+F8Alt+Shift+F9 or press F4 and select a debug targetF7 (step into), F8 (step over), Shift+F8 (step out)F9Zed can automatically detect debuggable entry points. Press F4 to see available options, including:
For more control, create a .zed/debug.json file:
[
{
"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 has a dedicated test runner with a visual interface showing pass/fail status for each test. Zed provides test running through:
tasks.jsonpytest directlyThe test output appears in the terminal panel. For pytest, use --tb=short for concise tracebacks or -v for verbose output.
PyCharm has a large plugin catalog covering everything from additional language support to database tools to deployment integrations.
Zed's extension catalog is smaller and more focused:
Several features that require plugins in PyCharm are built into Zed:
To set expectations clearly, here's what PyCharm offers that Zed doesn't have:
PyCharm offers Code With Me as a separate plugin for collaboration. Zed has collaboration built into the core experience.
Once connected, you'll see each other's cursors, selections, and edits in real time. Voice chat is included. There's no need for separate tools or third-party logins.
If you're used to AI assistants in PyCharm (like GitHub Copilot or JetBrains AI Assistant), Zed offers similar capabilities with more flexibility.
Cmd+, (macOS) or Ctrl+, (Linux/Windows)Once signed in, just start typing. Zed will offer suggestions inline for you to accept.
To use other AI models in Zed, you have several options:
Zed exposes advanced settings for power users who want to fine-tune their environment.
Here are a few useful tweaks:
Format on Save:
"format_on_save": "on"
Enable direnv support (useful for Python projects using direnv):
"load_direnv": "shell_hook"
Customize virtual environment detection (requires manual JSON editing):
{
"terminal": {
"detect_venv": {
"on": {
"directories": [".venv", "venv", ".env", "env"],
"activate_script": "default"
}
}
}
}
Configure basedpyright type checking strictness:
If you find basedpyright too strict or too lenient, configure it in your project's pyrightconfig.json:
{
"typeCheckingMode": "basic"
}
Options are "off", "basic", "standard" (default), "strict", or "all".
Now that you're set up, here are some resources to help you get the most out of Zed: