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      "|": "vim::GoToColumn",
 43      "shift-w": [
 44        "vim::NextWordStart",
 45        {
 46          "ignorePunctuation": true
 47        }
 48      ],
 49      "e": "vim::NextWordEnd",
 50      "shift-e": [
 51        "vim::NextWordEnd",
 52        {
 53          "ignorePunctuation": true
 54        }
 55      ],
 56      "b": "vim::PreviousWordStart",
 57      "shift-b": [
 58        "vim::PreviousWordStart",
 59        {
 60          "ignorePunctuation": true
 61        }
 62      ],
 63      "n": "search::SelectNextMatch",
 64      "shift-n": "search::SelectPrevMatch",
 65      "%": "vim::Matching",
 66      "f": [
 67        "vim::PushOperator",
 68        {
 69          "FindForward": {
 70            "before": false
 71          }
 72        }
 73      ],
 74      "t": [
 75        "vim::PushOperator",
 76        {
 77          "FindForward": {
 78            "before": true
 79          }
 80        }
 81      ],
 82      "shift-f": [
 83        "vim::PushOperator",
 84        {
 85          "FindBackward": {
 86            "after": false
 87          }
 88        }
 89      ],
 90      "shift-t": [
 91        "vim::PushOperator",
 92        {
 93          "FindBackward": {
 94            "after": true
 95          }
 96        }
 97      ],
 98      "ctrl-o": "pane::GoBack",
 99      "ctrl-i": "pane::GoForward",
100      "ctrl-]": "editor::GoToDefinition",
101      "escape": ["vim::SwitchMode", "Normal"],
102      "ctrl+[": ["vim::SwitchMode", "Normal"],
103      "v": "vim::ToggleVisual",
104      "shift-v": "vim::ToggleVisualLine",
105      "ctrl-v": "vim::ToggleVisualBlock",
106      "ctrl-q": "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 n": "vim::SelectNext",
126      "g shift-n": "vim::SelectPrevious",
127      "g >": [
128        "editor::SelectNext",
129        {
130          "replace_newest": true
131        }
132      ],
133      "g <": [
134        "editor::SelectPrevious",
135        {
136          "replace_newest": true
137        }
138      ],
139      "g a": "editor::SelectAllMatches",
140      "g s": "outline::Toggle",
141      "g shift-s": "project_symbols::Toggle",
142      "g .": "editor::ToggleCodeActions", // zed specific
143      "g shift-a": "editor::FindAllReferences", // zed specific
144      "g space": "editor::OpenExcerpts", // zed specific
145      "g *": [
146        "vim::MoveToNext",
147        {
148          "partialWord": true
149        }
150      ],
151      "g #": [
152        "vim::MoveToPrev",
153        {
154          "partialWord": true
155        }
156      ],
157      "g j": [
158        "vim::Down",
159        {
160          "displayLines": true
161        }
162      ],
163      "g down": [
164        "vim::Down",
165        {
166          "displayLines": true
167        }
168      ],
169      "g k": [
170        "vim::Up",
171        {
172          "displayLines": true
173        }
174      ],
175      "g up": [
176        "vim::Up",
177        {
178          "displayLines": true
179        }
180      ],
181      "g $": [
182        "vim::EndOfLine",
183        {
184          "displayLines": true
185        }
186      ],
187      "g end": [
188        "vim::EndOfLine",
189        {
190          "displayLines": true
191        }
192      ],
193      "g 0": [
194        "vim::StartOfLine",
195        {
196          "displayLines": true
197        }
198      ],
199      "g home": [
200        "vim::StartOfLine",
201        {
202          "displayLines": true
203        }
204      ],
205      "g ^": [
206        "vim::FirstNonWhitespace",
207        {
208          "displayLines": true
209        }
210      ],
211      // z commands
212      "z t": "editor::ScrollCursorTop",
213      "z z": "editor::ScrollCursorCenter",
214      "z b": "editor::ScrollCursorBottom",
215      "z c": "editor::Fold",
216      "z o": "editor::UnfoldLines",
217      "z f": "editor::FoldSelectedRanges",
218      "shift-z shift-q": [
219        "pane::CloseActiveItem",
220        {
221          "saveIntent": "skip"
222        }
223      ],
224      "shift-z shift-z": [
225        "pane::CloseActiveItem",
226        {
227          "saveIntent": "saveAll"
228        }
229      ],
230      // Count support
231      "1": ["vim::Number", 1],
232      "2": ["vim::Number", 2],
233      "3": ["vim::Number", 3],
234      "4": ["vim::Number", 4],
235      "5": ["vim::Number", 5],
236      "6": ["vim::Number", 6],
237      "7": ["vim::Number", 7],
238      "8": ["vim::Number", 8],
239      "9": ["vim::Number", 9],
240      // window related commands (ctrl-w X)
241      "ctrl-w left": ["workspace::ActivatePaneInDirection", "Left"],
242      "ctrl-w right": ["workspace::ActivatePaneInDirection", "Right"],
243      "ctrl-w up": ["workspace::ActivatePaneInDirection", "Up"],
244      "ctrl-w down": ["workspace::ActivatePaneInDirection", "Down"],
245      "ctrl-w h": ["workspace::ActivatePaneInDirection", "Left"],
246      "ctrl-w l": ["workspace::ActivatePaneInDirection", "Right"],
247      "ctrl-w k": ["workspace::ActivatePaneInDirection", "Up"],
248      "ctrl-w j": ["workspace::ActivatePaneInDirection", "Down"],
249      "ctrl-w ctrl-h": ["workspace::ActivatePaneInDirection", "Left"],
250      "ctrl-w ctrl-l": ["workspace::ActivatePaneInDirection", "Right"],
251      "ctrl-w ctrl-k": ["workspace::ActivatePaneInDirection", "Up"],
252      "ctrl-w ctrl-j": ["workspace::ActivatePaneInDirection", "Down"],
253      "ctrl-w shift-left": ["workspace::SwapPaneInDirection", "Left"],
254      "ctrl-w shift-right": ["workspace::SwapPaneInDirection", "Right"],
255      "ctrl-w shift-up": ["workspace::SwapPaneInDirection", "Up"],
256      "ctrl-w shift-down": ["workspace::SwapPaneInDirection", "Down"],
257      "ctrl-w shift-h": ["workspace::SwapPaneInDirection", "Left"],
258      "ctrl-w shift-l": ["workspace::SwapPaneInDirection", "Right"],
259      "ctrl-w shift-k": ["workspace::SwapPaneInDirection", "Up"],
260      "ctrl-w shift-j": ["workspace::SwapPaneInDirection", "Down"],
261      "ctrl-w g t": "pane::ActivateNextItem",
262      "ctrl-w ctrl-g t": "pane::ActivateNextItem",
263      "ctrl-w g shift-t": "pane::ActivatePrevItem",
264      "ctrl-w ctrl-g shift-t": "pane::ActivatePrevItem",
265      "ctrl-w w": "workspace::ActivateNextPane",
266      "ctrl-w ctrl-w": "workspace::ActivateNextPane",
267      "ctrl-w p": "workspace::ActivatePreviousPane",
268      "ctrl-w ctrl-p": "workspace::ActivatePreviousPane",
269      "ctrl-w shift-w": "workspace::ActivatePreviousPane",
270      "ctrl-w ctrl-shift-w": "workspace::ActivatePreviousPane",
271      "ctrl-w v": "pane::SplitLeft",
272      "ctrl-w ctrl-v": "pane::SplitLeft",
273      "ctrl-w s": "pane::SplitUp",
274      "ctrl-w shift-s": "pane::SplitUp",
275      "ctrl-w ctrl-s": "pane::SplitUp",
276      "ctrl-w c": "pane::CloseAllItems",
277      "ctrl-w ctrl-c": "pane::CloseAllItems",
278      "ctrl-w q": "pane::CloseAllItems",
279      "ctrl-w ctrl-q": "pane::CloseAllItems",
280      "ctrl-w o": "workspace::CloseInactiveTabsAndPanes",
281      "ctrl-w ctrl-o": "workspace::CloseInactiveTabsAndPanes",
282      "ctrl-w n": ["workspace::NewFileInDirection", "Up"],
283      "ctrl-w ctrl-n": ["workspace::NewFileInDirection", "Up"]
284    }
285  },
286  {
287    // escape is in its own section so that it cancels a pending count.
288    "context": "Editor && vim_mode == normal && vim_operator == none && !VimWaiting",
289    "bindings": {
290      "escape": "editor::Cancel",
291      "ctrl+[": "editor::Cancel"
292    }
293  },
294  {
295    "context": "Editor && vim_mode == normal && vim_operator == none && !VimWaiting",
296    "bindings": {
297      ".": "vim::Repeat",
298      "c": ["vim::PushOperator", "Change"],
299      "shift-c": "vim::ChangeToEndOfLine",
300      "d": ["vim::PushOperator", "Delete"],
301      "shift-d": "vim::DeleteToEndOfLine",
302      "shift-j": "vim::JoinLines",
303      "y": ["vim::PushOperator", "Yank"],
304      "shift-y": "vim::YankLine",
305      "i": "vim::InsertBefore",
306      "shift-i": "vim::InsertFirstNonWhitespace",
307      "a": "vim::InsertAfter",
308      "shift-a": "vim::InsertEndOfLine",
309      "x": "vim::DeleteRight",
310      "shift-x": "vim::DeleteLeft",
311      "o": "vim::InsertLineBelow",
312      "shift-o": "vim::InsertLineAbove",
313      "~": "vim::ChangeCase",
314      "ctrl-a": "vim::Increment",
315      "ctrl-x": "vim::Decrement",
316      "p": "vim::Paste",
317      "shift-p": [
318        "vim::Paste",
319        {
320          "before": true
321        }
322      ],
323      "u": "editor::Undo",
324      "ctrl-r": "editor::Redo",
325      "/": "vim::Search",
326      "?": [
327        "vim::Search",
328        {
329          "backwards": true
330        }
331      ],
332      ";": "vim::RepeatFind",
333      ",": [
334        "vim::RepeatFind",
335        {
336          "backwards": true
337        }
338      ],
339      "r": ["vim::PushOperator", "Replace"],
340      "s": "vim::Substitute",
341      "shift-s": "vim::SubstituteLine",
342      "> >": "editor::Indent",
343      "< <": "editor::Outdent",
344      "ctrl-pagedown": "pane::ActivateNextItem",
345      "ctrl-pageup": "pane::ActivatePrevItem"
346    }
347  },
348  {
349    "context": "Editor && VimCount",
350    "bindings": {
351      "0": ["vim::Number", 0]
352    }
353  },
354  {
355    "context": "Editor && vim_operator == c",
356    "bindings": {
357      "c": "vim::CurrentLine",
358      "d": "editor::Rename" // zed specific
359    }
360  },
361  {
362    "context": "Editor && vim_operator == d",
363    "bindings": {
364      "d": "vim::CurrentLine"
365    }
366  },
367  {
368    "context": "Editor && vim_operator == y",
369    "bindings": {
370      "y": "vim::CurrentLine"
371    }
372  },
373  {
374    "context": "Editor && VimObject",
375    "bindings": {
376      "w": "vim::Word",
377      "shift-w": [
378        "vim::Word",
379        {
380          "ignorePunctuation": true
381        }
382      ],
383      "s": "vim::Sentence",
384      "'": "vim::Quotes",
385      "`": "vim::BackQuotes",
386      "\"": "vim::DoubleQuotes",
387      "|": "vim::VerticalBars",
388      "(": "vim::Parentheses",
389      ")": "vim::Parentheses",
390      "b": "vim::Parentheses",
391      "[": "vim::SquareBrackets",
392      "]": "vim::SquareBrackets",
393      "{": "vim::CurlyBrackets",
394      "}": "vim::CurlyBrackets",
395      "shift-b": "vim::CurlyBrackets",
396      "<": "vim::AngleBrackets",
397      ">": "vim::AngleBrackets"
398    }
399  },
400  {
401    "context": "Editor && vim_mode == visual && !VimWaiting && !VimObject",
402    "bindings": {
403      "u": "editor::Undo",
404      "o": "vim::OtherEnd",
405      "shift-o": "vim::OtherEnd",
406      "d": "vim::VisualDelete",
407      "x": "vim::VisualDelete",
408      "shift-d": "vim::VisualDelete",
409      "shift-x": "vim::VisualDelete",
410      "y": "vim::VisualYank",
411      "shift-y": "vim::VisualYank",
412      "p": "vim::Paste",
413      "shift-p": [
414        "vim::Paste",
415        {
416          "preserveClipboard": true
417        }
418      ],
419      "s": "vim::Substitute",
420      "shift-s": "vim::SubstituteLine",
421      "shift-r": "vim::SubstituteLine",
422      "c": "vim::Substitute",
423      "~": "vim::ChangeCase",
424      "ctrl-a": "vim::Increment",
425      "ctrl-x": "vim::Decrement",
426      "g ctrl-a": [
427        "vim::Increment",
428        {
429          "step": true
430        }
431      ],
432      "g ctrl-x": [
433        "vim::Decrement",
434        {
435          "step": true
436        }
437      ],
438      "shift-i": "vim::InsertBefore",
439      "shift-a": "vim::InsertAfter",
440      "shift-j": "vim::JoinLines",
441      "r": ["vim::PushOperator", "Replace"],
442      "ctrl-c": ["vim::SwitchMode", "Normal"],
443      "escape": ["vim::SwitchMode", "Normal"],
444      "ctrl+[": ["vim::SwitchMode", "Normal"],
445      ">": "editor::Indent",
446      "<": "editor::Outdent",
447      "i": [
448        "vim::PushOperator",
449        {
450          "Object": {
451            "around": false
452          }
453        }
454      ],
455      "a": [
456        "vim::PushOperator",
457        {
458          "Object": {
459            "around": true
460          }
461        }
462      ]
463    }
464  },
465  {
466    "context": "Editor && vim_mode == insert",
467    "bindings": {
468      "escape": "vim::NormalBefore",
469      "ctrl-c": "vim::NormalBefore",
470      "ctrl-[": "vim::NormalBefore",
471      "ctrl-x ctrl-o": "editor::ShowCompletions",
472      "ctrl-x ctrl-a": "assistant::InlineAssist", // zed specific
473      "ctrl-x ctrl-c": "copilot::Suggest", // zed specific
474      "ctrl-x ctrl-l": "editor::ToggleCodeActions", // zed specific
475      "ctrl-x ctrl-z": "editor::Cancel"
476    }
477  },
478  {
479    "context": "Editor && VimWaiting",
480    "bindings": {
481      "tab": "vim::Tab",
482      "enter": "vim::Enter",
483      "escape": ["vim::SwitchMode", "Normal"],
484      "ctrl+[": ["vim::SwitchMode", "Normal"]
485    }
486  },
487  {
488    "context": "BufferSearchBar && !in_replace > VimEnabled",
489    "bindings": {
490      "enter": "vim::SearchSubmit",
491      "escape": "buffer_search::Dismiss"
492    }
493  }
494]