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