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