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