pycharm.md

  1---
  2title: How to Migrate from PyCharm to Zed
  3description: "Guide for migrating from PyCharm to Zed, including settings and keybindings."
  4---
  5
  6# How to Migrate from PyCharm to Zed
  7
  8This guide covers how to set up Zed if you're coming from PyCharm, including keybindings, settings, and the differences you should expect.
  9
 10## Install Zed
 11
 12Zed is available on macOS, Windows, and Linux.
 13
 14For macOS, you can download it from zed.dev/download, or install via Homebrew:
 15
 16```sh
 17brew install --cask zed
 18```
 19
 20For Windows, download the installer from zed.dev/download, or install via winget:
 21
 22```sh
 23winget install Zed.Zed
 24```
 25
 26For most Linux users, the easiest way to install Zed is through our installation script:
 27
 28```sh
 29curl -f https://zed.dev/install.sh | sh
 30```
 31
 32After installation, you can launch Zed from your Applications folder (macOS), Start menu (Windows), or directly from the terminal using:
 33`zed .`
 34This opens the current directory in Zed.
 35
 36## Set Up the JetBrains Keymap
 37
 38If 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:
 39
 401. Open Settings with `Cmd+,` (macOS) or `Ctrl+,` (Linux/Windows)
 412. Search for `Base Keymap`
 423. Select `JetBrains`
 43
 44This maps familiar shortcuts like `Shift Shift` for Search Everywhere, `Cmd+O` for Go to Class, and `Cmd+Shift+A` for Find Action.
 45
 46In editors, the JetBrains keymap also makes `Alt+Left` / `Alt+Right` and `Shift+Alt+Left` / `Shift+Alt+Right` move and select by subword, so identifiers like `camelCase` and `snake_case` behave like PyCharm's CamelHumps navigation.
 47
 48## Set Up Editor Preferences
 49
 50You 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.
 51
 52Settings PyCharm users typically configure first:
 53
 54| Zed Setting             | What it does                                                                    |
 55| ----------------------- | ------------------------------------------------------------------------------- |
 56| `format_on_save`        | Auto-format when saving. Set to `"on"` to enable.                               |
 57| `soft_wrap`             | Wrap long lines. Options: `"none"`, `"editor_width"`, `"preferred_line_length"` |
 58| `preferred_line_length` | Column width for wrapping and rulers. Default is 80, PEP 8 recommends 79.       |
 59| `inlay_hints`           | Show parameter names and type hints inline, like PyCharm's hints.               |
 60| `relative_line_numbers` | Useful if you're coming from IdeaVim.                                           |
 61
 62Zed 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.
 63
 64> **Tip:** If you're joining an existing project, check `format_on_save` before making your first commit. Otherwise you might accidentally reformat an entire file when you only meant to change one line.
 65
 66## Open or Create a Project
 67
 68After 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.
 69
 70To 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.
 71
 72You can also launch Zed from the terminal inside any folder with:
 73`zed .`
 74
 75Once inside a project:
 76
 77- Use `Cmd+Shift+O` or `Cmd+E` to jump between files quickly (like PyCharm's "Recent Files")
 78- Use `Cmd+Shift+A` or `Shift Shift` to open the Command Palette (like PyCharm's "Search Everywhere")
 79- Use `Cmd+O` to search for symbols (like PyCharm's "Go to Symbol")
 80
 81Open 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).
 82
 83## Differences in Keybindings
 84
 85If 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.
 86
 87### Common Shared Keybindings
 88
 89| Action                        | Shortcut                   |
 90| ----------------------------- | -------------------------- |
 91| Search Everywhere             | `Shift Shift`              |
 92| Find Action / Command Palette | `Cmd + Shift + A`          |
 93| Go to File                    | `Cmd + Shift + O`          |
 94| Go to Symbol                  | `Cmd + O`                  |
 95| Recent Files                  | `Cmd + E`                  |
 96| Go to Definition              | `Cmd + B`                  |
 97| Find Usages                   | `Alt + F7`                 |
 98| Rename Symbol                 | `Shift + F6`               |
 99| Reformat Code                 | `Cmd + Alt + L`            |
100| Toggle Project Panel          | `Cmd + 1`                  |
101| Toggle Terminal               | `Alt + F12`                |
102| Duplicate Line                | `Cmd + D`                  |
103| Delete Line                   | `Cmd + Backspace`          |
104| Move Line Up/Down             | `Shift + Alt + Up/Down`    |
105| Expand/Shrink Selection       | `Alt + Up/Down`            |
106| Move by subword               | `Alt + Left/Right`         |
107| Select by subword             | `Shift + Alt + Left/Right` |
108| Comment Line                  | `Cmd + /`                  |
109| Go Back / Forward             | `Cmd + [` / `Cmd + ]`      |
110| Toggle Breakpoint             | `Ctrl + F8`                |
111
112### Different Keybindings (PyCharm → Zed)
113
114| Action                 | PyCharm     | Zed (JetBrains keymap)   |
115| ---------------------- | ----------- | ------------------------ |
116| File Structure         | `Cmd + F12` | `Cmd + F12` (outline)    |
117| Navigate to Next Error | `F2`        | `F2`                     |
118| Run                    | `Ctrl + R`  | `Ctrl + Alt + R` (tasks) |
119| Debug                  | `Ctrl + D`  | `Alt + Shift + F9`       |
120| Stop                   | `Cmd + F2`  | `Ctrl + F2`              |
121
122### Unique to Zed
123
124| Action            | Shortcut                   | Notes                          |
125| ----------------- | -------------------------- | ------------------------------ |
126| Toggle Right Dock | `Cmd + R`                  | Assistant panel, notifications |
127| Split Panes       | `Cmd + K`, then arrow keys | Create splits in any direction |
128
129### How to Customize Keybindings
130
131- Open the Command Palette (`Cmd+Shift+A` or `Shift Shift`)
132- Run `Zed: Open Keymap Editor`
133
134This opens a list of all available bindings. You can override individual shortcuts or remove conflicts.
135
136Zed also supports key sequences (multi-key shortcuts).
137
138## Differences in User Interfaces
139
140### No Indexing
141
142If 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.
143
144Zed 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.
145
146PyCharm'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.
147
148**How to adapt:**
149
150- For project-wide symbol search, use `Cmd+O` / Go to Symbol (relies on your language server)
151- For finding files by name, use `Cmd+Shift+O` / Go to File
152- For text search across files, use `Cmd+Shift+F`—this is fast even on large codebases
153- For deep static analysis, consider running tools like `mypy`, `pylint`, or `ruff check` from the terminal
154
155### LSP vs. Native Language Intelligence
156
157PyCharm 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.
158
159Zed uses the Language Server Protocol (LSP) for code intelligence. For Python, Zed provides several language servers out of the box:
160
161- **basedpyright** (default) — Fast type checking and completions
162- **Ruff** (default) — Linting and formatting
163- **ty** — Up-and-coming language server from Astral, built for speed
164- **Pyright** — Microsoft's type checker
165- **PyLSP** — Plugin-based server with tool integrations
166
167The LSP experience for Python is strong. basedpyright provides accurate completions, type checking, and navigation. Ruff handles formatting and linting with excellent performance.
168
169Where you might notice differences:
170
171- Framework-specific intelligence (Django ORM, Flask routes) isn't built-in
172- Some complex refactorings (extract method with proper scope analysis) may be less sophisticated
173- Auto-import suggestions depend on what the language server knows about your environment
174
175**How to adapt:**
176
177- Use `Alt+Enter` for available code actions—the list will vary by language server
178- Ensure your virtual environment is selected so the language server can resolve your dependencies
179- Use Ruff for fast, consistent formatting (it's enabled by default)
180- For code inspection similar to PyCharm's "Inspect Code," run `ruff check .` or check the Diagnostics panel (`Cmd+6`)—basedpyright and Ruff together catch many of the same issues
181
182### Virtual Environments and Interpreters
183
184In 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.
185
186Zed handles virtual environments through its toolchain system:
187
188- Zed automatically discovers virtual environments in common locations (`.venv`, `venv`, `.env`, `env`)
189- When a virtual environment is detected, the terminal auto-activates it
190- Language servers are automatically configured to use the discovered environment
191- You can manually select a toolchain if auto-detection picks the wrong one
192
193**How to adapt:**
194
195- Create your virtual environment with `python -m venv .venv` or `uv sync`
196- Open the folder in Zed—it will detect the environment automatically
197- If you need to switch environments, use the toolchain selector
198- For conda environments, ensure they're activated in your shell before launching Zed
199
200> **Tip:** 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.
201
202### No Project Model
203
204PyCharm 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.
205
206Zed has no project model. A project is a folder. There's no wizard, no interpreter selection screen, no project structure configuration.
207
208This means:
209
210- Run configurations don't exist. You define tasks or use the terminal. Your existing PyCharm run configs in `.idea/` won't be read—you'll recreate the ones you need in `tasks.json`.
211- Interpreter management is external. Zed discovers environments but doesn't create them.
212- Dependencies are managed through pip, uv, poetry, or conda—not through the editor.
213- There's no Python Console (interactive REPL) panel. Use `python` or `ipython` in the terminal instead.
214
215**How to adapt:**
216
217- Create a `.zed/settings.json` in your project root for project-specific settings
218- Define common commands in `tasks.json` (open via Command Palette: `zed: open tasks`):
219
220```json
221[
222  {
223    "label": "run",
224    "command": "python main.py"
225  },
226  {
227    "label": "test",
228    "command": "pytest"
229  },
230  {
231    "label": "test current file",
232    "command": "pytest $ZED_FILE"
233  }
234]
235```
236
237- Use `Ctrl+Alt+R` to run tasks quickly
238- Lean on your terminal (`Alt+F12`) for anything tasks don't cover
239
240### No Framework Integration
241
242PyCharm 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.
243
244Zed 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.
245
246**How to adapt:**
247
248- Use grep and file search liberally. `Cmd+Shift+F` with a regex can find route definitions, model classes, or template usages.
249- Rely on your language server's "find references" (`Alt+F7`) for navigation—it works, just without framework context
250- Consider using framework-specific CLI tools (`python manage.py`, `flask routes`) from Zed's terminal
251
252> **Tip:** 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.
253
254### Tool Windows vs. Docks
255
256PyCharm organizes auxiliary views into numbered tool windows (Project = 1, Python Console = 4, Terminal = Alt+F12, etc.). Zed uses a similar concept called "docks":
257
258| PyCharm Tool Window | Zed Equivalent | Shortcut (JetBrains keymap) |
259| ------------------- | -------------- | --------------------------- |
260| Project (1)         | Project Panel  | `Cmd + 1`                   |
261| Git (9 or Cmd+0)    | Git Panel      | `Cmd + 0`                   |
262| Terminal (Alt+F12)  | Terminal Panel | `Alt + F12`                 |
263| Structure (7)       | Outline Panel  | `Cmd + 7`                   |
264| Problems (6)        | Diagnostics    | `Cmd + 6`                   |
265| Debug (5)           | Debug Panel    | `Cmd + 5`                   |
266
267Zed has three dock positions: left, bottom, and right. Panels can be moved between docks by dragging or through settings.
268
269### Debugging
270
271Both PyCharm and Zed offer integrated debugging, but the experience differs:
272
273- Zed uses `debugpy` (the same debug adapter that VS Code uses)
274- Set breakpoints with `Ctrl+F8`
275- Start debugging with `Alt+Shift+F9` or press `F4` and select a debug target
276- Step through code with `F7` (step into), `F8` (step over), `Shift+F8` (step out)
277- Continue execution with `F9`
278
279Zed can automatically detect debuggable entry points. Press `F4` to see available options, including:
280
281- Python scripts
282- Modules
283- pytest tests
284
285For more control, create a `.zed/debug.json` file:
286
287```json
288[
289  {
290    "label": "Debug Current File",
291    "adapter": "Debugpy",
292    "program": "$ZED_FILE",
293    "request": "launch"
294  },
295  {
296    "label": "Debug Flask App",
297    "adapter": "Debugpy",
298    "request": "launch",
299    "module": "flask",
300    "args": ["run", "--debug"],
301    "env": {
302      "FLASK_APP": "app.py"
303    }
304  }
305]
306```
307
308### Running Tests
309
310PyCharm has a dedicated test runner with a visual interface showing pass/fail status for each test. Zed provides test running through:
311
312- **Gutter icons** — Click the play button next to test functions or classes
313- **Tasks** — Define pytest or unittest commands in `tasks.json`
314- **Terminal** — Run `pytest` directly
315
316The test output appears in the terminal panel. For pytest, use `--tb=short` for concise tracebacks or `-v` for verbose output.
317
318### Extensions vs. Plugins
319
320PyCharm has a large plugin catalog covering everything from additional language support to database tools to deployment integrations.
321
322Zed's extension catalog is smaller and more focused:
323
324- Language support and syntax highlighting
325- Themes
326- Slash commands for AI
327- Context servers
328
329Several features that require plugins in PyCharm are built into Zed:
330
331- Real-time collaboration with voice chat
332- AI coding assistance
333- Built-in terminal
334- Task runner
335- LSP-based code intelligence
336- Ruff formatting and linting
337
338### What's Not in Zed
339
340To set expectations clearly, here's what PyCharm offers that Zed doesn't have:
341
342- **Scientific Mode / Jupyter integration** — For notebooks and data science workflows, use JupyterLab or VS Code with the Jupyter extension alongside Zed for your Python editing
343- **Database tools** — Use DataGrip, DBeaver, or TablePlus
344- **Django/Flask template navigation** — Use file search and grep
345- **Visual package manager** — Use pip, uv, or poetry from the terminal
346- **Remote interpreters** — Zed has remote development, but it works differently
347- **Profiler integration** — Use cProfile, py-spy, or similar tools externally
348
349## Collaboration in Zed vs. PyCharm
350
351PyCharm offers Code With Me as a separate plugin for collaboration. Zed has collaboration built into the core experience.
352
353- Open the Collab Panel in the left dock
354- Create a channel and [invite your collaborators](https://zed.dev/docs/collaboration#inviting-a-collaborator) to join
355- [Share your screen or your codebase](https://zed.dev/docs/collaboration#share-a-project) directly
356
357Once 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.
358
359## Using AI in Zed
360
361If you're used to AI assistants in PyCharm (like GitHub Copilot or JetBrains AI Assistant), Zed offers similar capabilities with more flexibility.
362
363### Configuring GitHub Copilot
364
3651. Open Settings with `Cmd+,` (macOS) or `Ctrl+,` (Linux/Windows)
3662. Navigate to **AI → Edit Predictions**
3673. Click **Configure** next to "Configure Providers"
3684. Under **GitHub Copilot**, click **Sign in to GitHub**
369
370Once signed in, just start typing. Zed will offer suggestions inline for you to accept.
371
372### Additional AI Options
373
374To use other AI models in Zed, you have several options:
375
376- Use Zed's hosted models, with higher rate limits. Requires [authentication](https://zed.dev/docs/authentication) and subscription to [Zed Pro](https://zed.dev/docs/ai/subscription.html).
377- Bring your own [API keys](https://zed.dev/docs/ai/llm-providers.html), no authentication needed
378- Use [external agents like Claude Agent](https://zed.dev/docs/ai/external-agents.html)
379
380## Advanced Config and Productivity Tweaks
381
382Zed exposes advanced settings for power users who want to fine-tune their environment.
383
384Here are a few useful tweaks:
385
386**Format on Save:**
387
388```json
389"format_on_save": "on"
390```
391
392**Enable direnv support (useful for Python projects using direnv):**
393
394```json
395"load_direnv": "shell_hook"
396```
397
398**Customize virtual environment detection** (requires manual JSON editing):
399
400```json
401{
402  "terminal": {
403    "detect_venv": {
404      "on": {
405        "directories": [".venv", "venv", ".env", "env"],
406        "activate_script": "default"
407      }
408    }
409  }
410}
411```
412
413**Configure basedpyright type checking strictness:**
414
415If you find basedpyright too strict or too lenient, configure it in your project's `pyrightconfig.json`:
416
417```json
418{
419  "typeCheckingMode": "basic"
420}
421```
422
423Options are `"off"`, `"basic"`, `"standard"` (default), `"strict"`, or `"all"`.
424
425## Next Steps
426
427Now that you're set up, here are some resources to help you get the most out of Zed:
428
429- [All Settings](../reference/all-settings.md) — Customize settings, themes, and editor behavior
430- [Key Bindings](../key-bindings.md) — Learn how to customize and extend your keymap
431- [Tasks](../tasks.md) — Set up build and run commands for your projects
432- [AI Features](../ai/overview.md) — Explore Zed's AI capabilities beyond code completion
433- [Collaboration](../collaboration/overview.md) — Share your projects and code together in real time
434- [Python in Zed](../languages/python.md) — Python-specific setup and configuration