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