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