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