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