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