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