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