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