vim.json

   1[
   2  {
   3    "context": "VimControl && !menu",
   4    "bindings": {
   5      "i": [
   6        "vim::PushObject",
   7        {
   8          "around": false
   9        }
  10      ],
  11      "a": [
  12        "vim::PushObject",
  13        {
  14          "around": true
  15        }
  16      ],
  17      "left": "vim::Left",
  18      "h": "vim::Left",
  19      "backspace": "vim::Backspace",
  20      "down": "vim::Down",
  21      "ctrl-j": "vim::Down",
  22      "j": "vim::Down",
  23      "ctrl-m": "vim::NextLineStart",
  24      "+": "vim::NextLineStart",
  25      "enter": "vim::NextLineStart",
  26      "-": "vim::PreviousLineStart",
  27      "shift-tab": "vim::Tab",
  28      "tab": "vim::Tab",
  29      "up": "vim::Up",
  30      "k": "vim::Up",
  31      "right": "vim::Right",
  32      "l": "vim::Right",
  33      "space": "vim::Space",
  34      "end": "vim::EndOfLine",
  35      "$": "vim::EndOfLine",
  36      "^": "vim::FirstNonWhitespace",
  37      "_": "vim::StartOfLineDownward",
  38      "g _": "vim::EndOfLineDownward",
  39      "shift-g": "vim::EndOfDocument",
  40      "{": "vim::StartOfParagraph",
  41      "}": "vim::EndOfParagraph",
  42      "(": "vim::SentenceBackward",
  43      ")": "vim::SentenceForward",
  44      "|": "vim::GoToColumn",
  45      "] ]": "vim::NextSectionStart",
  46      "] [": "vim::NextSectionEnd",
  47      "[ [": "vim::PreviousSectionStart",
  48      "[ ]": "vim::PreviousSectionEnd",
  49      "] m": "vim::NextMethodStart",
  50      "] shift-m": "vim::NextMethodEnd",
  51      "[ m": "vim::PreviousMethodStart",
  52      "[ shift-m": "vim::PreviousMethodEnd",
  53      "[ *": "vim::PreviousComment",
  54      "[ /": "vim::PreviousComment",
  55      "] *": "vim::NextComment",
  56      "] /": "vim::NextComment",
  57      // Word motions
  58      "w": "vim::NextWordStart",
  59      "e": "vim::NextWordEnd",
  60      "b": "vim::PreviousWordStart",
  61      "g e": "vim::PreviousWordEnd",
  62      // Subword motions
  63      // "w": "vim::NextSubwordStart",
  64      // "b": "vim::PreviousSubwordStart",
  65      // "e": "vim::NextSubwordEnd",
  66      // "g e": "vim::PreviousSubwordEnd",
  67      "shift-w": [
  68        "vim::NextWordStart",
  69        {
  70          "ignore_punctuation": true
  71        }
  72      ],
  73      "shift-e": [
  74        "vim::NextWordEnd",
  75        {
  76          "ignore_punctuation": true
  77        }
  78      ],
  79      "shift-b": [
  80        "vim::PreviousWordStart",
  81        {
  82          "ignore_punctuation": true
  83        }
  84      ],
  85      "g shift-e": [
  86        "vim::PreviousWordEnd",
  87        {
  88          "ignore_punctuation": true
  89        }
  90      ],
  91      "/": "vim::Search",
  92      "g /": "pane::DeploySearch",
  93      "?": [
  94        "vim::Search",
  95        {
  96          "backwards": true
  97        }
  98      ],
  99      "*": "vim::MoveToNext",
 100      "#": "vim::MoveToPrevious",
 101      "n": "vim::MoveToNextMatch",
 102      "shift-n": "vim::MoveToPreviousMatch",
 103      "%": "vim::Matching",
 104      "] }": [
 105        "vim::UnmatchedForward",
 106        {
 107          "char": "}"
 108        }
 109      ],
 110      "[ {": [
 111        "vim::UnmatchedBackward",
 112        {
 113          "char": "{"
 114        }
 115      ],
 116      "] )": [
 117        "vim::UnmatchedForward",
 118        {
 119          "char": ")"
 120        }
 121      ],
 122      "[ (": [
 123        "vim::UnmatchedBackward",
 124        {
 125          "char": "("
 126        }
 127      ],
 128      "f": [
 129        "vim::PushFindForward",
 130        {
 131          "before": false
 132        }
 133      ],
 134      "t": [
 135        "vim::PushFindForward",
 136        {
 137          "before": true
 138        }
 139      ],
 140      "shift-f": [
 141        "vim::PushFindBackward",
 142        {
 143          "after": false
 144        }
 145      ],
 146      "shift-t": [
 147        "vim::PushFindBackward",
 148        {
 149          "after": true
 150        }
 151      ],
 152      "m": "vim::PushMark",
 153      "'": [
 154        "vim::PushJump",
 155        {
 156          "line": true
 157        }
 158      ],
 159      "`": [
 160        "vim::PushJump",
 161        {
 162          "line": false
 163        }
 164      ],
 165      ";": "vim::RepeatFind",
 166      ",": "vim::RepeatFindReversed",
 167      "ctrl-o": "pane::GoBack",
 168      "ctrl-i": "pane::GoForward",
 169      "ctrl-]": "editor::GoToDefinition",
 170      "escape": "vim::SwitchToNormalMode",
 171      "ctrl-[": "vim::SwitchToNormalMode",
 172      "v": "vim::ToggleVisual",
 173      "shift-v": "vim::ToggleVisualLine",
 174      "ctrl-g": "vim::ShowLocation",
 175      "ctrl-v": "vim::ToggleVisualBlock",
 176      "ctrl-q": "vim::ToggleVisualBlock",
 177      "shift-k": "editor::Hover",
 178      "shift-r": "vim::ToggleReplace",
 179      "0": "vim::StartOfLine",
 180      "home": "vim::StartOfLine",
 181      "ctrl-f": "vim::PageDown",
 182      "pagedown": "vim::PageDown",
 183      "ctrl-b": "vim::PageUp",
 184      "pageup": "vim::PageUp",
 185      "ctrl-d": "vim::ScrollDown",
 186      "ctrl-u": "vim::ScrollUp",
 187      "ctrl-e": "vim::LineDown",
 188      "ctrl-y": "vim::LineUp",
 189      // "g" commands
 190      "g r": "vim::PushReplaceWithRegister",
 191      "g g": "vim::StartOfDocument",
 192      "g h": "editor::Hover",
 193      "g t": "pane::ActivateNextItem",
 194      "g shift-t": "pane::ActivatePreviousItem",
 195      "g d": "editor::GoToDefinition",
 196      "g shift-d": "editor::GoToDeclaration",
 197      "g y": "editor::GoToTypeDefinition",
 198      "g shift-i": "editor::GoToImplementation",
 199      "g x": "editor::OpenUrl",
 200      "g f": "editor::OpenSelectedFilename",
 201      "g n": "vim::SelectNextMatch",
 202      "g shift-n": "vim::SelectPreviousMatch",
 203      "g l": "vim::SelectNext",
 204      "g shift-l": "vim::SelectPrevious",
 205      "g >": [
 206        "editor::SelectNext",
 207        {
 208          "replace_newest": true
 209        }
 210      ],
 211      "g <": [
 212        "editor::SelectPrevious",
 213        {
 214          "replace_newest": true
 215        }
 216      ],
 217      "g a": "editor::SelectAllMatches",
 218      "g s": "outline::Toggle",
 219      "g shift-s": "project_symbols::Toggle",
 220      "g .": "editor::ToggleCodeActions", // zed specific
 221      "g shift-a": "editor::FindAllReferences", // zed specific
 222      "g space": "editor::OpenExcerpts", // zed specific
 223      "g *": [
 224        "vim::MoveToNext",
 225        {
 226          "partial_word": true
 227        }
 228      ],
 229      "g #": [
 230        "vim::MoveToPrevious",
 231        {
 232          "partial_word": true
 233        }
 234      ],
 235      "g j": [
 236        "vim::Down",
 237        {
 238          "display_lines": true
 239        }
 240      ],
 241      "g down": [
 242        "vim::Down",
 243        {
 244          "display_lines": true
 245        }
 246      ],
 247      "g k": [
 248        "vim::Up",
 249        {
 250          "display_lines": true
 251        }
 252      ],
 253      "g up": [
 254        "vim::Up",
 255        {
 256          "display_lines": true
 257        }
 258      ],
 259      "g $": [
 260        "vim::EndOfLine",
 261        {
 262          "display_lines": true
 263        }
 264      ],
 265      "g end": [
 266        "vim::EndOfLine",
 267        {
 268          "display_lines": true
 269        }
 270      ],
 271      "g 0": [
 272        "vim::StartOfLine",
 273        {
 274          "display_lines": true
 275        }
 276      ],
 277      "g home": [
 278        "vim::StartOfLine",
 279        {
 280          "display_lines": true
 281        }
 282      ],
 283      "g ^": [
 284        "vim::FirstNonWhitespace",
 285        {
 286          "display_lines": true
 287        }
 288      ],
 289      "g v": "vim::RestoreVisualSelection",
 290      "g ]": "editor::GoToDiagnostic",
 291      "g [": "editor::GoToPreviousDiagnostic",
 292      "g i": "vim::InsertAtPrevious",
 293      "g ,": "vim::ChangeListNewer",
 294      "g ;": "vim::ChangeListOlder",
 295      "shift-h": "vim::WindowTop",
 296      "shift-m": "vim::WindowMiddle",
 297      "shift-l": "vim::WindowBottom",
 298      "q": "vim::ToggleRecord",
 299      "shift-q": "vim::ReplayLastRecording",
 300      "@": "vim::PushReplayRegister",
 301      // z commands
 302      "z enter": [
 303        "workspace::SendKeystrokes",
 304        "z t ^"
 305      ],
 306      "z -": [
 307        "workspace::SendKeystrokes",
 308        "z b ^"
 309      ],
 310      "z ^": [
 311        "workspace::SendKeystrokes",
 312        "shift-h k z b ^"
 313      ],
 314      "z +": [
 315        "workspace::SendKeystrokes",
 316        "shift-l j z t ^"
 317      ],
 318      "z t": "editor::ScrollCursorTop",
 319      "z z": "editor::ScrollCursorCenter",
 320      "z .": [
 321        "workspace::SendKeystrokes",
 322        "z z ^"
 323      ],
 324      "z b": "editor::ScrollCursorBottom",
 325      "z a": "editor::ToggleFold",
 326      "z shift-a": "editor::ToggleFoldRecursive",
 327      "z c": "editor::Fold",
 328      "z shift-c": "editor::FoldRecursive",
 329      "z o": "editor::UnfoldLines",
 330      "z shift-o": "editor::UnfoldRecursive",
 331      "z f": "editor::FoldSelectedRanges",
 332      "z shift-m": "editor::FoldAll",
 333      "z shift-r": "editor::UnfoldAll",
 334      "shift-z shift-q": [
 335        "pane::CloseActiveItem",
 336        {
 337          "save_intent": "skip"
 338        }
 339      ],
 340      "shift-z shift-z": [
 341        "pane::CloseActiveItem",
 342        {
 343          "save_intent": "save_all"
 344        }
 345      ],
 346      // Count support
 347      "1": [
 348        "vim::Number",
 349        1
 350      ],
 351      "2": [
 352        "vim::Number",
 353        2
 354      ],
 355      "3": [
 356        "vim::Number",
 357        3
 358      ],
 359      "4": [
 360        "vim::Number",
 361        4
 362      ],
 363      "5": [
 364        "vim::Number",
 365        5
 366      ],
 367      "6": [
 368        "vim::Number",
 369        6
 370      ],
 371      "7": [
 372        "vim::Number",
 373        7
 374      ],
 375      "8": [
 376        "vim::Number",
 377        8
 378      ],
 379      "9": [
 380        "vim::Number",
 381        9
 382      ],
 383      "ctrl-w d": "editor::GoToDefinitionSplit",
 384      "ctrl-w g d": "editor::GoToDefinitionSplit",
 385      "ctrl-w shift-d": "editor::GoToTypeDefinitionSplit",
 386      "ctrl-w g shift-d": "editor::GoToTypeDefinitionSplit",
 387      "ctrl-w space": "editor::OpenExcerptsSplit",
 388      "ctrl-w g space": "editor::OpenExcerptsSplit",
 389      "ctrl-6": "pane::AlternateFile"
 390    }
 391  },
 392  {
 393    "context": "vim_mode == normal",
 394    "bindings": {
 395      "ctrl-[": "editor::Cancel",
 396      "escape": "editor::Cancel",
 397      ":": "command_palette::Toggle",
 398      ".": "vim::Repeat",
 399      "c": "vim::PushChange",
 400      "shift-c": "vim::ChangeToEndOfLine",
 401      "d": "vim::PushDelete",
 402      "shift-d": "vim::DeleteToEndOfLine",
 403      "shift-j": "vim::JoinLines",
 404      "g shift-j": "vim::JoinLinesNoWhitespace",
 405      "y": "vim::PushYank",
 406      "shift-y": "vim::YankLine",
 407      "i": "vim::InsertBefore",
 408      "shift-i": "vim::InsertFirstNonWhitespace",
 409      "a": "vim::InsertAfter",
 410      "shift-a": "vim::InsertEndOfLine",
 411      "x": "vim::DeleteRight",
 412      "shift-x": "vim::DeleteLeft",
 413      "o": "vim::InsertLineBelow",
 414      "shift-o": "vim::InsertLineAbove",
 415      "~": "vim::ChangeCase",
 416      "ctrl-a": "vim::Increment",
 417      "ctrl-x": "vim::Decrement",
 418      "p": "vim::Paste",
 419      "shift-p": [
 420        "vim::Paste",
 421        {
 422          "before": true
 423        }
 424      ],
 425      "u": "vim::Undo",
 426      "ctrl-r": "vim::Redo",
 427      "r": "vim::PushReplace",
 428      "s": "vim::Substitute",
 429      "shift-s": "vim::SubstituteLine",
 430      ">": "vim::PushIndent",
 431      "<": "vim::PushOutdent",
 432      "=": "vim::PushAutoIndent",
 433      "!": "vim::PushShellCommand",
 434      "g u": "vim::PushLowercase",
 435      "g shift-u": "vim::PushUppercase",
 436      "g ~": "vim::PushOppositeCase",
 437      "\"": "vim::PushRegister",
 438      "g w": "vim::PushRewrap",
 439      "g q": "vim::PushRewrap",
 440      "ctrl-pagedown": "pane::ActivateNextItem",
 441      "ctrl-pageup": "pane::ActivatePreviousItem",
 442      "insert": "vim::InsertBefore",
 443      // tree-sitter related commands
 444      "[ x": "vim::SelectLargerSyntaxNode",
 445      "] x": "vim::SelectSmallerSyntaxNode",
 446      "] d": "editor::GoToDiagnostic",
 447      "[ d": "editor::GoToPreviousDiagnostic",
 448      "] c": "editor::GoToHunk",
 449      "[ c": "editor::GoToPreviousHunk",
 450      "g c": "vim::PushToggleComments"
 451    }
 452  },
 453  {
 454    "context": "VimControl && VimCount",
 455    "bindings": {
 456      "0": [
 457        "vim::Number",
 458        0
 459      ],
 460      ":": "vim::CountCommand"
 461    }
 462  },
 463  {
 464    "context": "vim_mode == visual",
 465    "bindings": {
 466      ":": "vim::VisualCommand",
 467      "u": "vim::ConvertToLowerCase",
 468      "shift-u": "vim::ConvertToUpperCase",
 469      "shift-o": "vim::OtherEnd",
 470      "o": "vim::OtherEnd",
 471      "d": "vim::VisualDelete",
 472      "x": "vim::VisualDelete",
 473      "shift-d": "vim::VisualDeleteLine",
 474      "shift-x": "vim::VisualDeleteLine",
 475      "y": "vim::VisualYank",
 476      "shift-y": "vim::VisualYankLine",
 477      "p": "vim::Paste",
 478      "shift-p": [
 479        "vim::Paste",
 480        {
 481          "preserve_clipboard": true
 482        }
 483      ],
 484      "c": "vim::Substitute",
 485      "s": "vim::Substitute",
 486      "shift-r": "vim::SubstituteLine",
 487      "shift-s": "vim::SubstituteLine",
 488      "~": "vim::ChangeCase",
 489      "*": [
 490        "vim::MoveToNext",
 491        {
 492          "partial_word": true
 493        }
 494      ],
 495      "#": [
 496        "vim::MoveToPrevious",
 497        {
 498          "partial_word": true
 499        }
 500      ],
 501      "ctrl-a": "vim::Increment",
 502      "ctrl-x": "vim::Decrement",
 503      "g ctrl-a": [
 504        "vim::Increment",
 505        {
 506          "step": true
 507        }
 508      ],
 509      "g ctrl-x": [
 510        "vim::Decrement",
 511        {
 512          "step": true
 513        }
 514      ],
 515      "shift-i": "vim::InsertBefore",
 516      "shift-a": "vim::InsertAfter",
 517      "g shift-i": "vim::VisualInsertFirstNonWhiteSpace",
 518      "g shift-a": "vim::VisualInsertEndOfLine",
 519      "shift-j": "vim::JoinLines",
 520      "g shift-j": "vim::JoinLinesNoWhitespace",
 521      "r": "vim::PushReplace",
 522      "ctrl-c": "vim::SwitchToNormalMode",
 523      "ctrl-[": "vim::SwitchToNormalMode",
 524      "escape": "vim::SwitchToNormalMode",
 525      ">": "vim::Indent",
 526      "<": "vim::Outdent",
 527      "=": "vim::AutoIndent",
 528      "!": "vim::ShellCommand",
 529      "i": [
 530        "vim::PushObject",
 531        {
 532          "around": false
 533        }
 534      ],
 535      "a": [
 536        "vim::PushObject",
 537        {
 538          "around": true
 539        }
 540      ],
 541      "g r": [
 542        "vim::Paste",
 543        {
 544          "preserve_clipboard": true
 545        }
 546      ],
 547      "g c": "vim::ToggleComments",
 548      "g q": "vim::Rewrap",
 549      "\"": "vim::PushRegister",
 550      // tree-sitter related commands
 551      "[ x": "editor::SelectLargerSyntaxNode",
 552      "] x": "editor::SelectSmallerSyntaxNode"
 553    }
 554  },
 555  {
 556    "context": "vim_mode == insert",
 557    "bindings": {
 558      "ctrl-c": "vim::NormalBefore",
 559      "ctrl-[": "vim::NormalBefore",
 560      "escape": "vim::NormalBefore",
 561      "ctrl-x": null,
 562      "ctrl-x ctrl-o": "editor::ShowCompletions",
 563      "ctrl-x ctrl-a": "assistant::InlineAssist", // zed specific
 564      "ctrl-x ctrl-c": "editor::ShowEditPrediction", // zed specific
 565      "ctrl-x ctrl-l": "editor::ToggleCodeActions", // zed specific
 566      "ctrl-x ctrl-z": "editor::Cancel",
 567      "ctrl-w": "editor::DeleteToPreviousWordStart",
 568      "ctrl-u": "editor::DeleteToBeginningOfLine",
 569      "ctrl-t": "vim::Indent",
 570      "ctrl-d": "vim::Outdent",
 571      "ctrl-k": [
 572        "vim::PushDigraph",
 573        {}
 574      ],
 575      "ctrl-v": [
 576        "vim::PushLiteral",
 577        {}
 578      ],
 579      "ctrl-shift-v": "editor::Paste", // note: this is *very* similar to ctrl-v in vim, but ctrl-shift-v on linux is the typical shortcut for paste when ctrl-v is already in use.
 580      "ctrl-q": [
 581        "vim::PushLiteral",
 582        {}
 583      ],
 584      "ctrl-shift-q": [
 585        "vim::PushLiteral",
 586        {}
 587      ],
 588      "ctrl-r": "vim::PushRegister",
 589      "insert": "vim::ToggleReplace",
 590      "ctrl-o": "vim::TemporaryNormal"
 591    }
 592  },
 593  {
 594    "context": "vim_mode == helix_normal",
 595    "bindings": {
 596      "i": "vim::InsertBefore",
 597      "a": "vim::InsertAfter",
 598      "d": "vim::HelixDelete",
 599      "w": "vim::NextWordStart",
 600      "e": "vim::NextWordEnd",
 601      "b": "vim::PreviousWordStart",
 602      "h": "vim::Left",
 603      "j": "vim::Down",
 604      "k": "vim::Up",
 605      "l": "vim::Right"
 606    }
 607  },
 608  {
 609    "context": "vim_mode == insert && !(showing_code_actions || showing_completions)",
 610    "bindings": {
 611      "ctrl-p": "editor::ShowCompletions",
 612      "ctrl-n": "editor::ShowCompletions"
 613    }
 614  },
 615  {
 616    "context": "vim_mode == replace",
 617    "bindings": {
 618      "ctrl-c": "vim::NormalBefore",
 619      "ctrl-[": "vim::NormalBefore",
 620      "escape": "vim::NormalBefore",
 621      "ctrl-k": [
 622        "vim::PushDigraph",
 623        {}
 624      ],
 625      "ctrl-v": [
 626        "vim::PushLiteral",
 627        {}
 628      ],
 629      "ctrl-shift-v": "editor::Paste", // note: this is *very* similar to ctrl-v in vim, but ctrl-shift-v on linux is the typical shortcut for paste when ctrl-v is already in use.
 630      "ctrl-q": [
 631        "vim::PushLiteral",
 632        {}
 633      ],
 634      "ctrl-shift-q": [
 635        "vim::PushLiteral",
 636        {}
 637      ],
 638      "backspace": "vim::UndoReplace",
 639      "tab": "vim::Tab",
 640      "enter": "vim::Enter",
 641      "insert": "vim::InsertBefore"
 642    }
 643  },
 644  {
 645    "context": "vim_mode == waiting",
 646    "bindings": {
 647      "tab": "vim::Tab",
 648      "enter": "vim::Enter",
 649      "ctrl-c": "vim::ClearOperators",
 650      "ctrl-[": "vim::ClearOperators",
 651      "escape": "vim::ClearOperators",
 652      "ctrl-k": [
 653        "vim::PushDigraph",
 654        {}
 655      ],
 656      "ctrl-v": [
 657        "vim::PushLiteral",
 658        {}
 659      ],
 660      "ctrl-q": [
 661        "vim::PushLiteral",
 662        {}
 663      ]
 664    }
 665  },
 666  {
 667    "context": "Editor && vim_mode == waiting && (vim_operator == ys || vim_operator == cs)",
 668    "bindings": {
 669      "escape": "vim::SwitchToNormalMode"
 670    }
 671  },
 672  {
 673    "context": "vim_mode == operator",
 674    "bindings": {
 675      "ctrl-c": "vim::ClearOperators",
 676      "ctrl-[": "vim::ClearOperators",
 677      "escape": "vim::ClearOperators",
 678      "g c": "vim::Comment"
 679    }
 680  },
 681  {
 682    "context": "vim_operator == a || vim_operator == i || vim_operator == cs",
 683    "bindings": {
 684      "w": "vim::Word",
 685      "shift-w": [
 686        "vim::Word",
 687        {
 688          "ignore_punctuation": true
 689        }
 690      ],
 691      // Subword TextObject
 692      // "w": "vim::Subword",
 693      // "shift-w": ["vim::Subword", { "ignore_punctuation": true }],
 694      "t": "vim::Tag",
 695      "s": "vim::Sentence",
 696      "p": "vim::Paragraph",
 697      "'": "vim::Quotes",
 698      "`": "vim::BackQuotes",
 699      "\"": "vim::DoubleQuotes",
 700      "q": "vim::AnyQuotes",
 701      "|": "vim::VerticalBars",
 702      "(": "vim::Parentheses",
 703      ")": "vim::Parentheses",
 704      "b": "vim::Parentheses",
 705      // "b": "vim::AnyBrackets",
 706      "[": "vim::SquareBrackets",
 707      "]": "vim::SquareBrackets",
 708      "r": "vim::SquareBrackets",
 709      "{": "vim::CurlyBrackets",
 710      "}": "vim::CurlyBrackets",
 711      "shift-b": "vim::CurlyBrackets",
 712      "<": "vim::AngleBrackets",
 713      ">": "vim::AngleBrackets",
 714      "a": "vim::Argument",
 715      "i": "vim::IndentObj",
 716      "shift-i": [
 717        "vim::IndentObj",
 718        {
 719          "include_below": true
 720        }
 721      ],
 722      "f": "vim::Method",
 723      "c": "vim::Class",
 724      "e": "vim::EntireFile"
 725    }
 726  },
 727  {
 728    "context": "vim_operator == c",
 729    "bindings": {
 730      "c": "vim::CurrentLine",
 731      "x": "vim::Exchange",
 732      "d": "editor::Rename", // zed specific
 733      "s": [
 734        "vim::PushChangeSurrounds",
 735        {}
 736      ]
 737    }
 738  },
 739  {
 740    "context": "vim_operator == d",
 741    "bindings": {
 742      "d": "vim::CurrentLine",
 743      "s": "vim::PushDeleteSurrounds",
 744      "o": "editor::ToggleSelectedDiffHunks", // "d o"
 745      "p": "git::Restore" // "d p"
 746    }
 747  },
 748  {
 749    "context": "vim_operator == gu",
 750    "bindings": {
 751      "g u": "vim::CurrentLine",
 752      "u": "vim::CurrentLine"
 753    }
 754  },
 755  {
 756    "context": "vim_operator == gU",
 757    "bindings": {
 758      "g shift-u": "vim::CurrentLine",
 759      "shift-u": "vim::CurrentLine"
 760    }
 761  },
 762  {
 763    "context": "vim_operator == g~",
 764    "bindings": {
 765      "g ~": "vim::CurrentLine",
 766      "~": "vim::CurrentLine"
 767    }
 768  },
 769  {
 770    "context": "vim_operator == gq",
 771    "bindings": {
 772      "g q": "vim::CurrentLine",
 773      "q": "vim::CurrentLine",
 774      "g w": "vim::CurrentLine",
 775      "w": "vim::CurrentLine"
 776    }
 777  },
 778  {
 779    "context": "vim_operator == y",
 780    "bindings": {
 781      "y": "vim::CurrentLine",
 782      "s": [
 783        "vim::PushAddSurrounds",
 784        {}
 785      ]
 786    }
 787  },
 788  {
 789    "context": "vim_operator == ys",
 790    "bindings": {
 791      "s": "vim::CurrentLine"
 792    }
 793  },
 794  {
 795    "context": "vim_operator == >",
 796    "bindings": {
 797      ">": "vim::CurrentLine"
 798    }
 799  },
 800  {
 801    "context": "vim_operator == <",
 802    "bindings": {
 803      "<": "vim::CurrentLine"
 804    }
 805  },
 806  {
 807    "context": "vim_operator == eq",
 808    "bindings": {
 809      "=": "vim::CurrentLine"
 810    }
 811  },
 812  {
 813    "context": "vim_operator == sh",
 814    "bindings": {
 815      "!": "vim::CurrentLine"
 816    }
 817  },
 818  {
 819    "context": "vim_operator == gc",
 820    "bindings": {
 821      "c": "vim::CurrentLine"
 822    }
 823  },
 824  {
 825    "context": "vim_operator == gr",
 826    "bindings": {
 827      "r": "vim::CurrentLine"
 828    }
 829  },
 830  {
 831    "context": "vim_operator == cx",
 832    "bindings": {
 833      "x": "vim::CurrentLine",
 834      "c": "vim::ClearExchange"
 835    }
 836  },
 837  {
 838    "context": "vim_mode == literal",
 839    "bindings": {
 840      "ctrl-@": [
 841        "vim::Literal",
 842        [
 843          "ctrl-@",
 844          "\u0000"
 845        ]
 846      ],
 847      "ctrl-a": [
 848        "vim::Literal",
 849        [
 850          "ctrl-a",
 851          "\u0001"
 852        ]
 853      ],
 854      "ctrl-b": [
 855        "vim::Literal",
 856        [
 857          "ctrl-b",
 858          "\u0002"
 859        ]
 860      ],
 861      "ctrl-c": [
 862        "vim::Literal",
 863        [
 864          "ctrl-c",
 865          "\u0003"
 866        ]
 867      ],
 868      "ctrl-d": [
 869        "vim::Literal",
 870        [
 871          "ctrl-d",
 872          "\u0004"
 873        ]
 874      ],
 875      "ctrl-e": [
 876        "vim::Literal",
 877        [
 878          "ctrl-e",
 879          "\u0005"
 880        ]
 881      ],
 882      "ctrl-f": [
 883        "vim::Literal",
 884        [
 885          "ctrl-f",
 886          "\u0006"
 887        ]
 888      ],
 889      "ctrl-g": [
 890        "vim::Literal",
 891        [
 892          "ctrl-g",
 893          "\u0007"
 894        ]
 895      ],
 896      "ctrl-h": [
 897        "vim::Literal",
 898        [
 899          "ctrl-h",
 900          "\u0008"
 901        ]
 902      ],
 903      "ctrl-i": [
 904        "vim::Literal",
 905        [
 906          "ctrl-i",
 907          "\u0009"
 908        ]
 909      ],
 910      "ctrl-j": [
 911        "vim::Literal",
 912        [
 913          "ctrl-j",
 914          "\u000A"
 915        ]
 916      ],
 917      "ctrl-k": [
 918        "vim::Literal",
 919        [
 920          "ctrl-k",
 921          "\u000B"
 922        ]
 923      ],
 924      "ctrl-l": [
 925        "vim::Literal",
 926        [
 927          "ctrl-l",
 928          "\u000C"
 929        ]
 930      ],
 931      "ctrl-m": [
 932        "vim::Literal",
 933        [
 934          "ctrl-m",
 935          "\u000D"
 936        ]
 937      ],
 938      "ctrl-n": [
 939        "vim::Literal",
 940        [
 941          "ctrl-n",
 942          "\u000E"
 943        ]
 944      ],
 945      "ctrl-o": [
 946        "vim::Literal",
 947        [
 948          "ctrl-o",
 949          "\u000F"
 950        ]
 951      ],
 952      "ctrl-p": [
 953        "vim::Literal",
 954        [
 955          "ctrl-p",
 956          "\u0010"
 957        ]
 958      ],
 959      "ctrl-q": [
 960        "vim::Literal",
 961        [
 962          "ctrl-q",
 963          "\u0011"
 964        ]
 965      ],
 966      "ctrl-r": [
 967        "vim::Literal",
 968        [
 969          "ctrl-r",
 970          "\u0012"
 971        ]
 972      ],
 973      "ctrl-s": [
 974        "vim::Literal",
 975        [
 976          "ctrl-s",
 977          "\u0013"
 978        ]
 979      ],
 980      "ctrl-t": [
 981        "vim::Literal",
 982        [
 983          "ctrl-t",
 984          "\u0014"
 985        ]
 986      ],
 987      "ctrl-u": [
 988        "vim::Literal",
 989        [
 990          "ctrl-u",
 991          "\u0015"
 992        ]
 993      ],
 994      "ctrl-v": [
 995        "vim::Literal",
 996        [
 997          "ctrl-v",
 998          "\u0016"
 999        ]
1000      ],
1001      "ctrl-w": [
1002        "vim::Literal",
1003        [
1004          "ctrl-w",
1005          "\u0017"
1006        ]
1007      ],
1008      "ctrl-x": [
1009        "vim::Literal",
1010        [
1011          "ctrl-x",
1012          "\u0018"
1013        ]
1014      ],
1015      "ctrl-y": [
1016        "vim::Literal",
1017        [
1018          "ctrl-y",
1019          "\u0019"
1020        ]
1021      ],
1022      "ctrl-z": [
1023        "vim::Literal",
1024        [
1025          "ctrl-z",
1026          "\u001A"
1027        ]
1028      ],
1029      "ctrl-[": [
1030        "vim::Literal",
1031        [
1032          "ctrl-[",
1033          "\u001B"
1034        ]
1035      ],
1036      "ctrl-\\": [
1037        "vim::Literal",
1038        [
1039          "ctrl-\\",
1040          "\u001C"
1041        ]
1042      ],
1043      "ctrl-]": [
1044        "vim::Literal",
1045        [
1046          "ctrl-]",
1047          "\u001D"
1048        ]
1049      ],
1050      "ctrl-^": [
1051        "vim::Literal",
1052        [
1053          "ctrl-^",
1054          "\u001E"
1055        ]
1056      ],
1057      "ctrl-_": [
1058        "vim::Literal",
1059        [
1060          "ctrl-_",
1061          "\u001F"
1062        ]
1063      ],
1064      "escape": [
1065        "vim::Literal",
1066        [
1067          "escape",
1068          "\u001B"
1069        ]
1070      ],
1071      "enter": [
1072        "vim::Literal",
1073        [
1074          "enter",
1075          "\u000D"
1076        ]
1077      ],
1078      "tab": [
1079        "vim::Literal",
1080        [
1081          "tab",
1082          "\u0009"
1083        ]
1084      ],
1085      // zed extensions:
1086      "backspace": [
1087        "vim::Literal",
1088        [
1089          "backspace",
1090          "\u0008"
1091        ]
1092      ],
1093      "delete": [
1094        "vim::Literal",
1095        [
1096          "delete",
1097          "\u007F"
1098        ]
1099      ]
1100    }
1101  },
1102  {
1103    "context": "BufferSearchBar && !in_replace",
1104    "bindings": {
1105      "enter": "vim::SearchSubmit",
1106      "escape": "buffer_search::Dismiss"
1107    }
1108  },
1109  {
1110    "context": "GitPanel || ProjectPanel || CollabPanel || OutlinePanel || ChatPanel || VimControl || EmptyPane || SharedScreen || MarkdownPreview || KeyContextView",
1111    "bindings": {
1112      // window related commands (ctrl-w X)
1113      "ctrl-w": null,
1114      "ctrl-w left": "workspace::ActivatePaneLeft",
1115      "ctrl-w right": "workspace::ActivatePaneRight",
1116      "ctrl-w up": "workspace::ActivatePaneUp",
1117      "ctrl-w down": "workspace::ActivatePaneDown",
1118      "ctrl-w ctrl-h": "workspace::ActivatePaneLeft",
1119      "ctrl-w ctrl-l": "workspace::ActivatePaneRight",
1120      "ctrl-w ctrl-k": "workspace::ActivatePaneUp",
1121      "ctrl-w ctrl-j": "workspace::ActivatePaneDown",
1122      "ctrl-w h": "workspace::ActivatePaneLeft",
1123      "ctrl-w l": "workspace::ActivatePaneRight",
1124      "ctrl-w k": "workspace::ActivatePaneUp",
1125      "ctrl-w j": "workspace::ActivatePaneDown",
1126      "ctrl-w shift-left": "workspace::SwapPaneLeft",
1127      "ctrl-w shift-right": "workspace::SwapPaneRight",
1128      "ctrl-w shift-up": "workspace::SwapPaneUp",
1129      "ctrl-w shift-down": "workspace::SwapPaneDown",
1130      "ctrl-w shift-h": "workspace::SwapPaneLeft",
1131      "ctrl-w shift-l": "workspace::SwapPaneRight",
1132      "ctrl-w shift-k": "workspace::SwapPaneUp",
1133      "ctrl-w shift-j": "workspace::SwapPaneDown",
1134      "ctrl-w >": "vim::ResizePaneRight",
1135      "ctrl-w <": "vim::ResizePaneLeft",
1136      "ctrl-w -": "vim::ResizePaneDown",
1137      "ctrl-w +": "vim::ResizePaneUp",
1138      "ctrl-w _": "vim::MaximizePane",
1139      "ctrl-w =": "vim::ResetPaneSizes",
1140      "ctrl-w g t": "pane::ActivateNextItem",
1141      "ctrl-w ctrl-g t": "pane::ActivateNextItem",
1142      "ctrl-w g shift-t": "pane::ActivatePreviousItem",
1143      "ctrl-w ctrl-g shift-t": "pane::ActivatePreviousItem",
1144      "ctrl-w w": "workspace::ActivateNextPane",
1145      "ctrl-w ctrl-w": "workspace::ActivateNextPane",
1146      "ctrl-w p": "workspace::ActivatePreviousPane",
1147      "ctrl-w ctrl-p": "workspace::ActivatePreviousPane",
1148      "ctrl-w shift-w": "workspace::ActivatePreviousPane",
1149      "ctrl-w ctrl-shift-w": "workspace::ActivatePreviousPane",
1150      "ctrl-w ctrl-v": "pane::SplitVertical",
1151      "ctrl-w v": "pane::SplitVertical",
1152      "ctrl-w shift-s": "pane::SplitHorizontal",
1153      "ctrl-w ctrl-s": "pane::SplitHorizontal",
1154      "ctrl-w s": "pane::SplitHorizontal",
1155      "ctrl-w ctrl-c": "pane::CloseActiveItem",
1156      "ctrl-w c": "pane::CloseActiveItem",
1157      "ctrl-w ctrl-q": "pane::CloseActiveItem",
1158      "ctrl-w q": "pane::CloseActiveItem",
1159      "ctrl-w ctrl-a": "pane::CloseAllItems",
1160      "ctrl-w a": "pane::CloseAllItems",
1161      "ctrl-w ctrl-o": "workspace::CloseInactiveTabsAndPanes",
1162      "ctrl-w o": "workspace::CloseInactiveTabsAndPanes",
1163      "ctrl-w ctrl-n": "workspace::NewFileSplitHorizontal",
1164      "ctrl-w n": "workspace::NewFileSplitHorizontal"
1165    }
1166  },
1167  {
1168    "context": "ChangesList || EmptyPane || SharedScreen || MarkdownPreview || KeyContextView || Welcome",
1169    "bindings": {
1170      ":": "command_palette::Toggle",
1171      "g /": "pane::DeploySearch"
1172    }
1173  },
1174  {
1175    // netrw compatibility
1176    "context": "ProjectPanel && not_editing",
1177    "bindings": {
1178      ":": "command_palette::Toggle",
1179      "%": "project_panel::NewFile",
1180      "/": "project_panel::NewSearchInDirectory",
1181      "d": "project_panel::NewDirectory",
1182      "enter": "project_panel::OpenPermanent",
1183      "escape": "project_panel::ToggleFocus",
1184      "h": "project_panel::CollapseSelectedEntry",
1185      "j": "menu::SelectNext",
1186      "k": "menu::SelectPrevious",
1187      "l": "project_panel::ExpandSelectedEntry",
1188      "o": "project_panel::OpenPermanent",
1189      "shift-d": "project_panel::Delete",
1190      "shift-r": "project_panel::Rename",
1191      "t": "project_panel::OpenPermanent",
1192      "v": "project_panel::OpenPermanent",
1193      "p": "project_panel::Open",
1194      "x": "project_panel::RevealInFileManager",
1195      "s": "project_panel::OpenWithSystem",
1196      "] c": "project_panel::SelectNextGitEntry",
1197      "[ c": "project_panel::SelectPrevGitEntry",
1198      "] d": "project_panel::SelectNextDiagnostic",
1199      "[ d": "project_panel::SelectPrevDiagnostic",
1200      "}": "project_panel::SelectNextDirectory",
1201      "{": "project_panel::SelectPrevDirectory",
1202      "shift-g": "menu::SelectLast",
1203      "g g": "menu::SelectFirst",
1204      "-": "project_panel::SelectParent",
1205      "ctrl-6": "pane::AlternateFile"
1206    }
1207  },
1208  {
1209    "context": "OutlinePanel && not_editing",
1210    "bindings": {
1211      "j": "menu::SelectNext",
1212      "k": "menu::SelectPrevious",
1213      "shift-g": "menu::SelectLast",
1214      "g g": "menu::SelectFirst"
1215    }
1216  },
1217  {
1218    "context": "GitPanel && ChangesList",
1219    "use_key_equivalents": true,
1220    "bindings": {
1221      "k": "menu::SelectPrevious",
1222      "j": "menu::SelectNext",
1223      "g g": "menu::SelectFirst",
1224      "shift-g": "menu::SelectLast",
1225      "g f": "menu::Confirm",
1226      "i": "git_panel::FocusEditor",
1227      "x": "git::ToggleStaged",
1228      "shift-x": "git::StageAll",
1229      "shift-u": "git::UnstageAll"
1230    }
1231  },
1232  {
1233    "context": "Editor && edit_prediction",
1234    "bindings": {
1235      // This is identical to the binding in the base keymap, but the vim bindings above to
1236      // "vim::Tab" shadow it, so it needs to be bound again.
1237      "tab": "editor::AcceptEditPrediction"
1238    }
1239  },
1240  {
1241    "context": "os != macos && Editor && edit_prediction_conflict",
1242    "bindings": {
1243      // alt-l is provided as an alternative to tab/alt-tab. and will be displayed in the UI. This
1244      // is because alt-tab may not be available, as it is often used for window switching on Linux
1245      // and Windows.
1246      "alt-l": "editor::AcceptEditPrediction"
1247    }
1248  }
1249]