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