Skip to content

Commit 8c1b4cb

Browse files
authored
Re-order Helix keymaps and add alt-o/i/p/n (#40527)
Release Notes: - helix: Re-ordered `helix_normal || helix_select` keybindings to follow the same order as the keymap on the helix-editor [documentation](https://docs.helix-editor.com/keymap.html). - helix: Added `alt-o` & `alt-i` to Select larger and smaller syntax node respectively - helix: Added `alt-p` & `alt-n` to Select Next Syntax Node and Previous Syntax Node respectively --- The new main helix normal & select context looks like follows ```jsonc { "context": "(vim_mode == helix_normal || vim_mode == helix_select) && !menu", "bindings": { // Movement "h": "vim::WrappingLeft", "left": "vim::WrappingLeft", "l": "vim::WrappingRight", "right": "vim::WrappingRight", "t": ["vim::PushFindForward", { "before": true, "multiline": true }], "f": ["vim::PushFindForward", { "before": false, "multiline": true }], "shift-t": ["vim::PushFindBackward", { "after": true, "multiline": true }], "shift-f": ["vim::PushFindBackward", { "after": false, "multiline": true }], "alt-.": "vim::RepeatFind", // Changes "shift-r": "editor::Paste", "`": "vim::ConvertToLowerCase", "alt-`": "vim::ConvertToUpperCase", "insert": "vim::InsertBefore", "shift-u": "editor::Redo", "ctrl-r": "vim::Redo", "y": "vim::HelixYank", "p": "vim::HelixPaste", "shift-p": ["vim::HelixPaste", { "before": true }], ">": "vim::Indent", "<": "vim::Outdent", "=": "vim::AutoIndent", "d": "vim::HelixDelete", "c": "vim::HelixSubstitute", "alt-c": "vim::HelixSubstituteNoYank", // Selection manipulation "s": "vim::HelixSelectRegex", "alt-s": ["editor::SplitSelectionIntoLines", { "keep_selections": true }], ";": "vim::HelixCollapseSelection", "alt-;": "vim::OtherEnd", ",": "vim::HelixKeepNewestSelection", "shift-c": "vim::HelixDuplicateBelow", "alt-shift-c": "vim::HelixDuplicateAbove", "%": "editor::SelectAll", "x": "vim::HelixSelectLine", "shift-x": "editor::SelectLine", "ctrl-c": "editor::ToggleComments", "alt-o": "editor::SelectLargerSyntaxNode", "alt-i": "editor::SelectSmallerSyntaxNode", "alt-p": "editor::SelectPreviousSyntaxNode", "alt-n": "editor::SelectNextSyntaxNode", // Goto mode "g e": "vim::EndOfDocument", "g h": "vim::StartOfLine", "g l": "vim::EndOfLine", "g s": "vim::FirstNonWhitespace", // "g s" default behavior is "space s" "g t": "vim::WindowTop", "g c": "vim::WindowMiddle", "g b": "vim::WindowBottom", "g r": "editor::FindAllReferences", // zed specific "g n": "pane::ActivateNextItem", "shift-l": "pane::ActivateNextItem", "g p": "pane::ActivatePreviousItem", "shift-h": "pane::ActivatePreviousItem", "g .": "vim::HelixGotoLastModification", // go to last modification // Window mode "space w h": "workspace::ActivatePaneLeft", "space w l": "workspace::ActivatePaneRight", "space w k": "workspace::ActivatePaneUp", "space w j": "workspace::ActivatePaneDown", "space w q": "pane::CloseActiveItem", "space w s": "pane::SplitRight", "space w r": "pane::SplitRight", "space w v": "pane::SplitDown", "space w d": "pane::SplitDown", // Space mode "space f": "file_finder::Toggle", "space k": "editor::Hover", "space s": "outline::Toggle", "space shift-s": "project_symbols::Toggle", "space d": "editor::GoToDiagnostic", "space r": "editor::Rename", "space a": "editor::ToggleCodeActions", "space h": "editor::SelectAllMatches", "space c": "editor::ToggleComments", "space p": "editor::Paste", "space y": "editor::Copy", // Other ":": "command_palette::Toggle", "m": "vim::PushHelixMatch", "]": ["vim::PushHelixNext", { "around": true }], "[": ["vim::PushHelixPrevious", { "around": true }], "g q": "vim::PushRewrap", "g w": "vim::PushRewrap", // "tab": "pane::ActivateNextItem", // "shift-tab": "pane::ActivatePrevItem", } } ```
1 parent 3bb4c94 commit 8c1b4cb

File tree

1 file changed

+58
-45
lines changed

1 file changed

+58
-45
lines changed

assets/keymaps/vim.json

Lines changed: 58 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -422,56 +422,66 @@
422422
{
423423
"context": "(vim_mode == helix_normal || vim_mode == helix_select) && !menu",
424424
"bindings": {
425-
";": "vim::HelixCollapseSelection",
426-
":": "command_palette::Toggle",
427-
"m": "vim::PushHelixMatch",
428-
"s": "vim::HelixSelectRegex",
429-
"]": ["vim::PushHelixNext", { "around": true }],
430-
"[": ["vim::PushHelixPrevious", { "around": true }],
431-
"left": "vim::WrappingLeft",
432-
"right": "vim::WrappingRight",
425+
// Movement
433426
"h": "vim::WrappingLeft",
427+
"left": "vim::WrappingLeft",
434428
"l": "vim::WrappingRight",
435-
"y": "vim::HelixYank",
436-
"p": "vim::HelixPaste",
437-
"shift-p": ["vim::HelixPaste", { "before": true }],
438-
"alt-;": "vim::OtherEnd",
439-
"ctrl-r": "vim::Redo",
440-
"f": ["vim::PushFindForward", { "before": false, "multiline": true }],
429+
"right": "vim::WrappingRight",
441430
"t": ["vim::PushFindForward", { "before": true, "multiline": true }],
442-
"shift-f": ["vim::PushFindBackward", { "after": false, "multiline": true }],
431+
"f": ["vim::PushFindForward", { "before": false, "multiline": true }],
443432
"shift-t": ["vim::PushFindBackward", { "after": true, "multiline": true }],
444-
">": "vim::Indent",
445-
"<": "vim::Outdent",
446-
"=": "vim::AutoIndent",
433+
"shift-f": ["vim::PushFindBackward", { "after": false, "multiline": true }],
434+
"alt-.": "vim::RepeatFind",
435+
436+
// Changes
437+
"shift-r": "editor::Paste",
447438
"`": "vim::ConvertToLowerCase",
448439
"alt-`": "vim::ConvertToUpperCase",
449-
"g q": "vim::PushRewrap",
450-
"g w": "vim::PushRewrap",
451440
"insert": "vim::InsertBefore",
452-
"alt-.": "vim::RepeatFind",
441+
"shift-u": "editor::Redo",
442+
"ctrl-r": "vim::Redo",
443+
"y": "vim::HelixYank",
444+
"p": "vim::HelixPaste",
445+
"shift-p": ["vim::HelixPaste", { "before": true }],
446+
">": "vim::Indent",
447+
"<": "vim::Outdent",
448+
"=": "vim::AutoIndent",
449+
"d": "vim::HelixDelete",
450+
"c": "vim::HelixSubstitute",
451+
"alt-c": "vim::HelixSubstituteNoYank",
452+
453+
// Selection manipulation
454+
"s": "vim::HelixSelectRegex",
453455
"alt-s": ["editor::SplitSelectionIntoLines", { "keep_selections": true }],
456+
";": "vim::HelixCollapseSelection",
457+
"alt-;": "vim::OtherEnd",
458+
",": "vim::HelixKeepNewestSelection",
459+
"shift-c": "vim::HelixDuplicateBelow",
460+
"alt-shift-c": "vim::HelixDuplicateAbove",
461+
"%": "editor::SelectAll",
462+
"x": "vim::HelixSelectLine",
463+
"shift-x": "editor::SelectLine",
464+
"ctrl-c": "editor::ToggleComments",
465+
"alt-o": "editor::SelectLargerSyntaxNode",
466+
"alt-i": "editor::SelectSmallerSyntaxNode",
467+
"alt-p": "editor::SelectPreviousSyntaxNode",
468+
"alt-n": "editor::SelectNextSyntaxNode",
469+
454470
// Goto mode
455-
"g n": "pane::ActivateNextItem",
456-
"g p": "pane::ActivatePreviousItem",
457-
// "tab": "pane::ActivateNextItem",
458-
// "shift-tab": "pane::ActivatePrevItem",
459-
"shift-h": "pane::ActivatePreviousItem",
460-
"shift-l": "pane::ActivateNextItem",
461-
"g l": "vim::EndOfLine",
471+
"g e": "vim::EndOfDocument",
462472
"g h": "vim::StartOfLine",
473+
"g l": "vim::EndOfLine",
463474
"g s": "vim::FirstNonWhitespace", // "g s" default behavior is "space s"
464-
"g e": "vim::EndOfDocument",
465-
"g .": "vim::HelixGotoLastModification", // go to last modification
466-
"g r": "editor::FindAllReferences", // zed specific
467475
"g t": "vim::WindowTop",
468476
"g c": "vim::WindowMiddle",
469477
"g b": "vim::WindowBottom",
470-
471-
"shift-r": "editor::Paste",
472-
"x": "vim::HelixSelectLine",
473-
"shift-x": "editor::SelectLine",
474-
"%": "editor::SelectAll",
478+
"g r": "editor::FindAllReferences", // zed specific
479+
"g n": "pane::ActivateNextItem",
480+
"shift-l": "pane::ActivateNextItem",
481+
"g p": "pane::ActivatePreviousItem",
482+
"shift-h": "pane::ActivatePreviousItem",
483+
"g .": "vim::HelixGotoLastModification", // go to last modification
484+
475485
// Window mode
476486
"space w h": "workspace::ActivatePaneLeft",
477487
"space w l": "workspace::ActivatePaneRight",
@@ -482,6 +492,7 @@
482492
"space w r": "pane::SplitRight",
483493
"space w v": "pane::SplitDown",
484494
"space w d": "pane::SplitDown",
495+
485496
// Space mode
486497
"space f": "file_finder::Toggle",
487498
"space k": "editor::Hover",
@@ -492,16 +503,18 @@
492503
"space a": "editor::ToggleCodeActions",
493504
"space h": "editor::SelectAllMatches",
494505
"space c": "editor::ToggleComments",
495-
"space y": "editor::Copy",
496506
"space p": "editor::Paste",
497-
"shift-u": "editor::Redo",
498-
"ctrl-c": "editor::ToggleComments",
499-
"d": "vim::HelixDelete",
500-
"c": "vim::HelixSubstitute",
501-
"alt-c": "vim::HelixSubstituteNoYank",
502-
"shift-c": "vim::HelixDuplicateBelow",
503-
"alt-shift-c": "vim::HelixDuplicateAbove",
504-
",": "vim::HelixKeepNewestSelection"
507+
"space y": "editor::Copy",
508+
509+
// Other
510+
":": "command_palette::Toggle",
511+
"m": "vim::PushHelixMatch",
512+
"]": ["vim::PushHelixNext", { "around": true }],
513+
"[": ["vim::PushHelixPrevious", { "around": true }],
514+
"g q": "vim::PushRewrap",
515+
"g w": "vim::PushRewrap",
516+
// "tab": "pane::ActivateNextItem",
517+
// "shift-tab": "pane::ActivatePrevItem",
505518
}
506519
},
507520
{

0 commit comments

Comments
 (0)