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