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