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