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