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