1// documentation: https://zed.dev/docs/key-bindings
2//
3// To see the default key bindings run `zed: open default keymap`
4// from the command palette.
5[
6 {
7 "context": "!GitPanel",
8 "bindings": {
9 "ctrl-g": "menu::Cancel"
10 }
11 },
12 {
13 "context": "Editor",
14 "bindings": {
15 "alt-x": "command_palette::Toggle",
16 "ctrl-g": "editor::Cancel",
17 "ctrl-x b": "tab_switcher::Toggle", // switch-to-buffer
18 "ctrl-x ctrl-b": "tab_switcher::Toggle", // list-buffers
19 "alt-g g": "go_to_line::Toggle", // goto-line
20 "alt-g alt-g": "go_to_line::Toggle", // goto-line
21 "ctrl-space": "editor::SetMark", // set-mark
22 "ctrl-@": "editor::SetMark", // set-mark
23 "ctrl-x ctrl-x": "editor::SwapSelectionEnds", // exchange-point-and-mark
24 "ctrl-f": "editor::MoveRight", // forward-char
25 "ctrl-b": "editor::MoveLeft", // backward-char
26 "ctrl-n": "editor::MoveDown", // next-line
27 "ctrl-p": "editor::MoveUp", // previous-line
28 "home": ["editor::MoveToBeginningOfLine", { "stop_at_soft_wraps": false }], // move-beginning-of-line
29 "end": ["editor::MoveToEndOfLine", { "stop_at_soft_wraps": false }], // move-end-of-line
30 "ctrl-a": ["editor::MoveToBeginningOfLine", { "stop_at_soft_wraps": false }], // move-beginning-of-line
31 "ctrl-e": ["editor::MoveToEndOfLine", { "stop_at_soft_wraps": false }], // move-end-of-line
32 "shift-home": ["editor::SelectToBeginningOfLine", { "stop_at_soft_wraps": false }], // move-beginning-of-line
33 "shift-end": ["editor::SelectToEndOfLine", { "stop_at_soft_wraps": false }], // move-end-of-line
34 "alt-m": ["editor::MoveToBeginningOfLine", { "stop_at_soft_wraps": false, "stop_at_indent": true }], // back-to-indentation
35 "alt-left": "editor::MoveToPreviousWordStart", // left-word
36 "alt-right": "editor::MoveToNextWordEnd", // right-word
37 "alt-f": "editor::MoveToNextSubwordEnd", // forward-word
38 "alt-b": "editor::MoveToPreviousSubwordStart", // backward-word
39 "alt-u": "editor::ConvertToUpperCase", // upcase-word
40 "alt-l": "editor::ConvertToLowerCase", // downcase-word
41 "alt-c": "editor::ConvertToUpperCamelCase", // capitalize-word
42 "ctrl-t": "editor::Transpose", // transpose-chars
43 "alt-;": ["editor::ToggleComments", { "advance_downwards": false }],
44 "ctrl-x ctrl-;": "editor::ToggleComments",
45 "alt-.": "editor::GoToDefinition", // xref-find-definitions
46 "alt-?": "editor::FindAllReferences", // xref-find-references
47 "alt-,": "pane::GoBack", // xref-pop-marker-stack
48 "ctrl-x h": "editor::SelectAll", // mark-whole-buffer
49 "ctrl-d": "editor::Delete", // delete-char
50 "alt-d": ["editor::DeleteToNextWordEnd", { "ignore_newlines": false, "ignore_brackets": false }], // kill-word
51 "alt-backspace": "editor::DeleteToPreviousWordStart", // backward-kill-word
52 "alt-delete": "editor::DeleteToPreviousWordStart", // backward-kill-word
53 "ctrl-k": "editor::KillRingCut", // kill-line
54 "ctrl-w": "editor::Cut", // kill-region
55 "alt-w": "editor::Copy", // kill-ring-save
56 "ctrl-y": "editor::KillRingYank", // yank
57 "ctrl-_": "editor::Undo", // undo
58 "ctrl-/": "editor::Undo", // undo
59 "ctrl-x u": "editor::Undo", // undo
60 "alt-{": "editor::MoveToStartOfParagraph", // backward-paragraph
61 "alt-}": "editor::MoveToEndOfParagraph", // forward-paragraph
62 "ctrl-up": "editor::MoveToStartOfParagraph", // backward-paragraph
63 "ctrl-down": "editor::MoveToEndOfParagraph", // forward-paragraph
64 "ctrl-v": "editor::MovePageDown", // scroll-up
65 "alt-v": "editor::MovePageUp", // scroll-down
66 "ctrl-x [": "editor::MoveToBeginning", // beginning-of-buffer
67 "ctrl-x ]": "editor::MoveToEnd", // end-of-buffer
68 "alt-<": "editor::MoveToBeginning", // beginning-of-buffer
69 "alt->": "editor::MoveToEnd", // end-of-buffer
70 "ctrl-home": "editor::MoveToBeginning", // beginning-of-buffer
71 "ctrl-end": "editor::MoveToEnd", // end-of-buffer
72 "ctrl-l": "editor::ScrollCursorCenterTopBottom", // recenter-top-bottom
73 "ctrl-s": "buffer_search::Deploy", // isearch-forward
74 "ctrl-r": "buffer_search::Deploy", // isearch-backward
75 "alt-^": "editor::JoinLines", // join-line
76 "alt-q": "editor::Rewrap" // fill-paragraph
77 }
78 },
79 {
80 "context": "Editor && selection_mode", // region selection
81 "bindings": {
82 "right": "editor::SelectRight",
83 "left": "editor::SelectLeft",
84 "down": "editor::SelectDown",
85 "up": "editor::SelectUp",
86 "alt-left": "editor::SelectToPreviousWordStart",
87 "alt-right": "editor::SelectToNextWordEnd",
88 "pagedown": "editor::SelectPageDown",
89 "ctrl-v": "editor::SelectPageDown",
90 "pageup": "editor::SelectPageUp",
91 "alt-v": "editor::SelectPageUp",
92 "ctrl-f": "editor::SelectRight",
93 "ctrl-b": "editor::SelectLeft",
94 "ctrl-n": "editor::SelectDown",
95 "ctrl-p": "editor::SelectUp",
96 "home": ["editor::SelectToBeginningOfLine", { "stop_at_soft_wraps": false }],
97 "end": ["editor::SelectToEndOfLine", { "stop_at_soft_wraps": false }],
98 "ctrl-a": ["editor::SelectToBeginningOfLine", { "stop_at_soft_wraps": false }],
99 "ctrl-e": ["editor::SelectToEndOfLine", { "stop_at_soft_wraps": false }],
100 "alt-m": ["editor::SelectToBeginningOfLine", { "stop_at_soft_wraps": false, "stop_at_indent": true }],
101 "alt-f": "editor::SelectToNextWordEnd",
102 "alt-b": "editor::SelectToPreviousSubwordStart",
103 "alt-{": "editor::SelectToStartOfParagraph",
104 "alt-}": "editor::SelectToEndOfParagraph",
105 "ctrl-up": "editor::SelectToStartOfParagraph",
106 "ctrl-down": "editor::SelectToEndOfParagraph",
107 "ctrl-x [": "editor::SelectToBeginning",
108 "ctrl-x ]": "editor::SelectToEnd",
109 "alt-<": "editor::SelectToBeginning",
110 "alt->": "editor::SelectToEnd",
111 "ctrl-home": "editor::SelectToBeginning",
112 "ctrl-end": "editor::SelectToEnd",
113 "ctrl-g": "editor::Cancel"
114 }
115 },
116 {
117 "context": "Editor && (showing_code_actions || showing_completions)",
118 "bindings": {
119 "ctrl-p": "editor::ContextMenuPrevious",
120 "ctrl-n": "editor::ContextMenuNext"
121 }
122 },
123 {
124 "context": "Editor && showing_signature_help && !showing_completions",
125 "bindings": {
126 "ctrl-p": "editor::SignatureHelpPrevious",
127 "ctrl-n": "editor::SignatureHelpNext"
128 }
129 },
130 {
131 "context": "Workspace",
132 "bindings": {
133 "ctrl-x ctrl-c": "zed::Quit", // save-buffers-kill-terminal
134 "ctrl-x 5 0": "workspace::CloseWindow", // delete-frame
135 "ctrl-x 5 2": "workspace::NewWindow", // make-frame-command
136 "ctrl-x o": "workspace::ActivateNextPane", // other-window
137 "ctrl-x k": "pane::CloseActiveItem", // kill-buffer
138 "ctrl-x 0": "pane::CloseActiveItem", // delete-window
139 "ctrl-x 1": "pane::CloseOtherItems", // delete-other-windows
140 "ctrl-x 2": "pane::SplitDown", // split-window-below
141 "ctrl-x 3": "pane::SplitRight", // split-window-right
142 "ctrl-x ctrl-f": "file_finder::Toggle", // find-file
143 "ctrl-x ctrl-s": "workspace::Save", // save-buffer
144 "ctrl-x ctrl-w": "workspace::SaveAs", // write-file
145 "ctrl-x s": "workspace::SaveAll" // save-some-buffers
146 }
147 },
148 {
149 // Workaround to enable using emacs in the Zed terminal.
150 // Unbind so Zed ignores these keys and lets emacs handle them.
151 "context": "Terminal",
152 "bindings": {
153 "ctrl-x ctrl-c": null, // save-buffers-kill-terminal
154 "ctrl-x ctrl-f": null, // find-file
155 "ctrl-x ctrl-s": null, // save-buffer
156 "ctrl-x ctrl-w": null, // write-file
157 "ctrl-x s": null // save-some-buffers
158 }
159 },
160 {
161 "context": "BufferSearchBar > Editor",
162 "bindings": {
163 "ctrl-s": "search::SelectNextMatch",
164 "ctrl-r": "search::SelectPreviousMatch",
165 "ctrl-g": "buffer_search::Dismiss"
166 }
167 },
168 {
169 "context": "Pane",
170 "bindings": {
171 "ctrl-alt-left": "pane::GoBack",
172 "ctrl-alt-right": "pane::GoForward"
173 }
174 }
175]