1[
2 {
3 "context": "Editor && VimControl && !VimWaiting && !menu",
4 "bindings": {
5 "i": [
6 "vim::PushOperator",
7 {
8 "Object": {
9 "around": false
10 }
11 }
12 ],
13 "a": [
14 "vim::PushOperator",
15 {
16 "Object": {
17 "around": true
18 }
19 }
20 ],
21 "h": "vim::Left",
22 "left": "vim::Left",
23 "backspace": "vim::Backspace",
24 "j": "vim::Down",
25 "down": "vim::Down",
26 "enter": "vim::NextLineStart",
27 "tab": "vim::Tab",
28 "shift-tab": "vim::Tab",
29 "k": "vim::Up",
30 "up": "vim::Up",
31 "l": "vim::Right",
32 "right": "vim::Right",
33 "$": "vim::EndOfLine",
34 "^": "vim::FirstNonWhitespace",
35 "shift-g": "vim::EndOfDocument",
36 "w": "vim::NextWordStart",
37 "{": "vim::StartOfParagraph",
38 "}": "vim::EndOfParagraph",
39 "shift-w": [
40 "vim::NextWordStart",
41 {
42 "ignorePunctuation": true
43 }
44 ],
45 "e": "vim::NextWordEnd",
46 "shift-e": [
47 "vim::NextWordEnd",
48 {
49 "ignorePunctuation": true
50 }
51 ],
52 "b": "vim::PreviousWordStart",
53 "shift-b": [
54 "vim::PreviousWordStart",
55 {
56 "ignorePunctuation": true
57 }
58 ],
59 "n": "search::SelectNextMatch",
60 "shift-n": "search::SelectPrevMatch",
61 "%": "vim::Matching",
62 "f": [
63 "vim::PushOperator",
64 {
65 "FindForward": {
66 "before": false
67 }
68 }
69 ],
70 "t": [
71 "vim::PushOperator",
72 {
73 "FindForward": {
74 "before": true
75 }
76 }
77 ],
78 "shift-f": [
79 "vim::PushOperator",
80 {
81 "FindBackward": {
82 "after": false
83 }
84 }
85 ],
86 "shift-t": [
87 "vim::PushOperator",
88 {
89 "FindBackward": {
90 "after": true
91 }
92 }
93 ],
94 "ctrl-o": "pane::GoBack",
95 "ctrl-]": "editor::GoToDefinition",
96 "escape": [
97 "vim::SwitchMode",
98 "Normal"
99 ],
100 "ctrl+[": [
101 "vim::SwitchMode",
102 "Normal"
103 ],
104 "v": "vim::ToggleVisual",
105 "shift-v": "vim::ToggleVisualLine",
106 "ctrl-v": "vim::ToggleVisualBlock",
107 "ctrl-q": "vim::ToggleVisualBlock",
108 "*": "vim::MoveToNext",
109 "#": "vim::MoveToPrev",
110 "0": "vim::StartOfLine", // When no number operator present, use start of line motion
111 "ctrl-f": "vim::PageDown",
112 "pagedown": "vim::PageDown",
113 "ctrl-b": "vim::PageUp",
114 "pageup": "vim::PageUp",
115 "ctrl-d": "vim::ScrollDown",
116 "ctrl-u": "vim::ScrollUp",
117 "ctrl-e": "vim::LineDown",
118 "ctrl-y": "vim::LineUp",
119 // "g" commands
120 "g g": "vim::StartOfDocument",
121 "g h": "editor::Hover",
122 "g t": "pane::ActivateNextItem",
123 "g shift-t": "pane::ActivatePrevItem",
124 "g d": "editor::GoToDefinition",
125 "g shift-d": "editor::GoToTypeDefinition",
126 "g .": "editor::ToggleCodeActions", // zed specific
127 "g shift-a": "editor::FindAllReferences", // zed specific
128 "g *": [
129 "vim::MoveToNext",
130 {
131 "partialWord": true
132 }
133 ],
134 "g #": [
135 "vim::MoveToPrev",
136 {
137 "partialWord": true
138 }
139 ],
140 // z commands
141 "z t": "editor::ScrollCursorTop",
142 "z z": "editor::ScrollCursorCenter",
143 "z b": "editor::ScrollCursorBottom",
144 // Count support
145 "1": [
146 "vim::Number",
147 1
148 ],
149 "2": [
150 "vim::Number",
151 2
152 ],
153 "3": [
154 "vim::Number",
155 3
156 ],
157 "4": [
158 "vim::Number",
159 4
160 ],
161 "5": [
162 "vim::Number",
163 5
164 ],
165 "6": [
166 "vim::Number",
167 6
168 ],
169 "7": [
170 "vim::Number",
171 7
172 ],
173 "8": [
174 "vim::Number",
175 8
176 ],
177 "9": [
178 "vim::Number",
179 9
180 ],
181 // window related commands (ctrl-w X)
182 "ctrl-w left": [
183 "workspace::ActivatePaneInDirection",
184 "Left"
185 ],
186 "ctrl-w right": [
187 "workspace::ActivatePaneInDirection",
188 "Right"
189 ],
190 "ctrl-w up": [
191 "workspace::ActivatePaneInDirection",
192 "Up"
193 ],
194 "ctrl-w down": [
195 "workspace::ActivatePaneInDirection",
196 "Down"
197 ],
198 "ctrl-w h": [
199 "workspace::ActivatePaneInDirection",
200 "Left"
201 ],
202 "ctrl-w l": [
203 "workspace::ActivatePaneInDirection",
204 "Right"
205 ],
206 "ctrl-w k": [
207 "workspace::ActivatePaneInDirection",
208 "Up"
209 ],
210 "ctrl-w j": [
211 "workspace::ActivatePaneInDirection",
212 "Down"
213 ],
214 "ctrl-w ctrl-h": [
215 "workspace::ActivatePaneInDirection",
216 "Left"
217 ],
218 "ctrl-w ctrl-l": [
219 "workspace::ActivatePaneInDirection",
220 "Right"
221 ],
222 "ctrl-w ctrl-k": [
223 "workspace::ActivatePaneInDirection",
224 "Up"
225 ],
226 "ctrl-w ctrl-j": [
227 "workspace::ActivatePaneInDirection",
228 "Down"
229 ],
230 "ctrl-w g t": "pane::ActivateNextItem",
231 "ctrl-w ctrl-g t": "pane::ActivateNextItem",
232 "ctrl-w g shift-t": "pane::ActivatePrevItem",
233 "ctrl-w ctrl-g shift-t": "pane::ActivatePrevItem",
234 "ctrl-w w": "workspace::ActivateNextPane",
235 "ctrl-w ctrl-w": "workspace::ActivateNextPane",
236 "ctrl-w p": "workspace::ActivatePreviousPane",
237 "ctrl-w ctrl-p": "workspace::ActivatePreviousPane",
238 "ctrl-w shift-w": "workspace::ActivatePreviousPane",
239 "ctrl-w ctrl-shift-w": "workspace::ActivatePreviousPane",
240 "ctrl-w v": "pane::SplitLeft",
241 "ctrl-w ctrl-v": "pane::SplitLeft",
242 "ctrl-w s": "pane::SplitUp",
243 "ctrl-w shift-s": "pane::SplitUp",
244 "ctrl-w ctrl-s": "pane::SplitUp",
245 "ctrl-w c": "pane::CloseAllItems",
246 "ctrl-w ctrl-c": "pane::CloseAllItems",
247 "ctrl-w q": "pane::CloseAllItems",
248 "ctrl-w ctrl-q": "pane::CloseAllItems"
249 }
250 },
251 {
252 // escape is in its own section so that it cancels a pending count.
253 "context": "Editor && vim_mode == normal && vim_operator == none && !VimWaiting",
254 "bindings": {
255 "escape": "editor::Cancel",
256 "ctrl+[": "editor::Cancel"
257 }
258 },
259 {
260 "context": "Editor && vim_mode == normal && (vim_operator == none || vim_operator == n) && !VimWaiting",
261 "bindings": {
262 "c": [
263 "vim::PushOperator",
264 "Change"
265 ],
266 "shift-c": "vim::ChangeToEndOfLine",
267 "d": [
268 "vim::PushOperator",
269 "Delete"
270 ],
271 "shift-d": "vim::DeleteToEndOfLine",
272 "shift-j": "editor::JoinLines",
273 "y": [
274 "vim::PushOperator",
275 "Yank"
276 ],
277 "i": [
278 "vim::SwitchMode",
279 "Insert"
280 ],
281 "shift-i": "vim::InsertFirstNonWhitespace",
282 "a": "vim::InsertAfter",
283 "shift-a": "vim::InsertEndOfLine",
284 "x": "vim::DeleteRight",
285 "shift-x": "vim::DeleteLeft",
286 "o": "vim::InsertLineBelow",
287 "shift-o": "vim::InsertLineAbove",
288 "~": "vim::ChangeCase",
289 "p": "vim::Paste",
290 "shift-p": [
291 "vim::Paste",
292 {
293 "before": true
294 }
295 ],
296 "u": "editor::Undo",
297 "ctrl-r": "editor::Redo",
298 "/": "vim::Search",
299 "?": [
300 "vim::Search",
301 {
302 "backwards": true
303 }
304 ],
305 ";": "vim::RepeatFind",
306 ",": [
307 "vim::RepeatFind",
308 {
309 "backwards": true
310 }
311 ],
312 "r": [
313 "vim::PushOperator",
314 "Replace"
315 ],
316 "s": "vim::Substitute",
317 "> >": "editor::Indent",
318 "< <": "editor::Outdent",
319 "ctrl-pagedown": "pane::ActivateNextItem",
320 "ctrl-pageup": "pane::ActivatePrevItem"
321 }
322 },
323 {
324 "context": "Editor && vim_operator == n",
325 "bindings": {
326 "0": [
327 "vim::Number",
328 0
329 ]
330 }
331 },
332 {
333 "context": "Editor && vim_operator == c",
334 "bindings": {
335 "c": "vim::CurrentLine",
336 "d": "editor::Rename" // zed specific
337 }
338 },
339 {
340 "context": "Editor && vim_operator == d",
341 "bindings": {
342 "d": "vim::CurrentLine"
343 }
344 },
345 {
346 "context": "Editor && vim_operator == y",
347 "bindings": {
348 "y": "vim::CurrentLine"
349 }
350 },
351 {
352 "context": "Editor && VimObject",
353 "bindings": {
354 "w": "vim::Word",
355 "shift-w": [
356 "vim::Word",
357 {
358 "ignorePunctuation": true
359 }
360 ],
361 "s": "vim::Sentence",
362 "'": "vim::Quotes",
363 "`": "vim::BackQuotes",
364 "\"": "vim::DoubleQuotes",
365 "(": "vim::Parentheses",
366 ")": "vim::Parentheses",
367 "[": "vim::SquareBrackets",
368 "]": "vim::SquareBrackets",
369 "{": "vim::CurlyBrackets",
370 "}": "vim::CurlyBrackets",
371 "<": "vim::AngleBrackets",
372 ">": "vim::AngleBrackets"
373 }
374 },
375 {
376 "context": "Editor && vim_mode == visual && !VimWaiting && !VimObject",
377 "bindings": {
378 "u": "editor::Undo",
379 "o": "vim::OtherEnd",
380 "shift-o": "vim::OtherEnd",
381 "d": "vim::VisualDelete",
382 "x": "vim::VisualDelete",
383 "y": "vim::VisualYank",
384 "p": "vim::Paste",
385 "shift-p": [
386 "vim::Paste",
387 {
388 "preserveClipboard": true
389 }
390 ],
391 "s": "vim::Substitute",
392 "c": "vim::Substitute",
393 "~": "vim::ChangeCase",
394 "shift-i": [
395 "vim::SwitchMode",
396 "Insert"
397 ],
398 "shift-a": "vim::InsertAfter",
399 "r": [
400 "vim::PushOperator",
401 "Replace"
402 ],
403 "ctrl-c": [
404 "vim::SwitchMode",
405 "Normal"
406 ],
407 "escape": [
408 "vim::SwitchMode",
409 "Normal"
410 ],
411 "ctrl+[": [
412 "vim::SwitchMode",
413 "Normal"
414 ],
415 ">": "editor::Indent",
416 "<": "editor::Outdent",
417 "i": [
418 "vim::PushOperator",
419 {
420 "Object": {
421 "around": false
422 }
423 }
424 ],
425 "a": [
426 "vim::PushOperator",
427 {
428 "Object": {
429 "around": true
430 }
431 }
432 ],
433 }
434 },
435 {
436 "context": "Editor && vim_mode == insert && !menu",
437 "bindings": {
438 "escape": "vim::NormalBefore",
439 "ctrl-c": "vim::NormalBefore",
440 "ctrl-[": "vim::NormalBefore"
441 }
442 },
443 {
444 "context": "Editor && VimWaiting",
445 "bindings": {
446 "tab": "vim::Tab",
447 "enter": "vim::Enter",
448 "escape": [
449 "vim::SwitchMode",
450 "Normal"
451 ],
452 "ctrl+[": [
453 "vim::SwitchMode",
454 "Normal"
455 ]
456 }
457 },
458 {
459 "context": "BufferSearchBar > VimEnabled",
460 "bindings": {
461 "enter": "vim::SearchSubmit",
462 "escape": "buffer_search::Dismiss"
463 }
464 }
465]