Keyboard Shortcuts
Master Zed's keyboard shortcuts to boost productivity
Introduction to Zed Shortcuts
Keyboard shortcuts are at the heart of an efficient workflow in Zed. The binding system is fully customizable: rebind any action, create key sequences, and define context-specific shortcuts.
If you are used to another editor, set base_keymap in Settings or
settings.json (or run zed: toggle base keymap selector).
Supported base keymaps:
- Zed (default)
- VS Code
- Atom
- Emacs (Beta)
- JetBrains
- Sublime Text
- TextMate
- Cursor
- None — disables all key bindings
You can also enable vim_mode or helix_mode for modal editing on top of
your base keymap. See Zed’s Vim and Helix docs for mode-specific contexts.
Tables below list default-style Zed shortcuts for macOS and Linux/Windows.
A different base_keymap may change some bindings — check the Keymap Editor for your setup.
Shortcut Notation
Throughout this guide:
- ⌘ — Command (macOS) / often mapped as the platform modifier
- Ctrl — Control
- Alt / ⌥ — Option / Alt
- Shift — Shift
Chord sequences are written as “press A, then B” (for example
CtrlG then
D).
In keymap.json, sequences are space-separated: "cmd-k cmd-s".
Customizing Keyboard Shortcuts
Customize shortcuts with the Keymap Editor UI or by editing keymap.json directly.
Keymap Editor
Open the Keymap Editor to browse every action and its binding, then change or add shortcuts with the pencil icon, double-click, or Enter:
| Action | macOS | Linux / Windows |
|---|---|---|
| Open Keymap Editor | ⌘K then ⌘S | CtrlK then CtrlS |
| Open Settings | ⌘, | Ctrl, |
You can also run zed: open keymap from the Command Palette. Changes in the editor are written to your user keymap file.
Keymap File Locations
- macOS / Linux:
~/.config/zed/keymap.json - Windows:
%APPDATA%\Zed\keymap.json
Open it with zed: open keymap file from the Command Palette.
Changing the Base Keymap
-
Open Settings
Use the Settings shortcut, or open
settings.jsonwith zed: open settings. -
Set base_keymap
Choose a preset (Zed, VS Code, Atom, Emacs, JetBrains, Sublime Text, TextMate, Cursor, or None), or set
"base_keymap": "VSCode"(and similar) in JSON. -
Optional: Modal Editing
Enable
"vim_mode": trueor"helix_mode": trueif you want modal bindings.
Custom Bindings and Contexts
The keymap file is a JSON array of objects with a bindings map.
Omit context for global bindings; set it to limit when a binding is active.
Contexts form a tree (for example Workspace → Pane → Editor).
Debug the active tree with dev: open key context view.
json[ { "bindings": { "ctrl-right": "editor::SelectLargerSyntaxNode", "ctrl-left": "editor::SelectSmallerSyntaxNode" } }, { "context": "ProjectPanel && not_editing", "bindings": { "o": "project_panel::Open" } } ]
User keymaps load after built-ins, so later bindings at the same context level win.
More specific (deeper) contexts beat broader ones. Default keymaps for each OS live in the
Zed repository under assets/keymaps/.
Disabling Bindings and SendKeystrokes
Set an action to null to disable a binding in a given context:
json[ { "context": "Workspace", "bindings": { "cmd-r": null } } ]
To replay a sequence of keys from one shortcut, use
workspace::SendKeystrokes (for example map a chord to several arrow presses,
or "j k" → Escape in Vim insert mode). Prefer it for short synchronous sequences;
async UI (opening palettes, network) will not finish mid-sequence.
Essential Shortcuts Reference
Dual-platform reference for the shortcuts you will use most often.
Command Palette & Settings
| Action | macOS | Linux / Windows |
|---|---|---|
| Command Palette | ⌘ShiftP | CtrlShiftP |
| File finder | ⌘P | CtrlP |
| Settings | ⌘, | Ctrl, |
| Keymap Editor | ⌘K ⌘S | CtrlK CtrlS |
| Extensions gallery | ⌘ShiftX | CtrlShiftX |
Files & Tabs
| Action | macOS | Linux / Windows |
|---|---|---|
| Save | ⌘S | CtrlS |
| Close tab | ⌘W | CtrlW |
| New file | ⌘N | CtrlN |
| Open recent / project | Command Palette → search “recent” or “project” | |
Editing
| Action | macOS | Linux / Windows |
|---|---|---|
| Undo / Redo | ⌘Z / ⌘ShiftZ | CtrlZ / CtrlShiftZ |
| Cut / Copy / Paste | ⌘X / C / V | CtrlX / C / V |
| Select next occurrence | ⌘D | CtrlD |
| Delete line | ⌘ShiftK | CtrlShiftK |
| Move line up / down | ⌥↑ / ⌥↓ | Alt↑ / Alt↓ |
| Toggle line comment | ⌘/ | Ctrl/ |
| Format document | Command Palette → “format” (bind your preferred action in keymap.json) | |
Navigation & Search
| Action | macOS | Linux / Windows |
|---|---|---|
| Find in file | ⌘F | CtrlF |
| Find in project | ⌘ShiftF | CtrlShiftF |
| Go to line | ⌘G | CtrlG |
| Go to symbol in file | ⌘ShiftO | CtrlShiftO |
| Select larger / smaller syntax node | Often Ctrl→ / Ctrl← (confirm in Keymap Editor) | |
Panels & Layout
| Action | macOS | Linux / Windows |
|---|---|---|
| Toggle left dock / project panel | ⌘B or Command Palette | CtrlB or Command Palette |
| Toggle terminal | Ctrl` | Ctrl` |
| Git Panel focus | Command Palette → git panel: toggle focus | |
| Split editor | Command Palette → “split” (vertical / horizontal) | |
Git
| Action | macOS | Linux / Windows |
|---|---|---|
| Project Diff | CtrlG then D | CtrlG then D |
| Commit | ⌘Enter | CtrlEnter |
| Push / Pull | CtrlG ↑ / ↓ | CtrlG ↑ / ↓ |
| Fetch | CtrlG CtrlG | CtrlG CtrlG |
| Generate commit message | AltTab | AltL |
AI — Agent Panel
| Action | macOS | Linux / Windows |
|---|---|---|
| Toggle Agent Panel | ⌘ShiftA | CtrlShiftA |
Agent and inline-assist shortcuts can vary with settings and extensions. Search the Keymap Editor for “agent” or “assistant” to see your active bindings.
Terminal
| Action | macOS | Linux / Windows |
|---|---|---|
| Toggle terminal | Ctrl` | Ctrl` |
| New terminal | Command Palette → “terminal: new” | |
| Forward keys to terminal (Linux/Windows tip) | In keymap, context Terminal, bind e.g. "ctrl-n": ["terminal::SendKeystroke", "ctrl-n"] |
|
Categories of Shortcuts (Deeper Dive)
Beyond the essentials, group your learning by workflow. Revisit each category until the chords feel automatic.
Editor Navigation
| Action | macOS | Linux / Windows |
|---|---|---|
| Move by word | ⌥← / → | Ctrl← / → (layout-dependent) |
| Line start / end | ⌘← / → | Home / End |
| Document start / end | ⌘↑ / ↓ | CtrlHome / End |
Multi-cursor & Selection
| Action | macOS | Linux / Windows |
|---|---|---|
| Add cursor above / below | ⌘⌥↑ / ↓ | CtrlAlt↑ / ↓ |
| Select all occurrences | ⌘ShiftL | CtrlShiftL |
| Expand / shrink syntax selection | Bind or use base-keymap defaults for editor::SelectLargerSyntaxNode / SelectSmallerSyntaxNode |
|
Print or bookmark the Essential Shortcuts tables and practice five chords a day. Use the Keymap Editor’s search to discover actions you did not know existed.
Quick Reference Card
A compact card of high-frequency actions:
Essential Shortcuts at a Glance
| Category | Action | macOS | Linux / Windows |
|---|---|---|---|
| General | Command Palette | ⌘ShiftP | CtrlShiftP |
| File finder | ⌘P | CtrlP | |
| Agent Panel | ⌘ShiftA | CtrlShiftA | |
| Editing | Multi-cursor next match | ⌘D | CtrlD |
| Comment line | ⌘/ | Ctrl/ | |
| Git / AI | Project Diff | CtrlG D | CtrlG D |
| Terminal | Ctrl` | Ctrl` |
You've Completed Zed 101
Congratulations — you’ve finished the Zed 101 tutorial series. You covered getting started, the interface, editing, navigation, collaboration, the terminal, Git, extensions, and keyboard shortcuts.
Recommended next steps:
- Practice the dual-platform shortcuts you use every day until they are muscle memory
- Set a
base_keymapthat matches your previous editor, then customize from there - Install language, theme, and MCP extensions you need from the gallery
- Join the Zed Discord and read the official docs
Or return to the home page to browse the full tutorial list.