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