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