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