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