vim.json

  1[
  2  {
  3    "context": "VimControl && !menu",
  4    "bindings": {
  5      "i": ["vim::PushOperator", { "Object": { "around": false } }],
  6      "a": ["vim::PushOperator", { "Object": { "around": true } }],
  7      "h": "vim::Left",
  8      "left": "vim::Left",
  9      "backspace": "vim::Backspace",
 10      "j": "vim::Down",
 11      "down": "vim::Down",
 12      "ctrl-j": "vim::Down",
 13      "enter": "vim::NextLineStart",
 14      "ctrl-m": "vim::NextLineStart",
 15      "+": "vim::NextLineStart",
 16      "-": "vim::PreviousLineStart",
 17      "tab": "vim::Tab",
 18      "shift-tab": "vim::Tab",
 19      "k": "vim::Up",
 20      "up": "vim::Up",
 21      "l": "vim::Right",
 22      "right": "vim::Right",
 23      "space": "vim::Space",
 24      "$": "vim::EndOfLine",
 25      "end": "vim::EndOfLine",
 26      "^": "vim::FirstNonWhitespace",
 27      "_": "vim::StartOfLineDownward",
 28      "g _": "vim::EndOfLineDownward",
 29      "shift-g": "vim::EndOfDocument",
 30      "{": "vim::StartOfParagraph",
 31      "}": "vim::EndOfParagraph",
 32      "(": "vim::SentenceBackward",
 33      ")": "vim::SentenceForward",
 34      "|": "vim::GoToColumn",
 35      // Word motions
 36      "w": "vim::NextWordStart",
 37      "e": "vim::NextWordEnd",
 38      "b": "vim::PreviousWordStart",
 39      "g e": "vim::PreviousWordEnd",
 40      // Subword motions
 41      // "w": "vim::NextSubwordStart",
 42      // "b": "vim::PreviousSubwordStart",
 43      // "e": "vim::NextSubwordEnd",
 44      // "g e": "vim::PreviousSubwordEnd",
 45      "shift-w": ["vim::NextWordStart", { "ignorePunctuation": true }],
 46      "shift-e": ["vim::NextWordEnd", { "ignorePunctuation": true }],
 47      "shift-b": ["vim::PreviousWordStart", { "ignorePunctuation": true }],
 48      "g shift-e": ["vim::PreviousWordEnd", { "ignorePunctuation": true }],
 49      "/": "vim::Search",
 50      "g /": "pane::DeploySearch",
 51      "?": ["vim::Search", { "backwards": true }],
 52      "*": "vim::MoveToNext",
 53      "#": "vim::MoveToPrev",
 54      "n": "vim::MoveToNextMatch",
 55      "shift-n": "vim::MoveToPrevMatch",
 56      "%": "vim::Matching",
 57      "f": ["vim::PushOperator", { "FindForward": { "before": false } }],
 58      "t": ["vim::PushOperator", { "FindForward": { "before": true } }],
 59      "shift-f": ["vim::PushOperator", { "FindBackward": { "after": false } }],
 60      "shift-t": ["vim::PushOperator", { "FindBackward": { "after": true } }],
 61      "m": ["vim::PushOperator", "Mark"],
 62      "'": ["vim::PushOperator", { "Jump": { "line": true } }],
 63      "`": ["vim::PushOperator", { "Jump": { "line": false } }],
 64      ";": "vim::RepeatFind",
 65      ",": "vim::RepeatFindReversed",
 66      "ctrl-o": "pane::GoBack",
 67      "ctrl-i": "pane::GoForward",
 68      "ctrl-]": "editor::GoToDefinition",
 69      "escape": ["vim::SwitchMode", "Normal"],
 70      "ctrl-[": ["vim::SwitchMode", "Normal"],
 71      "v": "vim::ToggleVisual",
 72      "shift-v": "vim::ToggleVisualLine",
 73      "ctrl-v": "vim::ToggleVisualBlock",
 74      "ctrl-q": "vim::ToggleVisualBlock",
 75      "shift-k": "editor::Hover",
 76      "shift-r": "vim::ToggleReplace",
 77      "0": "vim::StartOfLine",
 78      "home": "vim::StartOfLine",
 79      "ctrl-f": "vim::PageDown",
 80      "pagedown": "vim::PageDown",
 81      "ctrl-b": "vim::PageUp",
 82      "pageup": "vim::PageUp",
 83      "ctrl-d": "vim::ScrollDown",
 84      "ctrl-u": "vim::ScrollUp",
 85      "ctrl-e": "vim::LineDown",
 86      "ctrl-y": "vim::LineUp",
 87      // "g" commands
 88      "g g": "vim::StartOfDocument",
 89      "g h": "editor::Hover",
 90      "g t": "pane::ActivateNextItem",
 91      "g shift-t": "pane::ActivatePrevItem",
 92      "g d": "editor::GoToDefinition",
 93      "g shift-d": "editor::GoToDeclaration",
 94      "g y": "editor::GoToTypeDefinition",
 95      "g shift-i": "editor::GoToImplementation",
 96      "g x": "editor::OpenUrl",
 97      "g f": "editor::OpenFile",
 98      "g n": "vim::SelectNextMatch",
 99      "g shift-n": "vim::SelectPreviousMatch",
100      "g l": "vim::SelectNext",
101      "g shift-l": "vim::SelectPrevious",
102      "g >": ["editor::SelectNext", { "replace_newest": true }],
103      "g <": ["editor::SelectPrevious", { "replace_newest": true }],
104      "g a": "editor::SelectAllMatches",
105      "g s": "outline::Toggle",
106      "g shift-s": "project_symbols::Toggle",
107      "g .": "editor::ToggleCodeActions", // zed specific
108      "g shift-a": "editor::FindAllReferences", // zed specific
109      "g space": "editor::OpenExcerpts", // zed specific
110      "g *": ["vim::MoveToNext", { "partialWord": true }],
111      "g #": ["vim::MoveToPrev", { "partialWord": true }],
112      "g j": ["vim::Down", { "displayLines": true }],
113      "g down": ["vim::Down", { "displayLines": true }],
114      "g k": ["vim::Up", { "displayLines": true }],
115      "g up": ["vim::Up", { "displayLines": true }],
116      "g $": ["vim::EndOfLine", { "displayLines": true }],
117      "g end": ["vim::EndOfLine", { "displayLines": true }],
118      "g 0": ["vim::StartOfLine", { "displayLines": true }],
119      "g home": ["vim::StartOfLine", { "displayLines": true }],
120      "g ^": ["vim::FirstNonWhitespace", { "displayLines": true }],
121      "g v": "vim::RestoreVisualSelection",
122      "g ]": "editor::GoToDiagnostic",
123      "g [": "editor::GoToPrevDiagnostic",
124      "g i": "vim::InsertAtPrevious",
125      "g ,": "vim::ChangeListNewer",
126      "g ;": "vim::ChangeListOlder",
127      "shift-h": "vim::WindowTop",
128      "shift-m": "vim::WindowMiddle",
129      "shift-l": "vim::WindowBottom",
130      // z commands
131      "z enter": ["workspace::SendKeystrokes", "z t ^"],
132      "z -": ["workspace::SendKeystrokes", "z b ^"],
133      "z ^": ["workspace::SendKeystrokes", "shift-h k z b ^"],
134      "z +": ["workspace::SendKeystrokes", "shift-l j z t ^"],
135      "z t": "editor::ScrollCursorTop",
136      "z z": "editor::ScrollCursorCenter",
137      "z .": ["workspace::SendKeystrokes", "z z ^"],
138      "z b": "editor::ScrollCursorBottom",
139      "z a": "editor::ToggleFold",
140      "z A": "editor::ToggleFoldRecursive",
141      "z c": "editor::Fold",
142      "z C": "editor::FoldRecursive",
143      "z o": "editor::UnfoldLines",
144      "z O": "editor::UnfoldRecursive",
145      "z f": "editor::FoldSelectedRanges",
146      "z M": "editor::FoldAll",
147      "z R": "editor::UnfoldAll",
148      "shift-z shift-q": ["pane::CloseActiveItem", { "saveIntent": "skip" }],
149      "shift-z shift-z": ["pane::CloseActiveItem", { "saveIntent": "saveAll" }],
150      // Count support
151      "1": ["vim::Number", 1],
152      "2": ["vim::Number", 2],
153      "3": ["vim::Number", 3],
154      "4": ["vim::Number", 4],
155      "5": ["vim::Number", 5],
156      "6": ["vim::Number", 6],
157      "7": ["vim::Number", 7],
158      "8": ["vim::Number", 8],
159      "9": ["vim::Number", 9],
160      // window related commands (ctrl-w X)
161      "ctrl-w": null,
162      "ctrl-w left": ["workspace::ActivatePaneInDirection", "Left"],
163      "ctrl-w right": ["workspace::ActivatePaneInDirection", "Right"],
164      "ctrl-w up": ["workspace::ActivatePaneInDirection", "Up"],
165      "ctrl-w down": ["workspace::ActivatePaneInDirection", "Down"],
166      "ctrl-w h": ["workspace::ActivatePaneInDirection", "Left"],
167      "ctrl-w l": ["workspace::ActivatePaneInDirection", "Right"],
168      "ctrl-w k": ["workspace::ActivatePaneInDirection", "Up"],
169      "ctrl-w j": ["workspace::ActivatePaneInDirection", "Down"],
170      "ctrl-w ctrl-h": ["workspace::ActivatePaneInDirection", "Left"],
171      "ctrl-w ctrl-l": ["workspace::ActivatePaneInDirection", "Right"],
172      "ctrl-w ctrl-k": ["workspace::ActivatePaneInDirection", "Up"],
173      "ctrl-w ctrl-j": ["workspace::ActivatePaneInDirection", "Down"],
174      "ctrl-w shift-left": ["workspace::SwapPaneInDirection", "Left"],
175      "ctrl-w shift-right": ["workspace::SwapPaneInDirection", "Right"],
176      "ctrl-w shift-up": ["workspace::SwapPaneInDirection", "Up"],
177      "ctrl-w shift-down": ["workspace::SwapPaneInDirection", "Down"],
178      "ctrl-w shift-h": ["workspace::SwapPaneInDirection", "Left"],
179      "ctrl-w shift-l": ["workspace::SwapPaneInDirection", "Right"],
180      "ctrl-w shift-k": ["workspace::SwapPaneInDirection", "Up"],
181      "ctrl-w shift-j": ["workspace::SwapPaneInDirection", "Down"],
182      "ctrl-w g t": "pane::ActivateNextItem",
183      "ctrl-w ctrl-g t": "pane::ActivateNextItem",
184      "ctrl-w g shift-t": "pane::ActivatePrevItem",
185      "ctrl-w ctrl-g shift-t": "pane::ActivatePrevItem",
186      "ctrl-w w": "workspace::ActivateNextPane",
187      "ctrl-w ctrl-w": "workspace::ActivateNextPane",
188      "ctrl-w p": "workspace::ActivatePreviousPane",
189      "ctrl-w ctrl-p": "workspace::ActivatePreviousPane",
190      "ctrl-w shift-w": "workspace::ActivatePreviousPane",
191      "ctrl-w ctrl-shift-w": "workspace::ActivatePreviousPane",
192      "ctrl-w v": "pane::SplitVertical",
193      "ctrl-w ctrl-v": "pane::SplitVertical",
194      "ctrl-w s": "pane::SplitHorizontal",
195      "ctrl-w shift-s": "pane::SplitHorizontal",
196      "ctrl-w ctrl-s": "pane::SplitHorizontal",
197      "ctrl-w c": "pane::CloseAllItems",
198      "ctrl-w ctrl-c": "pane::CloseAllItems",
199      "ctrl-w q": "pane::CloseAllItems",
200      "ctrl-w ctrl-q": "pane::CloseAllItems",
201      "ctrl-w o": "workspace::CloseInactiveTabsAndPanes",
202      "ctrl-w ctrl-o": "workspace::CloseInactiveTabsAndPanes",
203      "ctrl-w n": "workspace::NewFileSplitHorizontal",
204      "ctrl-w ctrl-n": "workspace::NewFileSplitHorizontal",
205      "ctrl-w d": "editor::GoToDefinitionSplit",
206      "ctrl-w g d": "editor::GoToDefinitionSplit",
207      "ctrl-w shift-d": "editor::GoToTypeDefinitionSplit",
208      "ctrl-w g shift-d": "editor::GoToTypeDefinitionSplit",
209      "ctrl-w space": "editor::OpenExcerptsSplit",
210      "ctrl-w g space": "editor::OpenExcerptsSplit",
211      "ctrl-6": "pane::AlternateFile"
212    }
213  },
214  {
215    "context": "vim_mode == normal",
216    "bindings": {
217      "escape": "editor::Cancel",
218      "ctrl-[": "editor::Cancel",
219      ":": "command_palette::Toggle",
220      ".": "vim::Repeat",
221      "c": ["vim::PushOperator", "Change"],
222      "shift-c": "vim::ChangeToEndOfLine",
223      "d": ["vim::PushOperator", "Delete"],
224      "shift-d": "vim::DeleteToEndOfLine",
225      "shift-j": "vim::JoinLines",
226      "y": ["vim::PushOperator", "Yank"],
227      "shift-y": "vim::YankLine",
228      "i": "vim::InsertBefore",
229      "shift-i": "vim::InsertFirstNonWhitespace",
230      "a": "vim::InsertAfter",
231      "shift-a": "vim::InsertEndOfLine",
232      "x": "vim::DeleteRight",
233      "shift-x": "vim::DeleteLeft",
234      "o": "vim::InsertLineBelow",
235      "shift-o": "vim::InsertLineAbove",
236      "~": "vim::ChangeCase",
237      "ctrl-a": "vim::Increment",
238      "ctrl-x": "vim::Decrement",
239      "p": "vim::Paste",
240      "shift-p": ["vim::Paste", { "before": true }],
241      "u": "vim::Undo",
242      "ctrl-r": "vim::Redo",
243      "r": ["vim::PushOperator", "Replace"],
244      "s": "vim::Substitute",
245      "shift-s": "vim::SubstituteLine",
246      ">": ["vim::PushOperator", "Indent"],
247      "<": ["vim::PushOperator", "Outdent"],
248      "g u": ["vim::PushOperator", "Lowercase"],
249      "g shift-u": ["vim::PushOperator", "Uppercase"],
250      "g ~": ["vim::PushOperator", "OppositeCase"],
251      "\"": ["vim::PushOperator", "Register"],
252      "g q": ["vim::PushOperator", "Rewrap"],
253      "g w": ["vim::PushOperator", "Rewrap"],
254      "q": "vim::ToggleRecord",
255      "shift-q": "vim::ReplayLastRecording",
256      "@": ["vim::PushOperator", "ReplayRegister"],
257      "ctrl-pagedown": "pane::ActivateNextItem",
258      "ctrl-pageup": "pane::ActivatePrevItem",
259      "insert": "vim::InsertBefore",
260      // tree-sitter related commands
261      "[ x": "editor::SelectLargerSyntaxNode",
262      "] x": "editor::SelectSmallerSyntaxNode",
263      "] d": "editor::GoToDiagnostic",
264      "[ d": "editor::GoToPrevDiagnostic",
265      "] c": "editor::GoToHunk",
266      "[ c": "editor::GoToPrevHunk",
267      "g c": ["vim::PushOperator", "ToggleComments"]
268    }
269  },
270  {
271    "context": "VimControl && VimCount",
272    "bindings": {
273      "0": ["vim::Number", 0],
274      ":": "vim::CountCommand"
275    }
276  },
277  {
278    "context": "vim_mode == visual",
279    "bindings": {
280      ":": "vim::VisualCommand",
281      "u": "vim::ConvertToLowerCase",
282      "U": "vim::ConvertToUpperCase",
283      "o": "vim::OtherEnd",
284      "shift-o": "vim::OtherEnd",
285      "d": "vim::VisualDelete",
286      "x": "vim::VisualDelete",
287      "shift-d": "vim::VisualDeleteLine",
288      "shift-x": "vim::VisualDeleteLine",
289      "y": "vim::VisualYank",
290      "shift-y": "vim::VisualYank",
291      "p": "vim::Paste",
292      "shift-p": ["vim::Paste", { "preserveClipboard": true }],
293      "s": "vim::Substitute",
294      "shift-s": "vim::SubstituteLine",
295      "shift-r": "vim::SubstituteLine",
296      "c": "vim::Substitute",
297      "~": "vim::ChangeCase",
298      "*": ["vim::MoveToNext", { "partialWord": true }],
299      "#": ["vim::MoveToPrev", { "partialWord": true }],
300      "ctrl-a": "vim::Increment",
301      "ctrl-x": "vim::Decrement",
302      "g ctrl-a": ["vim::Increment", { "step": true }],
303      "g ctrl-x": ["vim::Decrement", { "step": true }],
304      "shift-i": "vim::InsertBefore",
305      "shift-a": "vim::InsertAfter",
306      "g I": "vim::VisualInsertFirstNonWhiteSpace",
307      "g A": "vim::VisualInsertEndOfLine",
308      "shift-j": "vim::JoinLines",
309      "r": ["vim::PushOperator", "Replace"],
310      "ctrl-c": ["vim::SwitchMode", "Normal"],
311      "escape": ["vim::SwitchMode", "Normal"],
312      "ctrl-[": ["vim::SwitchMode", "Normal"],
313      ">": "vim::Indent",
314      "<": "vim::Outdent",
315      "i": ["vim::PushOperator", { "Object": { "around": false } }],
316      "a": ["vim::PushOperator", { "Object": { "around": true } }],
317      "g c": "vim::ToggleComments",
318      "g q": "vim::Rewrap",
319      "\"": ["vim::PushOperator", "Register"],
320      // tree-sitter related commands
321      "[ x": "editor::SelectLargerSyntaxNode",
322      "] x": "editor::SelectSmallerSyntaxNode"
323    }
324  },
325  {
326    "context": "vim_mode == insert",
327    "bindings": {
328      "escape": "vim::NormalBefore",
329      "ctrl-c": "vim::NormalBefore",
330      "ctrl-[": "vim::NormalBefore",
331      "ctrl-x": null,
332      "ctrl-x ctrl-o": "editor::ShowCompletions",
333      "ctrl-x ctrl-a": "assistant::InlineAssist", // zed specific
334      "ctrl-x ctrl-c": "editor::ShowInlineCompletion", // zed specific
335      "ctrl-x ctrl-l": "editor::ToggleCodeActions", // zed specific
336      "ctrl-x ctrl-z": "editor::Cancel",
337      "ctrl-w": "editor::DeleteToPreviousWordStart",
338      "ctrl-u": "editor::DeleteToBeginningOfLine",
339      "ctrl-t": "vim::Indent",
340      "ctrl-d": "vim::Outdent",
341      "ctrl-k": ["vim::PushOperator", { "Digraph": {} }],
342      "ctrl-r": ["vim::PushOperator", "Register"],
343      "insert": "vim::ToggleReplace"
344    }
345  },
346  {
347    "context": "vim_mode == insert && !(showing_code_actions || showing_completions)",
348    "bindings": {
349      "ctrl-p": "editor::ShowCompletions",
350      "ctrl-n": "editor::ShowCompletions"
351    }
352  },
353  {
354    "context": "vim_mode == replace",
355    "bindings": {
356      "escape": "vim::NormalBefore",
357      "ctrl-c": "vim::NormalBefore",
358      "ctrl-[": "vim::NormalBefore",
359      "ctrl-k": ["vim::PushOperator", { "Digraph": {} }],
360      "backspace": "vim::UndoReplace",
361      "tab": "vim::Tab",
362      "enter": "vim::Enter",
363      "insert": "vim::InsertBefore"
364    }
365  },
366  {
367    "context": "vim_mode == waiting",
368    "bindings": {
369      "tab": "vim::Tab",
370      "enter": "vim::Enter",
371      "escape": "vim::ClearOperators",
372      "ctrl-c": "vim::ClearOperators",
373      "ctrl-[": "vim::ClearOperators",
374      "ctrl-k": ["vim::PushOperator", { "Digraph": {} }]
375    }
376  },
377  {
378    "context": "vim_mode == operator",
379    "bindings": {
380      "escape": "vim::ClearOperators",
381      "ctrl-c": "vim::ClearOperators",
382      "ctrl-[": "vim::ClearOperators"
383    }
384  },
385  {
386    "context": "vim_operator == a || vim_operator == i || vim_operator == cs",
387    "bindings": {
388      "w": "vim::Word",
389      "shift-w": ["vim::Word", { "ignorePunctuation": true }],
390      "t": "vim::Tag",
391      "s": "vim::Sentence",
392      "p": "vim::Paragraph",
393      "'": "vim::Quotes",
394      "`": "vim::BackQuotes",
395      "\"": "vim::DoubleQuotes",
396      "|": "vim::VerticalBars",
397      "(": "vim::Parentheses",
398      ")": "vim::Parentheses",
399      "b": "vim::Parentheses",
400      "[": "vim::SquareBrackets",
401      "]": "vim::SquareBrackets",
402      "{": "vim::CurlyBrackets",
403      "}": "vim::CurlyBrackets",
404      "shift-b": "vim::CurlyBrackets",
405      "<": "vim::AngleBrackets",
406      ">": "vim::AngleBrackets",
407      "a": "vim::Argument"
408    }
409  },
410  {
411    "context": "vim_operator == c",
412    "bindings": {
413      "c": "vim::CurrentLine",
414      "d": "editor::Rename", // zed specific
415      "s": ["vim::PushOperator", { "ChangeSurrounds": {} }]
416    }
417  },
418  {
419    "context": "vim_operator == d",
420    "bindings": {
421      "d": "vim::CurrentLine",
422      "s": ["vim::PushOperator", "DeleteSurrounds"],
423      "o": "editor::ToggleHunkDiff", // "d o"
424      "p": "editor::RevertSelectedHunks" // "d p"
425    }
426  },
427  {
428    "context": "vim_operator == gu",
429    "bindings": {
430      "g u": "vim::CurrentLine",
431      "u": "vim::CurrentLine"
432    }
433  },
434  {
435    "context": "vim_operator == gU",
436    "bindings": {
437      "g shift-u": "vim::CurrentLine",
438      "shift-u": "vim::CurrentLine"
439    }
440  },
441  {
442    "context": "vim_operator == g~",
443    "bindings": {
444      "g ~": "vim::CurrentLine",
445      "~": "vim::CurrentLine"
446    }
447  },
448  {
449    "context": "vim_operator == gq",
450    "bindings": {
451      "g q": "vim::CurrentLine",
452      "q": "vim::CurrentLine",
453      "g w": "vim::CurrentLine",
454      "w": "vim::CurrentLine"
455    }
456  },
457  {
458    "context": "vim_operator == y",
459    "bindings": {
460      "y": "vim::CurrentLine",
461      "s": ["vim::PushOperator", { "AddSurrounds": {} }]
462    }
463  },
464  {
465    "context": "vim_operator == ys",
466    "bindings": {
467      "s": "vim::CurrentLine"
468    }
469  },
470  {
471    "context": "vim_operator == >",
472    "bindings": {
473      ">": "vim::CurrentLine"
474    }
475  },
476  {
477    "context": "vim_operator == <",
478    "bindings": {
479      "<": "vim::CurrentLine"
480    }
481  },
482  {
483    "context": "vim_operator == gc",
484    "bindings": {
485      "c": "vim::CurrentLine"
486    }
487  },
488  {
489    "context": "BufferSearchBar && !in_replace",
490    "bindings": {
491      "enter": "vim::SearchSubmit",
492      "escape": "buffer_search::Dismiss"
493    }
494  },
495  {
496    "context": "EmptyPane || SharedScreen",
497    "bindings": {
498      ":": "command_palette::Toggle",
499      "g /": "pane::DeploySearch"
500    }
501  },
502  {
503    // netrw compatibility
504    "context": "ProjectPanel && not_editing",
505    "bindings": {
506      ":": "command_palette::Toggle",
507      "%": "project_panel::NewFile",
508      "/": "project_panel::NewSearchInDirectory",
509      "d": "project_panel::NewDirectory",
510      "enter": "project_panel::OpenPermanent",
511      "escape": "project_panel::ToggleFocus",
512      "h": "project_panel::CollapseSelectedEntry",
513      "j": "menu::SelectNext",
514      "k": "menu::SelectPrev",
515      "l": "project_panel::ExpandSelectedEntry",
516      "o": "project_panel::OpenPermanent",
517      "shift-d": "project_panel::Delete",
518      "shift-r": "project_panel::Rename",
519      "t": "project_panel::OpenPermanent",
520      "v": "project_panel::OpenPermanent",
521      "p": "project_panel::Open",
522      "x": "project_panel::RevealInFileManager",
523      "s": "project_panel::OpenWithSystem",
524      "shift-g": "menu::SelectLast",
525      "g g": "menu::SelectFirst",
526      "-": "project_panel::SelectParent",
527      "ctrl-6": "pane::AlternateFile"
528    }
529  },
530  {
531    "context": "OutlinePanel && not_editing",
532    "bindings": {
533      "j": "menu::SelectNext",
534      "k": "menu::SelectPrev",
535      "shift-g": "menu::SelectLast",
536      "g g": "menu::SelectFirst"
537    }
538  }
539]