Key bindings
Zed can be configured via a simple JSON file located at ~/.config/zed/keymap.json
.
Predefined keymaps
We have a growing collection of pre-defined keymaps in zed repository's keymaps folder.
Custom key bindings
Accessing custom key bindings
You can open keymap.json
via ⌘
+ K
, ⌘
+ S
, the command palette, or the Zed > Settings > Open Key Bindings
application menu item.
Adding a custom key binding
To customize key bindings, specify a context and the list of bindings to set. Re-mapping an existing binding will clobber the existing binding in favor of the custom one.
An example of adding a set of custom key bindings:
You can see more examples in Zed's default.json
There are some key bindings that can't be overridden; we are working on an issue surrounding this.
Keybinding syntax
Zed has the ability to match against not just a single keypress, but a sequence of keys typed in order. Each key in the "bindings"
map is a sequence of keypresses separated with a space.
Each key press is a sequence of modifiers followed by a key. The modifiers are:
ctrl-
The control keycmd-
On macOS, this is the command keyalt-
On macOS, this is the option keyshift-
The shift keyfn-
The function key
The keys can be any single unicode codepoint that your keyboard generates (for example a
, 0
, £
or ç
).
A few examples:
"bindings": {
"cmd-k cmd-s": "zed::OpenKeyMap", // matches ⌘-k then ⌘-s
"space e": "editor::Complete", // type space then e
"ç": "editor::Complete", // matches ⌥-c
}
NOTE: Keys on a keyboard are not always the same as the character they generate. For example shift-e
actually types E
(or alt-c
types ç
). Zed allows you to match against either the key and its modifiers or the character it generates. This means you can specify alt-c
or ç
, but not alt-ç
. It is usually better to specify the key and its modifiers, as this will work better on different keyboard layouts.
Remapping keys
A common request is to be able to map from one sequence of keys to another. As of Zed 0.124.0 you can do this with the workspace::SendKeystrokes
action.
There are some limitations to this, notably:
- Any asyncronous operation will not happen until after all your key bindings have been dispatched. For example this means that while you can use a binding to open a file (as in the
cmd-alt-r
example) you cannot send further keystrokes and hope to have them interpretted by the new view. -
- Other examples of asynchronous things are: communicating with a language server, changing the language of a buffer, anything that hits the network.
- There is a limit of 100 simulated keys at a time, this is to avoid accidental infinite recursion if you trigger SendKeystrokes again inside your bindings.
The argument to SendKeystrokes
is a space-separated list of keystrokes (using the same syntax as above). Due to the way that keystrokes are parsed, any segment that is not recognized as a keypress will be sent verbatim to the currently focused input field.
All key bindings
Global
Command | Target | Default Shortcut |
---|---|---|
Toggle focus | Collab Panel | ⌘ + Shift + C |
Toggle inlay hints | Editor | Control + : |
Cancel | Menu | Control + C |
Cancel | Menu | Escape |
Confirm | Menu | Enter |
Secondary confirm | Menu | ⌘ + Enter |
Select first | Menu | Page Up |
Select first | Menu | Shift + Page Down |
Select first | Menu | Shift + Page Up |
Select first | Menu | ⌘ + Up |
Select last | Menu | Page Down |
Select last | Menu | ⌘ + Down |
Select next | Menu | Control + N |
Select next | Menu | Down |
Select prev | Menu | Control + P |
Select prev | Menu | Up |
Show context menu | Menu | Control + Enter |
Use selected query | Menu | Shift + Enter |
Close window | Workspace | ⌘ + Shift + W |
Follow next collaborator | Workspace | Control + Alt + ⌘ + F |
Open | Workspace | ⌘ + O |
Toggle zoom | Workspace | Shift + Escape |
Debug elements | Zed | ⌘ + Alt + I |
Decrease buffer font size | Zed | ⌘ + |
Hide | Zed | ⌘ + H |
Hide others | Zed | Alt + ⌘ + H |
Increase buffer font size | Zed | ⌘ + + |
Increase buffer font size | Zed | ⌘ + = |
Minimize | Zed | ⌘ + M |
Open settings | Zed | ⌘ + , |
Quit | Zed | ⌘ + Q |
Reset buffer font size | Zed | ⌘ + 0 |
Toggle full screen | Zed | Control + ⌘ + F |
Editor
Command | Target | Default Shortcut |
---|---|---|
Suggest | Copilot | Alt + \ |
Add selection above | Editor | ⌘ + Alt + Up |
Add selection above | Editor | ⌘ + Control + P |
Add selection below | Editor | ⌘ + Alt + Down |
Add selection below | Editor | ⌘ + Control + N |
Backspace | Editor | Backspace |
Backspace | Editor | Control + H |
Backspace | Editor | Shift + Backspace |
Cancel | Editor | Escape |
Confirm code action | Editor | Enter |
Confirm completion | Editor | Enter |
Confirm completion | Editor | Tab |
Confirm rename | Editor | Enter |
Context menu first | Editor | Page Up |
Context menu last | Editor | Page Down |
Context menu next | Editor | Control + N |
Context menu next | Editor | Down |
Context menu prev | Editor | Control + P |
Context menu prev | Editor | Up |
Copy | Editor | ⌘ + C |
Cut | Editor | ⌘ + X |
Cut to end of line | Editor | Control + K |
Delete | Editor | Control + D |
Delete | Editor | Delete |
Delete line | Editor | ⌘ + Shift + K |
Delete to beginning of line | Editor | ⌘ + Backspace |
Delete to end of line | Editor | ⌘ + Delete |
Delete to next subword end | Editor | Control + Alt + D |
Delete to next subword end | Editor | Control + Alt + Delete |
Delete to next word end | Editor | Alt + D |
Delete to next word end | Editor | Alt + Delete |
Delete to previous subword start | Editor | Control + Alt + Backspace |
Delete to previous subword start | Editor | Control + Alt + H |
Delete to previous word start | Editor | Alt + Backspace |
Delete to previous word start | Editor | Alt + H |
Delete to previous word start | Editor | Control + W |
Display cursor names | Editor | Control + ⌘ + C |
Duplicate line | Editor | Alt + Shift + Down |
Duplicate line | Editor | Alt + Shift + Up |
Find all references | Editor | Alt + Shift + F12 |
Fold | Editor | Alt + ⌘ + [ |
Format | Editor | ⌘ + Shift + I |
Go to definition | Editor | F12 |
Go to definition split | Editor | Alt + F12 |
Go to diagnostic | Editor | F8 |
Go to prev diagnostic | Editor | Shift + F8 |
Go to type definition | Editor | ⌘ + F12 |
Go to type definition split | Editor | Alt + ⌘ + F12 |
Hover | Editor | ⌘ + K, ⌘ + I |
Indent | Editor | ⌘ + ] |
Join lines | Editor | Control + J |
Move down | Editor | Control + N |
Move down | Editor | Down |
Move left | Editor | Control + B |
Move left | Editor | Left |
Move line down | Editor | Alt + Down |
Move line up | Editor | Alt + Up |
Move page down | Editor | Control + V |
Move page down | Editor | Shift + Page Down |
Move page up | Editor | Alt + V |
Move page up | Editor | Shift + Page Up |
Move right | Editor | Control + F |
Move right | Editor | Right |
Move to beginning | Editor | ⌘ + Up |
Move to beginning of line | Editor | Control + A |
Move to beginning of line | Editor | Home |
Move to beginning of line | Editor | ⌘ + Left |
Move to enclosing bracket | Editor | Control + M |
Move to end | Editor | ⌘ + Down |
Move to end of line | Editor | Control + E |
Move to end of line | Editor | End |
Move to end of line | Editor | ⌘ + Right |
Move to end of paragraph | Editor | Control + Down |
Move to next subword end | Editor | Control + Alt + F |
Move to next subword end | Editor | Control + Alt + Right |
Move to next word end | Editor | Alt + F |
Move to next word end | Editor | Alt + Right |
Move to previous subword start | Editor | Control + Alt + B |
Move to previous subword start | Editor | Control + Alt + Left |
Move to previous word start | Editor | Alt + B |
Move to previous word start | Editor | Alt + Left |
Move to start of paragraph | Editor | Control + Up |
Move up | Editor | Control + P |
Move up | Editor | Up |
Next screen | Editor | Control + L |
Outdent | Editor | ⌘ + [ |
Page down | Editor | Page Down |
Page up | Editor | Page Up |
Paste | Editor | ⌘ + V |
Redo | Editor | ⌘ + Shift + Z |
Redo selection | Editor | ⌘ + Shift + U |
Rename | Editor | F2 |
Reveal in finder | Editor | Alt + ⌘ + R |
Revert selected hunks | Editor | ⌘ + Alt + Z |
Select all | Editor | ⌘ + A |
Select all matches | Editor | ⌘ + Shift + L |
Select down | Editor | Control + Shift + N |
Select down | Editor | Shift + Down |
Select larger syntax node | Editor | Control + Shift + Right |
Select left | Editor | Control + Shift + B |
Select left | Editor | Shift + Left |
Select line | Editor | ⌘ + L |
Select next | Editor | ⌘ + D |
Select next | Editor | ⌘ + K, ⌘ + D |
Select previous | Editor | Control + ⌘ + D |
Select previous | Editor | ⌘ + K, Control + ⌘ + D |
Select right | Editor | Control + Shift + F |
Select right | Editor | Shift + Right |
Select smaller syntax node | Editor | Control + Shift + Left |
Select to beginning | Editor | ⌘ + Shift + Up |
Select to beginning of line | Editor | Control + Shift + A |
Select to beginning of line | Editor | Shift + Home |
Select to beginning of line | Editor | ⌘ + Shift + Left |
Select to end | Editor | ⌘ + Shift + Down |
Select to end of line | Editor | Control + Shift + E |
Select to end of line | Editor | Shift + End |
Select to end of line | Editor | ⌘ + Shift + Right |
Select to end of paragraph | Editor | Control + Shift + Down |
Select to next subword end | Editor | Control + Alt + Shift + F |
Select to next subword end | Editor | Control + Alt + Shift + Right |
Select to next word end | Editor | Alt + Shift + F |
Select to next word end | Editor | Alt + Shift + Right |
Select to previous subword start | Editor | Control + Alt + Shift + B |
Select to previous subword start | Editor | Control + Alt + Shift + Left |
Select to previous word start | Editor | Alt + Shift + B |
Select to previous word start | Editor | Alt + Shift + Left |
Select to start of paragraph | Editor | Control + Shift + Up |
Select up | Editor | Control + Shift + P |
Select up | Editor | Shift + Up |
Show character palette | Editor | Control + ⌘ + Space |
Show completions | Editor | Control + Space |
Tab | Editor | Tab |
Tab prev | Editor | Shift + Tab |
Toggle code actions | Editor | ⌘ + . |
Toggle comments | Editor | ⌘ + / |
Toggle line numbers | Editor | ⌘ + ; |
Transpose | Editor | Control + T |
Undo | Editor | ⌘ + Z |
Undo selection | Editor | ⌘ + U |
Unfold lines | Editor | Alt + ⌘ + ] |
Editor (Full Only)
Command | Target | Default Shortcut |
---|---|---|
Inline assist | Assistant | Control + Enter |
Quote selection | Assistant | ⌘ + > |
Deploy | Buffer Search | ⌘ + E |
Deploy | Buffer Search | ⌘ + F |
Next suggestion | Copilot | Alt + ] |
Previous suggestion | Copilot | Alt + [ |
Accept partial copilot suggestion | Editor | Alt + Right |
Go to hunk | Editor | ⌘ + F8 |
Go to prev hunk | Editor | ⌘ + Shift + F8 |
Newline | Editor | Enter |
Newline | Editor | Shift + Enter |
Newline above | Editor | ⌘ + Shift + Enter |
Newline below | Editor | ⌘ + Enter |
Open excerpts | Editor | Alt + Enter |
Open excerpts split | Editor | ⌘ + K, Enter |
Toggle soft wrap | Editor | Alt + Z |
Toggle | Go To Line | Control + G |
Toggle | Outline | ⌘ + Shift + O |
Editor (Auto Height Only)
Command | Target | Default Shortcut |
---|---|---|
Newline | Editor | Control + Enter |
Newline | Editor | Shift + Enter |
Newline below | Editor | Control + Shift + Enter |
Pane
Command | Target | Default Shortcut |
---|---|---|
Activate item 1 | Pane | Control + 1 |
Activate item 2 | Pane | Control + 2 |
Activate item 3 | Pane | Control + 3 |
Activate item 4 | Pane | Control + 4 |
Activate item 5 | Pane | Control + 5 |
Activate item 6 | Pane | Control + 6 |
Activate item 7 | Pane | Control + 7 |
Activate item 8 | Pane | Control + 8 |
Activate item 9 | Pane | Control + 9 |
Activate last item | Pane | Control + 0 |
Activate next item | Pane | Alt + ⌘ + Right |
Activate next item | Pane | ⌘ + } |
Activate prev item | Pane | Alt + ⌘ + Left |
Activate prev item | Pane | ⌘ + { |
Close active item | Pane | ⌘ + W |
Close all items | Pane | ⌘ + K, ⌘ + W |
Close clean items | Pane | ⌘ + K, U |
Close inactive items | Pane | Alt + ⌘ + T |
Go back | Pane | Control + |
Go forward | Pane | Control + _ |
Reopen closed item | Pane | ⌘ + Shift + T |
Split down | Pane | ⌘ + K, Down |
Split left | Pane | ⌘ + K, Left |
Split right | Pane | ⌘ + K, Right |
Split up | Pane | ⌘ + K, Up |
Toggle filters | Project Search | Alt + ⌘ + F |
Toggle focus | Project Search | ⌘ + F |
Toggle focus | Project Search | ⌘ + Shift + F |
Activate regex mode | Search | Alt + ⌘ + G |
Activate semantic mode | Search | Alt + ⌘ + S |
Activate text mode | Search | Alt + ⌘ + X |
Cycle mode | Search | Alt + Tab |
Select all matches | Search | Alt + Enter |
Select next match | Search | ⌘ + G |
Select prev match | Search | ⌘ + Shift + G |
Toggle case sensitive | Search | Alt + ⌘ + C |
Toggle replace | Search | ⌘ + Shift + H |
Toggle whole word | Search | Alt + ⌘ + W |
Close inactive tabs and panes | Workspace | Control + Alt + ⌘ + W |
Buffer Search Bar
Command | Target | Default Shortcut |
---|---|---|
Dismiss | Buffer Search | Escape |
Focus editor | Buffer Search | Tab |
Cycle mode | Search | Alt + Tab |
Next history query | Search | Down |
Previous history query | Search | Up |
Replace all | Search | ⌘ + Enter |
Replace next | Search | Enter |
Select all matches | Search | Alt + Enter |
Select next match | Search | Enter |
Select prev match | Search | Shift + Enter |
Workspace
Command | Target | Default Shortcut |
---|---|---|
Toggle focus | Assistant | ⌘ + ? |
Open recent | Branches | Alt + ⌘ + B |
Toggle | Command Palette | ⌘ + Shift + P |
Deploy | Diagnostics | ⌘ + Shift + M |
Toggle | File Finder | ⌘ + P |
Toggle | Language Selector | ⌘ + K, M |
Deploy search | Pane | ⌘ + Shift + F |
Toggle focus | Project Panel | ⌘ + Shift + E |
Toggle | Project Symbols | ⌘ + T |
Open recent | Projects | Alt + ⌘ + O |
Rerun | Task | Alt + T |
Spawn | Task | Alt + Shift + T |
Toggle focus | Terminal Panel | Control + ` |
Toggle | Theme Selector | ⌘ + K, ⌘ + T |
Activate pane 1 | Workspace | ⌘ + 1 |
Activate pane 2 | Workspace | ⌘ + 2 |
Activate pane 3 | Workspace | ⌘ + 3 |
Activate pane 4 | Workspace | ⌘ + 4 |
Activate pane 5 | Workspace | ⌘ + 5 |
Activate pane 6 | Workspace | ⌘ + 6 |
Activate pane 7 | Workspace | ⌘ + 7 |
Activate pane 8 | Workspace | ⌘ + 8 |
Activate pane 9 | Workspace | ⌘ + 9 |
Activate pane in direction down | Workspace | ⌘ + K, ⌘ + Down |
Activate pane in direction left | Workspace | ⌘ + K, ⌘ + Left |
Activate pane in direction right | Workspace | ⌘ + K, ⌘ + Right |
Activate pane in direction up | Workspace | ⌘ + K, ⌘ + Up |
Close all docks | Workspace | Alt + ⌘ + Y |
New file | Workspace | ⌘ + N |
New terminal | Workspace | Control + ~ |
New window | Workspace | ⌘ + Shift + N |
Save | Workspace | ⌘ + S |
Save all | Workspace | ⌘ + Alt + S |
Save as | Workspace | ⌘ + Shift + S |
Save without format | Workspace | ⌘ + K, S |
Swap pane in direction | Workspace | ⌘ + K, Shift + Down |
Swap pane in direction | Workspace | ⌘ + K, Shift + Left |
Swap pane in direction | Workspace | ⌘ + K, Shift + Right |
Swap pane in direction | Workspace | ⌘ + K, Shift + Up |
Toggle bottom dock | Workspace | ⌘ + J |
Toggle left dock | Workspace | ⌘ + B |
Toggle right dock | Workspace | ⌘ + R |
Unfollow | Workspace | Escape |
Open keymap | Zed | ⌘ + K, ⌘ + S |
Project Panel
Command | Target | Default Shortcut |
---|---|---|
Collapse selected entry | Project Panel | Left |
Copy | Project Panel | ⌘ + C |
Copy path | Project Panel | ⌘ + Alt + C |
Copy relative path | Project Panel | Alt + ⌘ + Shift + C |
Cut | Project Panel | ⌘ + X |
Delete | Project Panel | Delete |
Delete | Project Panel | ⌘ + Backspace |
Expand selected entry | Project Panel | Right |
New directory | Project Panel | Alt + ⌘ + N |
New file | Project Panel | ⌘ + N |
New search in directory | Project Panel | Alt + Shift + F |
Open | Project Panel | Space |
Paste | Project Panel | ⌘ + V |
Rename | Project Panel | Enter |
Rename | Project Panel | F2 |
Reveal in finder | Project Panel | Alt + ⌘ + R |
Project Search Bar
Command | Target | Default Shortcut |
---|---|---|
Search in new | Project Search | ⌘ + Enter |
Toggle focus | Project Search | Escape |
Activate regex mode | Search | Alt + ⌘ + G |
Activate semantic mode | Search | Alt + ⌘ + S |
Activate text mode | Search | Alt + ⌘ + X |
Cycle mode | Search | Alt + Tab |
Next history query | Search | Down |
Previous history query | Search | Up |
Replace all | Search | ⌘ + Enter |
Replace next | Search | Enter |
Toggle replace | Search | ⌘ + Shift + H |
Terminal
Command | Target | Default Shortcut |
---|---|---|
Clear | Terminal | ⌘ + K |
Copy | Terminal | ⌘ + C |
Delete line | Terminal | ⌘ + Backspace |
Move to beginning of line | Terminal | ⌘ + Left |
Move to end of line | Terminal | ⌘ + Right |
Move to next word end | Terminal | Alt + Right |
Move to previous word start | Terminal | Alt + Left |
Paste | Terminal | ⌘ + V |
Show character palette | Terminal | Control + ⌘ + Space |
Assistant Editor
Command | Target | Default Shortcut |
---|---|---|
Assist | Assistant | ⌘ + Enter |
Cycle message role | Assistant | Control + R |
Quote selection | Assistant | ⌘ + > |
Split | Assistant | Shift + Enter |
Save | Workspace | ⌘ + S |