vim.json

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