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