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