vim.json

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