Skip to content

Instantly share code, notes, and snippets.

@eugenesvk
Last active October 19, 2025 07:09
Show Gist options
  • Select an option

  • Save eugenesvk/e09bd53953915bb730812b6f72eaa614 to your computer and use it in GitHub Desktop.

Select an option

Save eugenesvk/e09bd53953915bb730812b6f72eaa614 to your computer and use it in GitHub Desktop.
Zed keybindings in a cleaner KDL format (Vim+Helix), no " : , and other {[syntax noise]}
"VimControl && !menu" {
// '⠀' braile non-whitespace used mostly for alignment
// ⦋⠀b (pane)ActivatePreviousItem
// ⦌⇧b (pane)ActivateLastItem
// since symbols resolve conflicts like is 'ge' '>' or 'g e'? It's '⇧,' or '<'
// But could also resolve ambiguity and force a sequence
/-_ {(vim)PushObject around=#false; (vim)Up} // command sequence = nested nodes
i (vim)PushObject around=#false
a (vim)PushObject around=#true
⌫ (vim)WrappingLeft
▲ (vim)Up
k (vim)Up
▼ (vim)Down
j (vim)Down
⎈j (vim)Down
◀ (vim)Left
h (vim)Left
▶ (vim)Right
l (vim)Right
⎈m (vim)NextLineStart
⇧≗ (vim)NextLineStart
⏎ (vim)NextLineStart
- (vim)PreviousLineStart
⭾ (vim)Tab
⇧⭾ (vim)Tab
␠ (vim)WrappingRight
⇥ (vim)EndOfLine
⇧4 (vim)EndOfLine
⇧6 (vim)FirstNonWhiteSpace
⇧- (vim)StartOfLineDownward
g⇧- (vim)EndOfLineDownward
⇧g (vim)EndOfDocument
⇧⦋ (vim)StartOfParagraph
⇧⦌ (vim)EndOfParagraph
⇧9 (vim)SentenceBackward
⇧0 (vim)SentenceForward
⇧⧵ (vim)GoToColumn
// Word motions
w (vim)NextWordStart
e (vim)NextWordEnd
b (vim)PreviousWordStart
ge (vim)PreviousWordEnd
// Subword motions
/- w (vim)NextSubwordStart
/- b (vim)PreviousSubwordStart
/- e (vim)NextSubwordEnd
/-ge (vim)PreviousSubwordEnd
⇧w (vim)NextWordStart ignore_punctuation=#true
⇧e (vim)NextWordEnd ignore_punctuation=#true
⇧b (vim)PreviousWordStart ignore_punctuation=#true
g⇧e (vim)PreviousWordEnd ignore_punctuation=#true
⁄ (vim)Search
g⁄ (pane)DeploySearch
⇧⁄ (vim)Search backwards=#true
⇧8 (vim)MoveToNext
⇧3 (vim)MoveToPrevious
n (vim)MoveToNextMatch
⇧n (vim)MoveToPreviousMatch
⇧5 (vim)Matching
f (vim)PushFindForward before=#false multiline=#false
t (vim)PushFindForward before=#true multiline=#false
⇧f (vim)PushFindBackward after=#false multiline=#false
⇧t (vim)PushFindBackward after=#true multiline=#false
m (vim)PushMark
' (vim)PushJump line=#true
` (vim)PushJump line=#false
; (vim)RepeatFind
, (vim)RepeatFindReversed
⎈o (pane)GoBack
⎈i (pane)GoForward
⎈⦌ (editor)GoToDefinition
⎋ (vim)SwitchToNormalMode
⎈⦋ (vim)SwitchToNormalMode
v (vim)ToggleVisual
⇧v (vim)ToggleVisualLine
⎈g (vim)ShowLocation
⎈v (vim)ToggleVisualBlock
⎈q (vim)ToggleVisualBlock
⇧k (editor)Hover
⇧r (vim)ToggleReplace
№0 (vim)StartOfLine
⇤ (vim)StartOfLine
⎈f (vim)PageDown
⇟ (vim)PageDown
⎈b (vim)PageUp
⇞ (vim)PageUp
⎈d (vim)ScrollDown
⎈u (vim)ScrollUp
⎈e (vim)LineDown
⎈y (vim)LineUp
// g minor mode
g⇧r (vim)PushReplaceWithRegister
g⠀rn (editor)Rename
g⠀rr (editor)FindAllReferences
g⠀ri (editor)GoToImplementation
g⠀ra (editor)ToggleCodeActions
g⠀g (vim)StartOfDocument
g⠀h (editor)Hover
g⇧b (editor)BlameHover
g⠀d (editor)GoToDefinition
g⇧d (editor)GoToDeclaration
g⠀y (editor)GoToTypeDefinition
g⇧i (editor)GoToImplementation
g⠀x (editor)OpenUrl
g⠀f (editor)OpenSelectedFilename
g⠀n (vim)SelectNextMatch
g⇧n (vim)SelectPreviousMatch
g⠀l (vim)SelectNext
g⇧l (vim)SelectPrevious
g⇧. (editor)SelectNext replace_newest=#true
g⇧, (editor)SelectPrevious replace_newest=#true
g⠀a (editor)SelectAllMatches
g⠀s (outline)Toggle
g⇧o (outline)Toggle
g⇧s (project_symbols)Toggle
g⠀. (editor)ToggleCodeActions //zed specific
g⇧a (editor)FindAllReferences //zed specific
g⠀␠ (editor)OpenExcerpts //zed specific
g⇧8 (vim)MoveToNext partial_word=#true
g⇧3 (vim)MoveToPrevious partial_word=#true
g⠀j (vim)Down display_lines=#true
g⠀▼ (vim)Down display_lines=#true
g⠀k (vim)Up display_lines=#true
g⠀▲ (vim)Up display_lines=#true
g⇧4 (vim)EndOfLine display_lines=#true
g⠀⇤ (vim)EndOfLine display_lines=#true
g⠀0 (vim)StartOfLine display_lines=#true
g⇥ (vim)StartOfLine display_lines=#true
g⇧m (vim)MiddleOfLine display_lines=#true
g⠀^ (vim)FirstNonWhiteSpace display_lines=#true
g⠀v (vim)RestoreVisualSelection
g⠀⦌ (editor)GoToDiagnostic
g⠀⦋ (editor)GoToPreviousDiagnostic
g⠀i (vim)InsertAtPrevious
g⠀, (vim)ChangeListNewer
g⠀; (vim)ChangeListOlder
⇧h (vim)WindowTop
⇧m (vim)WindowMiddle
⇧l (vim)WindowBottom
q (vim)ToggleRecord
⇧q (vim)ReplayLastRecording
⇧2 (vim)PushReplayRegister
// z minor mode
z⠀⏎ (workspace)SendKeystrokes "z t ^"
z⠀- (workspace)SendKeystrokes "z b ^"
z⠀^ (workspace)SendKeystrokes "⇧h k z b ^"
z⠀+ (workspace)SendKeystrokes "⇧l j z t ^"
z⠀t (editor)ScrollCursorTop
z⠀z (editor)ScrollCursorCenter
z⠀. (workspace)SendKeystrokes "z z ^"
z⠀b (editor)ScrollCursorBottom
z⠀a (editor)ToggleFold
z⇧a (editor)ToggleFoldRecursive
z⠀c (editor)Fold
z⇧c (editor)FoldRecursive
z⠀o (editor)UnfoldLines
z⇧o (editor)UnfoldRecursive
z⠀f (editor)FoldSelectedRanges
z⇧m (editor)FoldAll
z⇧r (editor)UnfoldAll
z⠀l (vim)ColumnRight
z⠀h (vim)ColumnLeft
z⇧l (vim)HalfPageRight
z⇧h (vim)HalfPageLeft
⇧z⇧q (pane)CloseActiveItem save_intent=skip
⇧z⇧z (pane)CloseActiveItem save_intent=save_all
// Count support
№1 (vim)Number 1
№2 (vim)Number 2
№3 (vim)Number 3
№4 (vim)Number 4
№5 (vim)Number 5
№6 (vim)Number 6
№7 (vim)Number 7
№8 (vim)Number 8
№9 (vim)Number 9
⎈w⠀d (editor)GoToDefinitionSplit
⎈wgd (editor)GoToDefinitionSplit
⎈w⠀⦌ (editor)GoToDefinitionSplit
⎈w⎈⦌ (editor)GoToDefinitionSplit
⎈w⠀⇧d (editor)GoToTypeDefinitionSplit
⎈wg⇧d (editor)GoToTypeDefinitionSplit
⎈w⠀␠ (editor)OpenExcerptsSplit
⎈wg␠ (editor)OpenExcerptsSplit
⎈6 (pane)AlternateFile
⎈^ (pane)AlternateFile
. (vim)Repeat
}
"vim_mode == normal || vim_mode == visual || vim_mode == operator" {
⦌⠀⦌ (vim)NextSectionStart
⦌⠀⦋ (vim)NextSectionEnd
⦋⠀⦋ (vim)PreviousSectionStart
⦋⠀⦌ (vim)PreviousSectionEnd
⦌⠀m (vim)NextMethodStart
⦌⇧m (vim)NextMethodEnd
⦋⠀m (vim)PreviousMethodStart
⦋⇧m (vim)PreviousMethodEnd
⦋⠀∗ (vim)PreviousComment
⦋⠀⁄ (vim)PreviousComment
⦌⠀∗ (vim)NextComment
⦌⠀⁄ (vim)NextComment
⦋⠀- (vim)PreviousLesserIndent
⦋⠀+ (vim)PreviousGreaterIndent
⦋⠀≗ (vim)PreviousSameIndent
⦌⠀- (vim)NextLesserIndent
⦌⠀+ (vim)NextGreaterIndent
⦌⠀≗ (vim)NextSameIndent
⦌⠀b (pane)ActivateNextItem
⦋⠀b (pane)ActivatePreviousItem
⦌⇧b (pane)ActivateLastItem
⦋⇧b (pane)ActivateItem 0
⦌⠀␠ (vim)InsertEmptyLineBelow
⦋⠀␠ (vim)InsertEmptyLineAbove
⦋⠀e (editor)MoveLineUp
⦌⠀e (editor)MoveLineDown
⦋⠀f (workspace)FollowNextCollaborator
⦌⠀f (workspace)FollowNextCollaborator
⦌⇧⦌ (vim)UnmatchedForward char="}"
⦋⇧⦋ (vim)UnmatchedBackward char="{"
⦌⇧9 (vim)UnmatchedForward char=")"
⦋⇧0 (vim)UnmatchedBackward char="("
// Tree-Sitter related commands
⦋⠀x (vim)SelectLargerSyntaxNode
⦌⠀x (vim)SelectSmallerSyntaxNode
}
"vim_mode == normal" {
i (vim)InsertBefore
a (vim)InsertAfter
⎈⦋ (editor)Cancel
⇧; (command_palette)Toggle
c (vim)PushChange
⇧c (vim)ChangeToEndOfLine
d (vim)PushDelete
⌦ (vim)DeleteRight
g⇧j (vim)JoinLinesNoWhitespace
y (vim)PushYank
⇧y (vim)YankLine
x (vim)DeleteRight
⇧x (vim)DeleteLeft
⎈a (vim)Increment
⎈x (vim)Decrement
⎈r (vim)Redo
⇧. (vim)PushIndent
⇧, (vim)PushOutdent
≗ (vim)PushAutoIndent
⇧1 (vim)PushShellCommand
g⠀u (vim)PushLowercase
g⇧u (vim)PushUppercase
g⠀~ (vim)PushOppositeCase
g⇧⁄ (vim)PushRot13
/-g⇧⁄ (vim)PushRot47
g⠀w (vim)PushRewrap
g⠀q (vim)PushRewrap
⎀ (vim)InsertBefore
⦌⠀d (editor)GoToDiagnostic
⦋⠀d (editor)GoToPreviousDiagnostic
⦌⠀c (editor)GoToHunk
⦋⠀c (editor)GoToPreviousHunk
g⠀c (vim)PushToggleComments
}
"VimControl && VimCount" {
№0 (vim)Number 0
⇧; (vim)CountCommand
⇧5 (vim)GoToPercentage
}
"vim_mode == visual" {
⇧; (vim)VisualCommand
u (vim)ConvertToLowerCase
⇧u (vim)ConvertToUpperCase
⇧o (vim)OtherEnd
o (vim)OtherEndRowAware
d (vim)VisualDelete
x (vim)VisualDelete
⌦ (vim)VisualDelete
⇧d (vim)VisualDeleteLine
⇧x (vim)VisualDeleteLine
y (vim)VisualYank
⇧y (vim)VisualYankLine
p (vim)Paste
⇧p (vim)Paste preserve_clipboard=#true
c (vim)Substitute
s (vim)Substitute
⇧r (vim)SubstituteLine
⇧s (vim)SubstituteLine
~ (vim)ChangeCase
⇧8 (vim)MoveToNext partial_word=#true
⇧3 (vim)MoveToPrevious partial_word=#true
⎈a (vim)Increment
⎈x (vim)Decrement
g⎈a (vim)Increment step=#true
g⎈x (vim)Decrement step=#true
⇧i (vim)InsertBefore
⇧a (vim)InsertAfter
g⇧i (vim)VisualInsertFirstNonWhitespace
g⇧a (vim)VisualInsertEndOfLine
⇧j (vim)JoinLines
g⇧j (vim)JoinLinesNoWhitespace
r (vim)PushReplace
⎈c (vim)SwitchToNormalMode
⎈⦋ (vim)SwitchToNormalMode
⎋ (vim)SwitchToNormalMode
⇧. (vim)Indent
⇧, (vim)Outdent
≗ (vim)AutoIndent
⇧1 (vim)ShellCommand
i (vim)PushObject around=#false
a (vim)PushObject around=#true
g⇧r (vim)Paste preserve_clipboard=#true
g⠀c (vim)ToggleComments
g⠀q (vim)Rewrap
g⠀w (vim)Rewrap
g⇧⁄ (vim)ConvertToRot13
/-g⇧⁄ (vim)ConvertToRot47
⇧' (vim)PushRegister
}
"vim_mode == helix_select" {
v (vim)NormalBefore
; (vim)HelixCollapseSelection
~ (vim)ChangeCase
⎈a (vim)Increment
⎈x (vim)Decrement
⇧j (vim)JoinLines
i (vim)InsertBefore
a (vim)InsertAfter
p (vim)Paste
u (vim)Undo
r (vim)PushReplace
s (vim)Substitute
⎈⇞ (pane)ActivatePreviousItem
⎈⇟ (pane)ActivateNextItem
. (vim)Repeat
⎇. (vim)RepeatFind
}
"vim_mode == insert" {
⎈⠀c (vim)NormalBefore
⎈⠀⦋ (vim)NormalBefore
⎋ (vim)NormalBefore
⎈x #null
⎈x⎈o (editor)ShowCompletions
⎈x⎈a (assistant)InlineAssist //zed specific
⎈x⎈c (editor)ShowEditPrediction //zed specific
⎈x⎈l (editor)ToggleCodeActions //zed specific
⎈x⎈z (editor)Cancel
⎈x⎈e (vim)LineDown
⎈x⎈y (vim)LineUp
⎈⠀w (editor)DeleteToPreviousWordStart ignore_newlines=#false ignore_brackets=#false
⎈⠀u (editor)DeleteToBeginningOfLine
⎈⠀t (vim)Indent
⎈⠀d (vim)Outdent
⎈⠀y (vim)InsertFromAbove
⎈⠀e (vim)InsertFromBelow
⎈⠀k (vim)PushDigraph
⎈⠀v (vim)PushLiteral
⎈⇧v (editor)Paste // *very* similar to ⎈v in vim, but ⎈⇧v on linux is the typical shortcut for paste when ⎈v is already in use
⎈⠀q (vim)PushLiteral
⎈⇧q (vim)PushLiteral
⎈⠀r (vim)PushRegister
⎀ (vim)ToggleReplace
⎈⠀o (vim)TemporaryNormal
⎈⠀s (editor)ShowSignatureHelp
}
"showing_completions" {
⎈d (vim)ScrollDown
⎈u (vim)ScrollUp
⎈e (vim)LineDown
⎈y (vim)LineUp
}
"(vim_mode == normal || vim_mode == helix_normal) && !menu" {
⎋ (editor)Cancel
⇧d (vim)DeleteToEndOfLine
⇧j (vim)JoinLines
⇧y (vim)YankLine
⇧i (vim)InsertFirstNonWhitespace
⇧a (vim)InsertEndOfLine
o (vim)InsertLineBelow
⇧o (vim)InsertLineAbove
~ (vim)ChangeCase
⎈a (vim)Increment
⎈x (vim)Decrement
p (vim)Paste
⇧p (vim)Paste before=#true
u (vim)Undo
⇧u (vim)UndoLastLine
r (vim)PushReplace
s (vim)Substitute
⇧s (vim)SubstituteLine
⇧' (vim)PushRegister
⎈⇟ (pane)ActivateNextItem
⎈⇞ (pane)ActivatePreviousItem
}
"vim_mode == helix_normal && !menu" {
i (vim)HelixInsert
a (vim)HelixAppend
⎈⦋ (editor)Cancel
}
"(vim_mode == helix_normal || vim_mode == helix_select) && !menu" {
// Movement
h (vim)WrappingLeft
◀ (vim)WrappingLeft
l (vim)WrappingRight
▶ (vim)WrappingRight
t (vim)PushFindForward before=#true multiline=#true
f (vim)PushFindForward before=#false multiline=#true
⇧t (vim)PushFindBackward after=#true multiline=#true
⇧f (vim)PushFindBackward after=#false multiline=#true
⎇. (vim)RepeatFind
// Changes
⇧r (editor)Paste
` (vim)ConvertToLowerCase
⎇` (vim)ConvertToUpperCase
⎀ (vim)InsertBefore
⇧u (editor)Redo
⎈r (vim)Redo
y (vim)HelixYank
p (vim)HelixPaste
⇧p (vim)HelixPaste before=#true
⇧. (vim)Indent
⇧, (vim)Outdent
≗ (vim)AutoIndent
d (vim)HelixDelete
c (vim)HelixSubstitute
⎇c (vim)HelixSubstituteNoYank
// Selection manipulation
s (vim)HelixSelectRegex
⎇s (editor)SplitSelectionIntoLines keep_selections=#true
; (vim)HelixCollapseSelection
⎇; (vim)OtherEnd
, (vim)HelixKeepNewestSelection
⇧c (vim)HelixDuplicateBelow
⇧⎇c (vim)HelixDuplicateAbove
⇧5 (editor)SelectAll
x (vim)HelixSelectLine
⇧x (editor)SelectLine
⎈c (editor)ToggleComments
⎇o (editor)SelectLargerSyntaxNode
⎇i (editor)SelectSmallerSyntaxNode
⎇p (editor)SelectPreviousSyntaxNode
⎇n (editor)SelectNextSyntaxNode
// Goto mode
ge (vim)EndOfDocument
gh (vim)StartOfLine
gl (vim)EndOfLine
gs (vim)FirstNonWhitespace //g⠀s ≝ is ␠⠀s
gt (vim)WindowTop
gc (vim)WindowMiddle
gb (vim)WindowBottom
gr (editor)FindAllReferences //zed specific
gn (pane)ActivateNextItem
⇧l (pane)ActivateNextItem
gp (pane)ActivatePreviousItem
⇧h (pane)ActivatePreviousItem
g. (vim)HelixGotoLastModification
// Window mode
␠wh (workspace)ActivatePaneLeft
␠wl (workspace)ActivatePaneRight
␠wk (workspace)ActivatePaneUp
␠wj (workspace)ActivatePaneDown
␠wq (pane)CloseActiveItem
␠ws (pane)SplitRight
␠wr (pane)SplitRight
␠wv (pane)SplitDown
␠wd (pane)SplitDown
// Space mode
␠⠀f (file_finder)Toggle
␠⠀k (editor)Hover
␠⠀s (outline)Toggle
␠⇧s (project_symbols)Toggle
␠⠀d (editor)GoToDiagnostic
␠⠀r (editor)Rename
␠⠀a (editor)ToggleCodeActions
␠⠀h (editor)SelectAllMatches
␠⠀c (editor)ToggleComments
␠⠀p (editor)Paste
␠⠀y (editor)Copy
// Other
⇧; (command_palette)Toggle
m (vim)PushHelixMatch
⦌ (vim)PushHelixNext around=#true
⦋ (vim)PushHelixPrevious around=#true
gq (vim)PushRewrap
gw (vim)PushRewrap
/-⭾ (pane)ActivateNextItem
/-⇧⭾ (pane)ActivatePrevItem
}
"vim_mode == insert && !(showing_code_actions || showing_completions)" {
⎈p (editor)ShowWordCompletions
⎈n (editor)ShowWordCompletions
}
"(vim_mode == insert || vim_mode == normal) && showing_signature_help && !showing_completions" {
⎈p (editor)SignatureHelpPrevious
⎈n (editor)SignatureHelpNext
}
"vim_mode == replace" {
⎈c (vim)NormalBefore
⎈⦋ (vim)NormalBefore
⎋ (vim)NormalBefore
⎈k (vim)PushDigraph
⎈v (vim)PushLiteral
⎈⇧v (editor)Paste // *very* similar to ⎈v in vim, but ⎈⇧v on linux is the typical shortcut for paste when ⎈v is already in use.
⎈q (vim)PushLiteral
⎈⇧q (vim)PushLiteral
⌫ (vim)UndoReplace
⭾ (vim)Tab
⏎ (vim)Enter
⎀ (vim)InsertBefore
}
"vim_mode == waiting" {
⭾ (vim)Tab
⏎ (vim)Enter
⎈c (vim)ClearOperators
⎈⦋ (vim)ClearOperators
⎋ (vim)ClearOperators
⎈k (vim)PushDigraph
⎈v (vim)PushLiteral
⎈q (vim)PushLiteral
}
"Editor && vim_mode == waiting && (vim_operator == ys || vim_operator == cs)" {
⎋ (vim)SwitchToNormalMode
}
"vim_mode == operator" {
⎈c (vim)ClearOperators
⎈⦋ (vim)ClearOperators
⎋ (vim)ClearOperators
gc (vim)Comment
}
"vim_operator == a || vim_operator == i || vim_operator == cs || vim_operator == helix_next || vim_operator == helix_previous" {
w (vim)Word
⇧w (vim)Word ignore_punctuation=#true
// Subword TextObject
/-w (vim)Subword
/-⇧w (vim)Subword ignore_punctuation=#true
t (vim)Tag
s (vim)Sentence
p (vim)Paragraph
' (vim)Quotes
` (vim)BackQuotes
⇧' (vim)DoubleQuotes
/-q (vim)AnyQuotes
q (vim)MiniQuotes
⇧⧵ (vim)VerticalBars
⇧9 (vim)Parentheses opening=#true
⇧0 (vim)Parentheses
b (vim)Parentheses
/-b (vim)AnyBrackets
/-b (vim)MiniBrackets
⦋ (vim)SquareBrackets opening=#true
⦌ (vim)SquareBrackets
r (vim)SquareBrackets
⇧⦋ (vim)CurlyBrackets opening=#true
⇧⦌ (vim)CurlyBrackets
⇧b (vim)CurlyBrackets
⇧, (vim)AngleBrackets opening=#true
⇧. (vim)AngleBrackets
a (vim)Argument
i (vim)IndentObj
⇧i (vim)IndentObj include_below=#true
f (vim)Method
c (vim)Class
e (vim)EntireFile
}
"vim_operator == helix_m" {
m (vim)Matching
}
"vim_operator == helix_next" {
z (vim)NextSectionStart
⇧z (vim)NextSectionEnd
⇧8 (vim)NextComment
⁄ (vim)NextComment
- (vim)NextLesserIndent
⇧≗ (vim)NextGreaterIndent
≗ (vim)NextSameIndent
b (pane)ActivateNextItem
⇧b (pane)ActivateLastItem
x (editor)SelectSmallerSyntaxNode
d (editor)GoToDiagnostic
c (editor)GoToHunk
␠ (vim)InsertEmptyLineBelow
}
"vim_operator == helix_previous" {
z (vim)PreviousSectionStart
⇧z (vim)PreviousSectionEnd
⇧8 (vim)PreviousComment
⁄ (vim)PreviousComment
- (vim)PreviousLesserIndent
⇧≗ (vim)PreviousGreaterIndent
≗ (vim)PreviousSameIndent
b (pane)ActivatePreviousItem
⇧b (pane)ActivateItem 0
x (editor)SelectLargerSyntaxNode
d (editor)GoToPreviousDiagnostic
c (editor)GoToPreviousHunk
␠ (vim)InsertEmptyLineAbove
}
"vim_operator == c" {
c (vim)CurrentLine
x (vim)Exchange
d (editor)Rename //zed specific
s (vim)PushChangeSurrounds
}
"vim_operator == d" {
d (vim)CurrentLine
s (vim)PushDeleteSurrounds
v (vim)PushForcedMotion //d⠀v
o (editor)ToggleSelectedDiffHunks //d⠀o
⇧o (git)ToggleStaged
p (git)Restore //d⠀p
u (git)StageAndNext //d⠀u
⇧u (git)UnstageAndNext //d⠀⇧u
}
"vim_operator == gu" {g⠀u (vim)CurrentLine; u (vim)CurrentLine}
"vim_operator == gU" {g⇧u (vim)CurrentLine; ⇧u (vim)CurrentLine}
"vim_operator == g~" {g⇧` (vim)CurrentLine; ⇧` (vim)CurrentLine}
"vim_operator == g?" {g⇧⁄ (vim)CurrentLine; ⇧⁄ (vim)CurrentLine}
"vim_operator == gq" {g⠀q (vim)CurrentLine; q (vim)CurrentLine
g⠀w (vim)CurrentLine; w (vim)CurrentLine}
"vim_operator == y" { y (vim)CurrentLine
v (vim)PushForcedMotion
s (vim)PushAddSurrounds}
"vim_operator == ys" { s (vim)CurrentLine}
"vim_operator == >" {⇧. (vim)CurrentLine}
"vim_operator == <" {⇧, (vim)CurrentLine}
"vim_operator == eq" {≗ (vim)CurrentLine}
"vim_operator == sh" {⇧1 (vim)CurrentLine}
"vim_operator == gc" { c (vim)CurrentLine}
"vim_operator == gR" { r (vim)CurrentLine; ⇧r (vim)CurrentLine}
"vim_operator == cx" { x (vim)CurrentLine; c (vim)ClearExchange}
"vim_mode == literal" {
⎈@ (vim)Literal ⎈@ "\u{0000}"
⎈a (vim)Literal ⎈a "\u{0001}"
⎈b (vim)Literal ⎈b "\u{0002}"
⎈c (vim)Literal ⎈c "\u{0003}"
⎈d (vim)Literal ⎈d "\u{0004}"
⎈e (vim)Literal ⎈e "\u{0005}"
⎈f (vim)Literal ⎈f "\u{0006}"
⎈g (vim)Literal ⎈g "\u{0007}"
⎈h (vim)Literal ⎈h "\u{0008}"
⎈i (vim)Literal ⎈i "\u{0009}"
⎈j (vim)Literal ⎈j "\u{000A}"
⎈k (vim)Literal ⎈k "\u{000B}"
⎈l (vim)Literal ⎈l "\u{000C}"
⎈m (vim)Literal ⎈m "\u{000D}"
⎈n (vim)Literal ⎈n "\u{000E}"
⎈o (vim)Literal ⎈o "\u{000F}"
⎈p (vim)Literal ⎈p "\u{0010}"
⎈q (vim)Literal ⎈q "\u{0011}"
⎈r (vim)Literal ⎈r "\u{0012}"
⎈s (vim)Literal ⎈s "\u{0013}"
⎈t (vim)Literal ⎈t "\u{0014}"
⎈u (vim)Literal ⎈u "\u{0015}"
⎈v (vim)Literal ⎈v "\u{0016}"
⎈w (vim)Literal ⎈w "\u{0017}"
⎈x (vim)Literal ⎈x "\u{0018}"
⎈y (vim)Literal ⎈y "\u{0019}"
⎈z (vim)Literal ⎈z "\u{001A}"
⎈⦋ (vim)Literal "⎈[" "\u{001B}"
⎈⧵ (vim)Literal #"⎈\"# "\u{001C}"
⎈⦌ (vim)Literal "⎈]" "\u{001D}"
⎈^ (vim)Literal ⎈^ "\u{001E}"
⎈_ (vim)Literal ⎈_ "\u{001F}"
⎋ (vim)Literal escape "\u{001B}"
⏎ (vim)Literal enter "\u{000D}"
⭾ (vim)Literal tab "\u{0009}"
// Zed extensions .
⌫ (vim)Literal backspace "\u{0008}"
⌦ (vim)Literal delete "\u{007F} "
}
"BufferSearchBar && !in_replace" {
⏎ (vim)SearchSubmit
⎋ (buffer_search)Dismiss
}
"VimControl && !menu || !Editor && !Terminal" {
// window related minor mode (⎈w X)
⎈w #null
⎈w⠀◀ (workspace)ActivatePaneLeft
⎈w⠀▶ (workspace)ActivatePaneRight
⎈w⠀▲ (workspace)ActivatePaneUp
⎈w⠀▼ (workspace)ActivatePaneDown
⎈w⎈h (workspace)ActivatePaneLeft
⎈w⎈l (workspace)ActivatePaneRight
⎈w⎈k (workspace)ActivatePaneUp
⎈w⎈j (workspace)ActivatePaneDown
⎈w⠀h (workspace)ActivatePaneLeft
⎈w⠀l (workspace)ActivatePaneRight
⎈w⠀k (workspace)ActivatePaneUp
⎈w⠀j (workspace)ActivatePaneDown
⎈w⇧◀ (workspace)SwapPaneLeft
⎈w⇧▶ (workspace)SwapPaneRight
⎈w⇧▲ (workspace)SwapPaneUp
⎈w⇧▼ (workspace)SwapPaneDown
⎈w⇧h (workspace)MovePaneLeft
⎈w⇧l (workspace)MovePaneRight
⎈w⇧k (workspace)MovePaneUp
⎈w⇧j (workspace)MovePaneDown
⎈w⇧, (vim)ResizePaneRight
⎈w⇧. (vim)ResizePaneLeft
⎈w⠀- (vim)ResizePaneDown
⎈w⠀+ (vim)ResizePaneUp
⎈w⇧- (vim)MaximizePane
⎈w⠀≗ (vim)ResetPaneSizes
⎈w⠀g⠀t (pane)ActivateNextItem
⎈w⎈g⠀t (pane)ActivateNextItem
⎈w⠀g⇧t (pane)ActivatePreviousItem
⎈w⎈g⇧t (pane)ActivatePreviousItem
⎈w⠀w (workspace)ActivateNextPane
⎈w⎈w (workspace)ActivateNextPane
⎈w⠀p (workspace)ActivatePreviousPane
⎈w⎈p (workspace)ActivatePreviousPane
⎈w⇧w (workspace)ActivatePreviousPane
⎈w⎈⇧w (workspace)ActivatePreviousPane
⎈w⎈v (pane)SplitVertical
⎈w⠀v (pane)SplitVertical
⎈w⇧s (pane)SplitHorizontal
⎈w⎈s (pane)SplitHorizontal
⎈w⠀s (pane)SplitHorizontal
⎈w⎈c (pane)CloseActiveItem
⎈w⠀c (pane)CloseActiveItem
⎈w⎈q (pane)CloseActiveItem
⎈w⠀q (pane)CloseActiveItem
⎈w⎈a (pane)CloseAllItems
⎈w⠀a (pane)CloseAllItems
⎈w⎈o (workspace)CloseInactiveTabsAndPanes
⎈w⠀o (workspace)CloseInactiveTabsAndPanes
⎈w⎈n (workspace)NewFileSplitHorizontal
⎈w⠀n (workspace)NewFileSplitHorizontal
g⠀t (vim)GoToTab
g⇧t (vim)GoToPreviousTab
}
"!Editor && !Terminal" {
⇧; (command_palette)Toggle
g⁄ (pane)DeploySearch
}
"ProjectPanel && not_editing" {
// netrw compatibility
⇧; (command_palette)Toggle
⇧5 (project_panel)NewFile
⁄ (project_panel)NewSearchInDirectory
d (project_panel)NewDirectory
⏎ (project_panel)OpenPermanent
⎋ (vim)ToggleProjectPanelFocus
h (project_panel)CollapseSelectedEntry
j (vim)MenuSelectNext
k (vim)MenuSelectPrevious
▼ (vim)MenuSelectNext
▲ (vim)MenuSelectPrevious
l (project_panel)ExpandSelectedEntry
⇧d (project_panel)Delete
⇧r (project_panel)Rename
t (project_panel)OpenPermanent
v (project_panel)OpenSplitVertical
o (project_panel)OpenSplitHorizontal
p (project_panel)Open
x (project_panel)RevealInFileManager
s (workspace)OpenWithSystem
zd (project_panel)CompareMarkedFiles
⦌c (project_panel)SelectNextGitEntry
⦋c (project_panel)SelectPrevGitEntry
⦌d (project_panel)SelectNextDiagnostic
⦋d (project_panel)SelectPrevDiagnostic
⇧⦌ (project_panel)SelectNextDirectory
⇧⦋ (project_panel)SelectPrevDirectory
⇧g (menu)SelectLast
gg (menu)SelectFirst
- (project_panel)SelectParent
⎈u (project_panel)ScrollUp
⎈d (project_panel)ScrollDown
zt (project_panel)ScrollCursorTop
zz (project_panel)ScrollCursorCenter
zb (project_panel)ScrollCursorBottom
№0 (vim)Number 0
№1 (vim)Number 1
№2 (vim)Number 2
№3 (vim)Number 3
№4 (vim)Number 4
№5 (vim)Number 5
№6 (vim)Number 6
№7 (vim)Number 7
№8 (vim)Number 8
№9 (vim)Number 9
"OutlinePanel && not_editing" {
j (menu)SelectNext
k (menu)SelectPrevious
⇧g (menu)SelectLast
gg (menu)SelectFirst
}
"GitPanel && ChangesList" {
k (menu)SelectPrevious
j (menu)SelectNext
gg (menu)SelectFirst
⇧g (menu)SelectLast
gf (menu)Confirm
i (git_panel)FocusEditor
x (git)ToggleStaged
⇧x (git)StageAll
gx (git)StageRange
⇧u (git)UnstageAll
}
"Editor && mode == auto_height && VimControl" {
// TODO: Implement search
⁄ #null
⇧8 #null
⇧3 #null
⇧⁄ #null
n #null
⇧n #null
}
"Picker > Editor" {
⎈h (editor)Backspace
⎈u (editor)DeleteToBeginningOfLine
⎈w (editor)DeleteToPreviousWordStart
}
"GitCommit > Editor && VimControl && vim_mode == normal" {
⎈c (menu)Cancel
⎋ (menu)Cancel
}
"Editor && edit_prediction"\
// identical to the binding in the base keymap, but the vim bindings above to `(vim)Tab` shadow it, so it needs to be bound again. */
⭾ (editor)AcceptEditPrediction
}
"MessageEditor > Editor && VimControl" {
⏎ (agent)Chat
}
"os != macos && Editor && edit_prediction_conflict" {
⎇l (editor)AcceptEditPrediction // provided as an alternative to tab/⎇tab. and will be displayed in the UI. This is because ⎇tab may not be available, as it is often used for window switching on Linux and Windows.
}
/*
≗⠀;⧵⦋⦌␈⌫␡⌦⇧◆❖⌘⎇⎈⎀⏎⭾
"Find and Dequote"
[^\n]"[^\\]
\t\"([^\s\[\]\;\/]+) ([^\s\[\]\;\/]+)\"
\t\"([^\s\[\]\;\/\"⦌+) ([^\s\[\]\;\/\"⦌+) ([^\s\[\]\;\/\"⦌+)\"
Types (\w+):: \($1\)
*/
"VimControl && !menu" {
// '⠀' braile non-whitespace used mostly for alignment
// ⦋⠀b (pane)ActivatePreviousItem
// ⦌⇧b (pane)ActivateLastItem
// since symbols resolve conflicts like is 'ge' '>' or 'g e'? It's '⇧,' or '<'
// But could also resolve ambiguity and force a sequence
/-_ {(vim)PushObject around=#false; (vim)Up} // command sequence = nested nodes
i (vim)PushObject around=#false
a (vim)PushObject around=#true
⌫ (vim)WrappingLeft
▲ (vim)Up
k (vim)Up
▼ (vim)Down
j (vim)Down
⎈j (vim)Down
◀ (vim)Left
h (vim)Left
▶ (vim)Right
l (vim)Right
⎈m (vim)NextLineStart
⇧≗ (vim)NextLineStart
⏎ (vim)NextLineStart
- (vim)PreviousLineStart
⭾ (vim)Tab
⇧⭾ (vim)Tab
␠ (vim)WrappingRight
⇥ (vim)EndOfLine
⇧4 (vim)EndOfLine
⇧6 (vim)FirstNonWhiteSpace
⇧- (vim)StartOfLineDownward
g⇧- (vim)EndOfLineDownward
⇧g (vim)EndOfDocument
⇧⦋ (vim)StartOfParagraph
⇧⦌ (vim)EndOfParagraph
⇧9 (vim)SentenceBackward
⇧0 (vim)SentenceForward
⇧⧵ (vim)GoToColumn
// Word motions
w (vim)NextWordStart
e (vim)NextWordEnd
b (vim)PreviousWordStart
ge (vim)PreviousWordEnd
// Subword motions
/- w (vim)NextSubwordStart
/- b (vim)PreviousSubwordStart
/- e (vim)NextSubwordEnd
/-ge (vim)PreviousSubwordEnd
⇧w (vim)NextWordStart ignore_punctuation=#true
⇧e (vim)NextWordEnd ignore_punctuation=#true
⇧b (vim)PreviousWordStart ignore_punctuation=#true
g⇧e (vim)PreviousWordEnd ignore_punctuation=#true
⁄ (vim)Search
g⁄ (pane)DeploySearch
⇧⁄ (vim)Search backwards=#true
⇧8 (vim)MoveToNext
⇧3 (vim)MoveToPrevious
n (vim)MoveToNextMatch
⇧n (vim)MoveToPreviousMatch
⇧5 (vim)Matching
f (vim)PushFindForward before=#false multiline=#false
t (vim)PushFindForward before=#true multiline=#false
⇧f (vim)PushFindBackward after=#false multiline=#false
⇧t (vim)PushFindBackward after=#true multiline=#false
m (vim)PushMark
' (vim)PushJump line=#true
` (vim)PushJump line=#false
; (vim)RepeatFind
, (vim)RepeatFindReversed
⎈o (pane)GoBack
⎈i (pane)GoForward
⎈⦌ (editor)GoToDefinition
⎋ (vim)SwitchToNormalMode
⎈⦋ (vim)SwitchToNormalMode
v (vim)ToggleVisual
⇧v (vim)ToggleVisualLine
⎈g (vim)ShowLocation
⎈v (vim)ToggleVisualBlock
⎈q (vim)ToggleVisualBlock
⇧k (editor)Hover
⇧r (vim)ToggleReplace
№0 (vim)StartOfLine
⇤ (vim)StartOfLine
⎈f (vim)PageDown
⇟ (vim)PageDown
⎈b (vim)PageUp
⇞ (vim)PageUp
⎈d (vim)ScrollDown
⎈u (vim)ScrollUp
⎈e (vim)LineDown
⎈y (vim)LineUp
// g minor mode
g⇧r (vim)PushReplaceWithRegister
g⠀rn (editor)Rename
g⠀rr (editor)FindAllReferences
g⠀ri (editor)GoToImplementation
g⠀ra (editor)ToggleCodeActions
g⠀g (vim)StartOfDocument
g⠀h (editor)Hover
g⇧b (editor)BlameHover
g⠀d (editor)GoToDefinition
g⇧d (editor)GoToDeclaration
g⠀y (editor)GoToTypeDefinition
g⇧i (editor)GoToImplementation
g⠀x (editor)OpenUrl
g⠀f (editor)OpenSelectedFilename
g⠀n (vim)SelectNextMatch
g⇧n (vim)SelectPreviousMatch
g⠀l (vim)SelectNext
g⇧l (vim)SelectPrevious
g⇧. (editor)SelectNext replace_newest=#true
g⇧, (editor)SelectPrevious replace_newest=#true
g⠀a (editor)SelectAllMatches
g⠀s (outline)Toggle
g⇧o (outline)Toggle
g⇧s (project_symbols)Toggle
g⠀. (editor)ToggleCodeActions //zed specific
g⇧a (editor)FindAllReferences //zed specific
g⠀␠ (editor)OpenExcerpts //zed specific
g⇧8 (vim)MoveToNext partial_word=#true
g⇧3 (vim)MoveToPrevious partial_word=#true
g⠀j (vim)Down display_lines=#true
g⠀▼ (vim)Down display_lines=#true
g⠀k (vim)Up display_lines=#true
g⠀▲ (vim)Up display_lines=#true
g⇧4 (vim)EndOfLine display_lines=#true
g⠀⇤ (vim)EndOfLine display_lines=#true
g⠀0 (vim)StartOfLine display_lines=#true
g⇥ (vim)StartOfLine display_lines=#true
g⇧m (vim)MiddleOfLine display_lines=#true
g⠀^ (vim)FirstNonWhiteSpace display_lines=#true
g⠀v (vim)RestoreVisualSelection
g⠀⦌ (editor)GoToDiagnostic
g⠀⦋ (editor)GoToPreviousDiagnostic
g⠀i (vim)InsertAtPrevious
g⠀, (vim)ChangeListNewer
g⠀; (vim)ChangeListOlder
⇧h (vim)WindowTop
⇧m (vim)WindowMiddle
⇧l (vim)WindowBottom
q (vim)ToggleRecord
⇧q (vim)ReplayLastRecording
⇧2 (vim)PushReplayRegister
// z minor mode
z⠀⏎ (workspace)SendKeystrokes "z t ^"
z⠀- (workspace)SendKeystrokes "z b ^"
z⠀^ (workspace)SendKeystrokes "⇧h k z b ^"
z⠀+ (workspace)SendKeystrokes "⇧l j z t ^"
z⠀t (editor)ScrollCursorTop
z⠀z (editor)ScrollCursorCenter
z⠀. (workspace)SendKeystrokes "z z ^"
z⠀b (editor)ScrollCursorBottom
z⠀a (editor)ToggleFold
z⇧a (editor)ToggleFoldRecursive
z⠀c (editor)Fold
z⇧c (editor)FoldRecursive
z⠀o (editor)UnfoldLines
z⇧o (editor)UnfoldRecursive
z⠀f (editor)FoldSelectedRanges
z⇧m (editor)FoldAll
z⇧r (editor)UnfoldAll
z⠀l (vim)ColumnRight
z⠀h (vim)ColumnLeft
z⇧l (vim)HalfPageRight
z⇧h (vim)HalfPageLeft
⇧z⇧q (pane)CloseActiveItem save_intent=skip
⇧z⇧z (pane)CloseActiveItem save_intent=save_all
// Count support
№1 (vim)Number 1
№2 (vim)Number 2
№3 (vim)Number 3
№4 (vim)Number 4
№5 (vim)Number 5
№6 (vim)Number 6
№7 (vim)Number 7
№8 (vim)Number 8
№9 (vim)Number 9
⎈w⠀d (editor)GoToDefinitionSplit
⎈wgd (editor)GoToDefinitionSplit
⎈w⠀⦌ (editor)GoToDefinitionSplit
⎈w⎈⦌ (editor)GoToDefinitionSplit
⎈w⠀⇧d (editor)GoToTypeDefinitionSplit
⎈wg⇧d (editor)GoToTypeDefinitionSplit
⎈w⠀␠ (editor)OpenExcerptsSplit
⎈wg␠ (editor)OpenExcerptsSplit
⎈6 (pane)AlternateFile
⎈^ (pane)AlternateFile
. (vim)Repeat
}
"vim_mode == normal || vim_mode == visual || vim_mode == operator" {
⦌⠀⦌ (vim)NextSectionStart
⦌⠀⦋ (vim)NextSectionEnd
⦋⠀⦋ (vim)PreviousSectionStart
⦋⠀⦌ (vim)PreviousSectionEnd
⦌⠀m (vim)NextMethodStart
⦌⇧m (vim)NextMethodEnd
⦋⠀m (vim)PreviousMethodStart
⦋⇧m (vim)PreviousMethodEnd
⦋⠀∗ (vim)PreviousComment
⦋⠀⁄ (vim)PreviousComment
⦌⠀∗ (vim)NextComment
⦌⠀⁄ (vim)NextComment
⦋⠀- (vim)PreviousLesserIndent
⦋⠀+ (vim)PreviousGreaterIndent
⦋⠀≗ (vim)PreviousSameIndent
⦌⠀- (vim)NextLesserIndent
⦌⠀+ (vim)NextGreaterIndent
⦌⠀≗ (vim)NextSameIndent
⦌⠀b (pane)ActivateNextItem
⦋⠀b (pane)ActivatePreviousItem
⦌⇧b (pane)ActivateLastItem
⦋⇧b (pane)ActivateItem 0
⦌⠀␠ (vim)InsertEmptyLineBelow
⦋⠀␠ (vim)InsertEmptyLineAbove
⦋⠀e (editor)MoveLineUp
⦌⠀e (editor)MoveLineDown
⦋⠀f (workspace)FollowNextCollaborator
⦌⠀f (workspace)FollowNextCollaborator
⦌⇧⦌ (vim)UnmatchedForward char="}"
⦋⇧⦋ (vim)UnmatchedBackward char="{"
⦌⇧9 (vim)UnmatchedForward char=")"
⦋⇧0 (vim)UnmatchedBackward char="("
// Tree-Sitter related commands
⦋⠀x (vim)SelectLargerSyntaxNode
⦌⠀x (vim)SelectSmallerSyntaxNode
}
"vim_mode == normal" {
i (vim)InsertBefore
a (vim)InsertAfter
⎈⦋ (editor)Cancel
⇧; (command_palette)Toggle
c (vim)PushChange
⇧c (vim)ChangeToEndOfLine
d (vim)PushDelete
⌦ (vim)DeleteRight
g⇧j (vim)JoinLinesNoWhitespace
y (vim)PushYank
⇧y (vim)YankLine
x (vim)DeleteRight
⇧x (vim)DeleteLeft
⎈a (vim)Increment
⎈x (vim)Decrement
⎈r (vim)Redo
⇧. (vim)PushIndent
⇧, (vim)PushOutdent
≗ (vim)PushAutoIndent
⇧1 (vim)PushShellCommand
g⠀u (vim)PushLowercase
g⇧u (vim)PushUppercase
g⠀~ (vim)PushOppositeCase
g⇧⁄ (vim)PushRot13
/-g⇧⁄ (vim)PushRot47
g⠀w (vim)PushRewrap
g⠀q (vim)PushRewrap
⎀ (vim)InsertBefore
⦌⠀d (editor)GoToDiagnostic
⦋⠀d (editor)GoToPreviousDiagnostic
⦌⠀c (editor)GoToHunk
⦋⠀c (editor)GoToPreviousHunk
g⠀c (vim)PushToggleComments
}
"VimControl && VimCount" {
№0 (vim)Number 0
⇧; (vim)CountCommand
⇧5 (vim)GoToPercentage
}
"vim_mode == visual" {
⇧; (vim)VisualCommand
u (vim)ConvertToLowerCase
⇧u (vim)ConvertToUpperCase
⇧o (vim)OtherEnd
o (vim)OtherEndRowAware
d (vim)VisualDelete
x (vim)VisualDelete
⌦ (vim)VisualDelete
⇧d (vim)VisualDeleteLine
⇧x (vim)VisualDeleteLine
y (vim)VisualYank
⇧y (vim)VisualYankLine
p (vim)Paste
⇧p (vim)Paste preserve_clipboard=#true
c (vim)Substitute
s (vim)Substitute
⇧r (vim)SubstituteLine
⇧s (vim)SubstituteLine
~ (vim)ChangeCase
⇧8 (vim)MoveToNext partial_word=#true
⇧3 (vim)MoveToPrevious partial_word=#true
⎈a (vim)Increment
⎈x (vim)Decrement
g⎈a (vim)Increment step=#true
g⎈x (vim)Decrement step=#true
⇧i (vim)InsertBefore
⇧a (vim)InsertAfter
g⇧i (vim)VisualInsertFirstNonWhitespace
g⇧a (vim)VisualInsertEndOfLine
⇧j (vim)JoinLines
g⇧j (vim)JoinLinesNoWhitespace
r (vim)PushReplace
⎈c (vim)SwitchToNormalMode
⎈⦋ (vim)SwitchToNormalMode
⎋ (vim)SwitchToNormalMode
⇧. (vim)Indent
⇧, (vim)Outdent
≗ (vim)AutoIndent
⇧1 (vim)ShellCommand
i (vim)PushObject around=#false
a (vim)PushObject around=#true
g⇧r (vim)Paste preserve_clipboard=#true
g⠀c (vim)ToggleComments
g⠀q (vim)Rewrap
g⠀w (vim)Rewrap
g⇧⁄ (vim)ConvertToRot13
/-g⇧⁄ (vim)ConvertToRot47
⇧' (vim)PushRegister
}
"vim_mode == helix_select" {
v (vim)NormalBefore
; (vim)HelixCollapseSelection
~ (vim)ChangeCase
⎈a (vim)Increment
⎈x (vim)Decrement
⇧j (vim)JoinLines
i (vim)InsertBefore
a (vim)InsertAfter
p (vim)Paste
u (vim)Undo
r (vim)PushReplace
s (vim)Substitute
⎈⇞ (pane)ActivatePreviousItem
⎈⇟ (pane)ActivateNextItem
. (vim)Repeat
⎇. (vim)RepeatFind
}
"vim_mode == insert" {
⎈⠀c (vim)NormalBefore
⎈⠀⦋ (vim)NormalBefore
⎋ (vim)NormalBefore
⎈x #null
⎈x⎈o (editor)ShowCompletions
⎈x⎈a (assistant)InlineAssist //zed specific
⎈x⎈c (editor)ShowEditPrediction //zed specific
⎈x⎈l (editor)ToggleCodeActions //zed specific
⎈x⎈z (editor)Cancel
⎈x⎈e (vim)LineDown
⎈x⎈y (vim)LineUp
⎈⠀w (editor)DeleteToPreviousWordStart ignore_newlines=#false ignore_brackets=#false
⎈⠀u (editor)DeleteToBeginningOfLine
⎈⠀t (vim)Indent
⎈⠀d (vim)Outdent
⎈⠀y (vim)InsertFromAbove
⎈⠀e (vim)InsertFromBelow
⎈⠀k (vim)PushDigraph
⎈⠀v (vim)PushLiteral
⎈⇧v (editor)Paste // *very* similar to ⎈v in vim, but ⎈⇧v on linux is the typical shortcut for paste when ⎈v is already in use
⎈⠀q (vim)PushLiteral
⎈⇧q (vim)PushLiteral
⎈⠀r (vim)PushRegister
⎀ (vim)ToggleReplace
⎈⠀o (vim)TemporaryNormal
⎈⠀s (editor)ShowSignatureHelp
}
"showing_completions" {
⎈d (vim)ScrollDown
⎈u (vim)ScrollUp
⎈e (vim)LineDown
⎈y (vim)LineUp
}
"(vim_mode == normal || vim_mode == helix_normal) && !menu" {
⎋ (editor)Cancel
⇧d (vim)DeleteToEndOfLine
⇧j (vim)JoinLines
⇧y (vim)YankLine
⇧i (vim)InsertFirstNonWhitespace
⇧a (vim)InsertEndOfLine
o (vim)InsertLineBelow
⇧o (vim)InsertLineAbove
~ (vim)ChangeCase
⎈a (vim)Increment
⎈x (vim)Decrement
p (vim)Paste
⇧p (vim)Paste before=#true
u (vim)Undo
⇧u (vim)UndoLastLine
r (vim)PushReplace
s (vim)Substitute
⇧s (vim)SubstituteLine
⇧' (vim)PushRegister
⎈⇟ (pane)ActivateNextItem
⎈⇞ (pane)ActivatePreviousItem
}
"vim_mode == helix_normal && !menu" {
i (vim)HelixInsert
a (vim)HelixAppend
⎈⦋ (editor)Cancel
}
"(vim_mode == helix_normal || vim_mode == helix_select) && !menu" {
// Movement
h (vim)WrappingLeft
◀ (vim)WrappingLeft
l (vim)WrappingRight
▶ (vim)WrappingRight
t (vim)PushFindForward before=#true multiline=#true
f (vim)PushFindForward before=#false multiline=#true
⇧t (vim)PushFindBackward after=#true multiline=#true
⇧f (vim)PushFindBackward after=#false multiline=#true
⎇. (vim)RepeatFind
// Changes
⇧r (editor)Paste
` (vim)ConvertToLowerCase
⎇` (vim)ConvertToUpperCase
⎀ (vim)InsertBefore
⇧u (editor)Redo
⎈r (vim)Redo
y (vim)HelixYank
p (vim)HelixPaste
⇧p (vim)HelixPaste before=#true
⇧. (vim)Indent
⇧, (vim)Outdent
≗ (vim)AutoIndent
d (vim)HelixDelete
c (vim)HelixSubstitute
⎇c (vim)HelixSubstituteNoYank
// Selection manipulation
s (vim)HelixSelectRegex
⎇s (editor)SplitSelectionIntoLines keep_selections=#true
; (vim)HelixCollapseSelection
⎇; (vim)OtherEnd
, (vim)HelixKeepNewestSelection
⇧c (vim)HelixDuplicateBelow
⇧⎇c (vim)HelixDuplicateAbove
⇧5 (editor)SelectAll
x (vim)HelixSelectLine
⇧x (editor)SelectLine
⎈c (editor)ToggleComments
⎇o (editor)SelectLargerSyntaxNode
⎇i (editor)SelectSmallerSyntaxNode
⎇p (editor)SelectPreviousSyntaxNode
⎇n (editor)SelectNextSyntaxNode
// Goto mode
ge (vim)EndOfDocument
gh (vim)StartOfLine
gl (vim)EndOfLine
gs (vim)FirstNonWhitespace //g⠀s ≝ is ␠⠀s
gt (vim)WindowTop
gc (vim)WindowMiddle
gb (vim)WindowBottom
gr (editor)FindAllReferences //zed specific
gn (pane)ActivateNextItem
⇧l (pane)ActivateNextItem
gp (pane)ActivatePreviousItem
⇧h (pane)ActivatePreviousItem
g. (vim)HelixGotoLastModification
// Window mode
␠wh (workspace)ActivatePaneLeft
␠wl (workspace)ActivatePaneRight
␠wk (workspace)ActivatePaneUp
␠wj (workspace)ActivatePaneDown
␠wq (pane)CloseActiveItem
␠ws (pane)SplitRight
␠wr (pane)SplitRight
␠wv (pane)SplitDown
␠wd (pane)SplitDown
// Space mode
␠⠀f (file_finder)Toggle
␠⠀k (editor)Hover
␠⠀s (outline)Toggle
␠⇧s (project_symbols)Toggle
␠⠀d (editor)GoToDiagnostic
␠⠀r (editor)Rename
␠⠀a (editor)ToggleCodeActions
␠⠀h (editor)SelectAllMatches
␠⠀c (editor)ToggleComments
␠⠀p (editor)Paste
␠⠀y (editor)Copy
// Other
⇧; (command_palette)Toggle
m (vim)PushHelixMatch
⦌ (vim)PushHelixNext around=#true
⦋ (vim)PushHelixPrevious around=#true
gq (vim)PushRewrap
gw (vim)PushRewrap
/-⭾ (pane)ActivateNextItem
/-⇧⭾ (pane)ActivatePrevItem
}
"vim_mode == insert && !(showing_code_actions || showing_completions)" {
⎈p (editor)ShowWordCompletions
⎈n (editor)ShowWordCompletions
}
"(vim_mode == insert || vim_mode == normal) && showing_signature_help && !showing_completions" {
⎈p (editor)SignatureHelpPrevious
⎈n (editor)SignatureHelpNext
}
"vim_mode == replace" {
⎈c (vim)NormalBefore
⎈⦋ (vim)NormalBefore
⎋ (vim)NormalBefore
⎈k (vim)PushDigraph
⎈v (vim)PushLiteral
⎈⇧v (editor)Paste // *very* similar to ⎈v in vim, but ⎈⇧v on linux is the typical shortcut for paste when ⎈v is already in use.
⎈q (vim)PushLiteral
⎈⇧q (vim)PushLiteral
⌫ (vim)UndoReplace
⭾ (vim)Tab
⏎ (vim)Enter
⎀ (vim)InsertBefore
}
"vim_mode == waiting" {
⭾ (vim)Tab
⏎ (vim)Enter
⎈c (vim)ClearOperators
⎈⦋ (vim)ClearOperators
⎋ (vim)ClearOperators
⎈k (vim)PushDigraph
⎈v (vim)PushLiteral
⎈q (vim)PushLiteral
}
"Editor && vim_mode == waiting && (vim_operator == ys || vim_operator == cs)" {
⎋ (vim)SwitchToNormalMode
}
"vim_mode == operator" {
⎈c (vim)ClearOperators
⎈⦋ (vim)ClearOperators
⎋ (vim)ClearOperators
gc (vim)Comment
}
"vim_operator == a || vim_operator == i || vim_operator == cs || vim_operator == helix_next || vim_operator == helix_previous" {
w (vim)Word
⇧w (vim)Word ignore_punctuation=#true
// Subword TextObject
/-w (vim)Subword
/-⇧w (vim)Subword ignore_punctuation=#true
t (vim)Tag
s (vim)Sentence
p (vim)Paragraph
' (vim)Quotes
` (vim)BackQuotes
⇧' (vim)DoubleQuotes
/-q (vim)AnyQuotes
q (vim)MiniQuotes
⇧⧵ (vim)VerticalBars
⇧9 (vim)Parentheses opening=#true
⇧0 (vim)Parentheses
b (vim)Parentheses
/-b (vim)AnyBrackets
/-b (vim)MiniBrackets
⦋ (vim)SquareBrackets opening=#true
⦌ (vim)SquareBrackets
r (vim)SquareBrackets
⇧⦋ (vim)CurlyBrackets opening=#true
⇧⦌ (vim)CurlyBrackets
⇧b (vim)CurlyBrackets
⇧, (vim)AngleBrackets opening=#true
⇧. (vim)AngleBrackets
a (vim)Argument
i (vim)IndentObj
⇧i (vim)IndentObj include_below=#true
f (vim)Method
c (vim)Class
e (vim)EntireFile
}
"vim_operator == helix_m" {
m (vim)Matching
}
"vim_operator == helix_next" {
z (vim)NextSectionStart
⇧z (vim)NextSectionEnd
⇧8 (vim)NextComment
⁄ (vim)NextComment
- (vim)NextLesserIndent
⇧≗ (vim)NextGreaterIndent
≗ (vim)NextSameIndent
b (pane)ActivateNextItem
⇧b (pane)ActivateLastItem
x (editor)SelectSmallerSyntaxNode
d (editor)GoToDiagnostic
c (editor)GoToHunk
␠ (vim)InsertEmptyLineBelow
}
"vim_operator == helix_previous" {
z (vim)PreviousSectionStart
⇧z (vim)PreviousSectionEnd
⇧8 (vim)PreviousComment
⁄ (vim)PreviousComment
- (vim)PreviousLesserIndent
⇧≗ (vim)PreviousGreaterIndent
≗ (vim)PreviousSameIndent
b (pane)ActivatePreviousItem
⇧b (pane)ActivateItem 0
x (editor)SelectLargerSyntaxNode
d (editor)GoToPreviousDiagnostic
c (editor)GoToPreviousHunk
␠ (vim)InsertEmptyLineAbove
}
"vim_operator == c" {
c (vim)CurrentLine
x (vim)Exchange
d (editor)Rename //zed specific
s (vim)PushChangeSurrounds
}
"vim_operator == d" {
d (vim)CurrentLine
s (vim)PushDeleteSurrounds
v (vim)PushForcedMotion //d⠀v
o (editor)ToggleSelectedDiffHunks //d⠀o
⇧o (git)ToggleStaged
p (git)Restore //d⠀p
u (git)StageAndNext //d⠀u
⇧u (git)UnstageAndNext //d⠀⇧u
}
"vim_operator == gu" {g⠀u (vim)CurrentLine; u (vim)CurrentLine}
"vim_operator == gU" {g⇧u (vim)CurrentLine; ⇧u (vim)CurrentLine}
"vim_operator == g~" {g⇧` (vim)CurrentLine; ⇧` (vim)CurrentLine}
"vim_operator == g?" {g⇧⁄ (vim)CurrentLine; ⇧⁄ (vim)CurrentLine}
"vim_operator == gq" {g⠀q (vim)CurrentLine; q (vim)CurrentLine
g⠀w (vim)CurrentLine; w (vim)CurrentLine}
"vim_operator == y" { y (vim)CurrentLine
v (vim)PushForcedMotion
s (vim)PushAddSurrounds}
"vim_operator == ys" { s (vim)CurrentLine}
"vim_operator == >" {⇧. (vim)CurrentLine}
"vim_operator == <" {⇧, (vim)CurrentLine}
"vim_operator == eq" {≗ (vim)CurrentLine}
"vim_operator == sh" {⇧1 (vim)CurrentLine}
"vim_operator == gc" { c (vim)CurrentLine}
"vim_operator == gR" { r (vim)CurrentLine; ⇧r (vim)CurrentLine}
"vim_operator == cx" { x (vim)CurrentLine; c (vim)ClearExchange}
"vim_mode == literal" {
⎈@ (vim)Literal ⎈@ "\u{0000}"
⎈a (vim)Literal ⎈a "\u{0001}"
⎈b (vim)Literal ⎈b "\u{0002}"
⎈c (vim)Literal ⎈c "\u{0003}"
⎈d (vim)Literal ⎈d "\u{0004}"
⎈e (vim)Literal ⎈e "\u{0005}"
⎈f (vim)Literal ⎈f "\u{0006}"
⎈g (vim)Literal ⎈g "\u{0007}"
⎈h (vim)Literal ⎈h "\u{0008}"
⎈i (vim)Literal ⎈i "\u{0009}"
⎈j (vim)Literal ⎈j "\u{000A}"
⎈k (vim)Literal ⎈k "\u{000B}"
⎈l (vim)Literal ⎈l "\u{000C}"
⎈m (vim)Literal ⎈m "\u{000D}"
⎈n (vim)Literal ⎈n "\u{000E}"
⎈o (vim)Literal ⎈o "\u{000F}"
⎈p (vim)Literal ⎈p "\u{0010}"
⎈q (vim)Literal ⎈q "\u{0011}"
⎈r (vim)Literal ⎈r "\u{0012}"
⎈s (vim)Literal ⎈s "\u{0013}"
⎈t (vim)Literal ⎈t "\u{0014}"
⎈u (vim)Literal ⎈u "\u{0015}"
⎈v (vim)Literal ⎈v "\u{0016}"
⎈w (vim)Literal ⎈w "\u{0017}"
⎈x (vim)Literal ⎈x "\u{0018}"
⎈y (vim)Literal ⎈y "\u{0019}"
⎈z (vim)Literal ⎈z "\u{001A}"
⎈⦋ (vim)Literal "⎈[" "\u{001B}"
⎈⧵ (vim)Literal #"⎈\"# "\u{001C}"
⎈⦌ (vim)Literal "⎈]" "\u{001D}"
⎈^ (vim)Literal ⎈^ "\u{001E}"
⎈_ (vim)Literal ⎈_ "\u{001F}"
⎋ (vim)Literal escape "\u{001B}"
⏎ (vim)Literal enter "\u{000D}"
⭾ (vim)Literal tab "\u{0009}"
// Zed extensions .
⌫ (vim)Literal backspace "\u{0008}"
⌦ (vim)Literal delete "\u{007F} "
}
"BufferSearchBar && !in_replace" {
⏎ (vim)SearchSubmit
⎋ (buffer_search)Dismiss
}
"VimControl && !menu || !Editor && !Terminal" {
// window related minor mode (⎈w X)
⎈w #null
⎈w⠀◀ (workspace)ActivatePaneLeft
⎈w⠀▶ (workspace)ActivatePaneRight
⎈w⠀▲ (workspace)ActivatePaneUp
⎈w⠀▼ (workspace)ActivatePaneDown
⎈w⎈h (workspace)ActivatePaneLeft
⎈w⎈l (workspace)ActivatePaneRight
⎈w⎈k (workspace)ActivatePaneUp
⎈w⎈j (workspace)ActivatePaneDown
⎈w⠀h (workspace)ActivatePaneLeft
⎈w⠀l (workspace)ActivatePaneRight
⎈w⠀k (workspace)ActivatePaneUp
⎈w⠀j (workspace)ActivatePaneDown
⎈w⇧◀ (workspace)SwapPaneLeft
⎈w⇧▶ (workspace)SwapPaneRight
⎈w⇧▲ (workspace)SwapPaneUp
⎈w⇧▼ (workspace)SwapPaneDown
⎈w⇧h (workspace)MovePaneLeft
⎈w⇧l (workspace)MovePaneRight
⎈w⇧k (workspace)MovePaneUp
⎈w⇧j (workspace)MovePaneDown
⎈w⇧, (vim)ResizePaneRight
⎈w⇧. (vim)ResizePaneLeft
⎈w⠀- (vim)ResizePaneDown
⎈w⠀+ (vim)ResizePaneUp
⎈w⇧- (vim)MaximizePane
⎈w⠀≗ (vim)ResetPaneSizes
⎈w⠀g⠀t (pane)ActivateNextItem
⎈w⎈g⠀t (pane)ActivateNextItem
⎈w⠀g⇧t (pane)ActivatePreviousItem
⎈w⎈g⇧t (pane)ActivatePreviousItem
⎈w⠀w (workspace)ActivateNextPane
⎈w⎈w (workspace)ActivateNextPane
⎈w⠀p (workspace)ActivatePreviousPane
⎈w⎈p (workspace)ActivatePreviousPane
⎈w⇧w (workspace)ActivatePreviousPane
⎈w⎈⇧w (workspace)ActivatePreviousPane
⎈w⎈v (pane)SplitVertical
⎈w⠀v (pane)SplitVertical
⎈w⇧s (pane)SplitHorizontal
⎈w⎈s (pane)SplitHorizontal
⎈w⠀s (pane)SplitHorizontal
⎈w⎈c (pane)CloseActiveItem
⎈w⠀c (pane)CloseActiveItem
⎈w⎈q (pane)CloseActiveItem
⎈w⠀q (pane)CloseActiveItem
⎈w⎈a (pane)CloseAllItems
⎈w⠀a (pane)CloseAllItems
⎈w⎈o (workspace)CloseInactiveTabsAndPanes
⎈w⠀o (workspace)CloseInactiveTabsAndPanes
⎈w⎈n (workspace)NewFileSplitHorizontal
⎈w⠀n (workspace)NewFileSplitHorizontal
g⠀t (vim)GoToTab
g⇧t (vim)GoToPreviousTab
}
"!Editor && !Terminal" {
⇧; (command_palette)Toggle
g⁄ (pane)DeploySearch
}
"ProjectPanel && not_editing" {
// netrw compatibility
⇧; (command_palette)Toggle
⇧5 (project_panel)NewFile
⁄ (project_panel)NewSearchInDirectory
d (project_panel)NewDirectory
⏎ (project_panel)OpenPermanent
⎋ (vim)ToggleProjectPanelFocus
h (project_panel)CollapseSelectedEntry
j (vim)MenuSelectNext
k (vim)MenuSelectPrevious
▼ (vim)MenuSelectNext
▲ (vim)MenuSelectPrevious
l (project_panel)ExpandSelectedEntry
⇧d (project_panel)Delete
⇧r (project_panel)Rename
t (project_panel)OpenPermanent
v (project_panel)OpenSplitVertical
o (project_panel)OpenSplitHorizontal
p (project_panel)Open
x (project_panel)RevealInFileManager
s (workspace)OpenWithSystem
zd (project_panel)CompareMarkedFiles
⦌c (project_panel)SelectNextGitEntry
⦋c (project_panel)SelectPrevGitEntry
⦌d (project_panel)SelectNextDiagnostic
⦋d (project_panel)SelectPrevDiagnostic
⇧⦌ (project_panel)SelectNextDirectory
⇧⦋ (project_panel)SelectPrevDirectory
⇧g (menu)SelectLast
gg (menu)SelectFirst
- (project_panel)SelectParent
⎈u (project_panel)ScrollUp
⎈d (project_panel)ScrollDown
zt (project_panel)ScrollCursorTop
zz (project_panel)ScrollCursorCenter
zb (project_panel)ScrollCursorBottom
№0 (vim)Number 0
№1 (vim)Number 1
№2 (vim)Number 2
№3 (vim)Number 3
№4 (vim)Number 4
№5 (vim)Number 5
№6 (vim)Number 6
№7 (vim)Number 7
№8 (vim)Number 8
№9 (vim)Number 9
"OutlinePanel && not_editing" {
j (menu)SelectNext
k (menu)SelectPrevious
⇧g (menu)SelectLast
gg (menu)SelectFirst
}
"GitPanel && ChangesList" {
k (menu)SelectPrevious
j (menu)SelectNext
gg (menu)SelectFirst
⇧g (menu)SelectLast
gf (menu)Confirm
i (git_panel)FocusEditor
x (git)ToggleStaged
⇧x (git)StageAll
gx (git)StageRange
⇧u (git)UnstageAll
}
"Editor && mode == auto_height && VimControl" {
// TODO: Implement search
⁄ #null
⇧8 #null
⇧3 #null
⇧⁄ #null
n #null
⇧n #null
}
"Picker > Editor" {
⎈h (editor)Backspace
⎈u (editor)DeleteToBeginningOfLine
⎈w (editor)DeleteToPreviousWordStart
}
"GitCommit > Editor && VimControl && vim_mode == normal" {
⎈c (menu)Cancel
⎋ (menu)Cancel
}
"Editor && edit_prediction"\
// identical to the binding in the base keymap, but the vim bindings above to `(vim)Tab` shadow it, so it needs to be bound again. */
⭾ (editor)AcceptEditPrediction
}
"MessageEditor > Editor && VimControl" {
⏎ (agent)Chat
}
"os != macos && Editor && edit_prediction_conflict" {
⎇l (editor)AcceptEditPrediction // provided as an alternative to tab/⎇tab. and will be displayed in the UI. This is because ⎇tab may not be available, as it is often used for window switching on Linux and Windows.
}
/*
≗⠀;⧵⦋⦌␈⌫␡⌦⇧◆❖⌘⎇⎈⎀⏎⭾
"Find and Dequote"
[^\n]"[^\\]
\t\"([^\s\[\]\;\/]+) ([^\s\[\]\;\/]+)\"
\t\"([^\s\[\]\;\/\"⦌+) ([^\s\[\]\;\/\"⦌+) ([^\s\[\]\;\/\"⦌+)\"
Types (\w+):: \($1\)
*/
@eugenesvk
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment