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