## VIM Keybindings (Grouped by Context) Here's a breakdown of the VIM keybindings, organized by their context and grouped for clarity: --- ### 1. `VimControl && !menu` This section defines general VIM control bindings that are active when a menu is *not* open. * **Movement:** * `left`, `h`: `vim::Left` * `down`, `ctrl-j`, `j`: `vim::Down` * `up`, `k`: `vim::Up` * `right`, `l`: `vim::Right` * `end`, `$` : `vim::EndOfLine` * `^` : `vim::FirstNonWhitespace` * `_` : `vim::StartOfLineDownward` * `g _` : `vim::EndOfLineDownward` * `0`, `home`: `vim::StartOfLine` * `ctrl-f`, `pagedown`: `vim::PageDown` * `ctrl-b`, `pageup`: `vim::PageUp` * `ctrl-d`: `vim::ScrollDown` * `ctrl-u`: `vim::ScrollUp` * `ctrl-e` : `vim::LineDown` * `ctrl-y` : `vim::LineUp` * `g j`, `g down`: `vim::Down` (display lines) * `g k`, `g up`: `vim::Up` (display lines) * `g $`, `g end`: `vim::EndOfLine` (display lines) * `g 0`, `g home`: `vim::StartOfLine` (display lines) * `g ^`: `vim::FirstNonWhitespace` (display_lines) * `shift-h` : `vim::WindowTop` * `shift-m` : `vim::WindowMiddle` * `shift-l` : `vim::WindowBottom` * `|` : `vim::GoToColumn` * **Line Navigation:** * `ctrl-m`, `+`, `enter`: `vim::NextLineStart` * `-`: `vim::PreviousLineStart` * **Jumping/Marks:** * `m`: `vim::PushMark` * `'` : `vim::PushJump` (line) * ``` ` ``: `vim::PushJump` (not line) * `ctrl-o` : `pane::GoBack` * `ctrl-i` : `pane::GoForward` * `ctrl-]` : `editor::GoToDefinition` * `g ,` : `vim::ChangeListNewer` * `g ;` : `vim::ChangeListOlder` * **Text Objects (Inner/Around):** * `i`: `vim::PushObject` (inner) * `a`: `vim::PushObject` (around) * **Searching:** * `/`: `vim::Search` * `g /`: `pane::DeploySearch` * `?`: `vim::Search` (backwards) * `*`: `vim::MoveToNext` * `#`: `vim::MoveToPrev` * `n`: `vim::MoveToNextMatch` * `shift-n`: `vim::MoveToPrevMatch` * `g *` : `vim::MoveToNext` (partial word) * `g #` : `vim::MoveToPrev` (partial word) * `g n` : `vim::SelectNextMatch` * `g shift-n` : `vim::SelectPreviousMatch` * `g l` : `vim::SelectNext` * `g shift-l` : `vim::SelectPrevious` * `g >` : `editor::SelectNext` (replace newest) * `g <` : `editor::SelectPrevious` (replace newest) * `g a` : `editor::SelectAllMatches` * **Words:** * `w` : `vim::NextWordStart` * `e` : `vim::NextWordEnd` * `b` : `vim::PreviousWordStart` * `g e` : `vim::PreviousWordEnd` * `shift-w` : `vim::NextWordStart` (ignore punctuation) * `shift-e` : `vim::NextWordEnd` (ignore punctuation) * `shift-b` : `vim::PreviousWordStart` (ignore punctuation) * `g shift-e` : `vim::PreviousWordEnd` (ignore punctuation) * **Section:** * `] ]` : `vim::NextSectionStart` * `] [` : `vim::NextSectionEnd` * `[ [` : `vim::PreviousSectionStart` * `[ ]` : `vim::PreviousSectionEnd` * `] m` : `vim::NextMethodStart` * `] shift-m` : `vim::NextMethodEnd` * `[ m` : `vim::PreviousMethodStart` * `[ shift-m` : `vim::PreviousMethodEnd` * `[ *`, `[ /`: `vim::PreviousComment` * `] *`, `] /`: `vim::NextComment` * `{`: `vim::StartOfParagraph` * `}`: `vim::EndOfParagraph` * `(` : `vim::SentenceBackward` * `)` : `vim::SentenceForward` * **Match** * `%` : `vim::Matching` * `] }`: `vim::UnmatchedForward` (char: `}`) * `[ {`: `vim::UnmatchedBackward` (char: `{`) * `] )`: `vim::UnmatchedForward` (char: `)`) * `[ (`: `vim::UnmatchedBackward` (char: `(`) * **Find/Repeat:** * `f`: `vim::PushFindForward` (before: false) * `t`: `vim::PushFindForward` (before: true) * `shift-f`: `vim::PushFindBackward` (after: false) * `shift-t`: `vim::PushFindBackward` (after: true) * `;`: `vim::RepeatFind` * `,`: `vim::RepeatFindReversed` * **Visual Mode:** * `v` : `vim::ToggleVisual` * `shift-v` : `vim::ToggleVisualLine` * `ctrl-g` : `vim::ShowLocation` * `ctrl-v`, `ctrl-q`: `vim::ToggleVisualBlock` * `g v` : `vim::RestoreVisualSelection` * **Mode Switching:** * `escape`, `ctrl-[`: `vim::SwitchToNormalMode` * **Editor/Pane Actions:** * `g h`, `shift-k` : `editor::Hover` * `shift-r` : `vim::ToggleReplace` * `g r` : `vim::PushReplaceWithRegister` * `g t` : `pane::ActivateNextItem` * `g shift-t` : `pane::ActivatePrevItem` * `g d` : `editor::GoToDefinition` * `g shift-d` : `editor::GoToDeclaration` * `g y` : `editor::GoToTypeDefinition` * `g shift-i` : `editor::GoToImplementation` * `g x` : `editor::OpenUrl` * `g f` : `editor::OpenSelectedFilename` * `g s` : `outline::Toggle` * `g shift-s` : `project_symbols::Toggle` * `g .` : `editor::ToggleCodeActions` (Zed specific) * `g shift-a` : `editor::FindAllReferences` (Zed specific) * `g space` : `editor::OpenExcerpts` (Zed specific) * `g ]` : `editor::GoToDiagnostic` * `g [` : `editor::GoToPrevDiagnostic` * `g i` : `vim::InsertAtPrevious` * `ctrl-w d`, `ctrl-w g d`: `editor::GoToDefinitionSplit` *`ctrl-w shift-d`, `ctrl-w g shift-d` : `editor::GoToTypeDefinitionSplit` * `ctrl-w space`, `ctrl-w g space`: `editor::OpenExcerptsSplit` * `ctrl-6` : `pane::AlternateFile` * **Record:** * `q` : `vim::ToggleRecord` * `shift-q` : `vim::ReplayLastRecording` * `@` : `vim::PushReplayRegister` * **Basic Editing:** * `backspace`: `vim::Backspace` * `shift-tab`, `tab`: `vim::Tab` * `space`: `vim::Space` * `g g` : `vim::StartOfDocument` * `shift-g` : `vim::EndOfDocument` * **`z` Commands (Scrolling/Folding):** * `z enter`: `workspace::SendKeystrokes` (`z t ^`) * `z -`: `workspace::SendKeystrokes` (`z b ^`) * `z ^`: `workspace::SendKeystrokes` (`shift-h k z b ^`) * `z +`: `workspace::SendKeystrokes` (`shift-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 shift-a`: `editor::ToggleFoldRecursive` * `z c`: `editor::Fold` * `z shift-c`: `editor::FoldRecursive` * `z o`: `editor::UnfoldLines` * `z shift-o`: `editor::UnfoldRecursive` * `z f`: `editor::FoldSelectedRanges` * `z shift-m`: `editor::FoldAll` * `z shift-r`: `editor::UnfoldAll` * **`shift-z` Commands (Pane Management):** * `shift-z shift-q`: `pane::CloseActiveItem` (skip save) * `shift-z shift-z`: `pane::CloseActiveItem` (save all) * **Number Input:** * `1`-`9`: `vim::Number` (1-9) --- ### 2. `vim_mode == normal` Bindings active in Normal mode. * **Command Palette/Repeat:** * `: `: `command_palette::Toggle` * `.`: `vim::Repeat` * **Changing Text:** * `c`: `vim::PushChange` * `shift-c`: `vim::ChangeToEndOfLine` * `d`: `vim::PushDelete` * `shift-d`: `vim::DeleteToEndOfLine` * `shift-j`: `vim::JoinLines` * `g shift-j` : `vim::JoinLinesNoWhitespace` * `y`: `vim::PushYank` * `shift-y`: `vim::YankLine` * `~`: `vim::ChangeCase` * `>` : `vim::PushIndent` * `<` : `vim::PushOutdent` * `=`: `vim::PushAutoIndent` * `!`: `vim::PushShellCommand` * **Insert Mode:** * `i` : `vim::InsertBefore` * `shift-i` : `vim::InsertFirstNonWhitespace` * `a` : `vim::InsertAfter` * `shift-a` : `vim::InsertEndOfLine` * `o` : `vim::InsertLineBelow` * `shift-o` : `vim::InsertLineAbove` * **Delete/Substitute:** * `x`: `vim::DeleteRight` * `shift-x`: `vim::DeleteLeft` * `s`: `vim::Substitute` * `shift-s`: `vim::SubstituteLine` * **Undo/Redo/Paste:** * `u`: `vim::Undo` * `ctrl-r`: `vim::Redo` * `p`: `vim::Paste` * `shift-p`: `vim::Paste` (before) * **Case Change** * `g u` : `vim::PushLowercase` * `g shift-u` : `vim::PushUppercase` * `g ~` : `vim::PushOppositeCase` * **Register** * `"`: `vim::PushRegister` * **Rewrap** * `g w`, `g q` : `vim::PushRewrap` * **Increment/Decrement:** * `ctrl-a`: `vim::Increment` * `ctrl-x`: `vim::Decrement` * **Pane Navigation (with Ctrl-Page):** * `ctrl-pagedown`: `pane::ActivateNextItem` * `ctrl-pageup`: `pane::ActivatePrevItem` * **Insert at Cursor:** * `insert`: `vim::InsertBefore` * **Tree-sitter:** * `[ x` : `vim::SelectLargerSyntaxNode` * `] x` : `vim::SelectSmallerSyntaxNode` * `] d` : `editor::GoToDiagnostic` * `[ d` : `editor::GoToPrevDiagnostic` * `] c` : `editor::GoToHunk` * `[ c` : `editor::GoToPrevHunk` * `g c` : `vim::PushToggleComments` * **Cancel:** * `ctrl-[`, `escape`: `editor::Cancel` --- ### 3. `VimControl && VimCount` Bindings for when a count is being entered. * `0`: `vim::Number` (0) * `:`: `vim::CountCommand` --- ### 4. `vim_mode == visual` Bindings active in Visual mode. * **Command/Other End:** * `: `: `vim::VisualCommand` * `shift-o`, `o`: `vim::OtherEnd` * **Case** * `u` : `vim::ConvertToLowerCase` * `shift-u` : `vim::ConvertToUpperCase` * `~` : `vim::ChangeCase` * **Delete/Yank/Paste:** * `d`, `x`: `vim::VisualDelete` * `shift-d`, `shift-x`: `vim::VisualDeleteLine` * `y`: `vim::VisualYank` * `shift-y`: `vim::VisualYankLine` * `p`: `vim::Paste` * `shift-p`: `vim::Paste` (preserve clipboard) * **Substitute/Replace:** * `c`, `s`: `vim::Substitute` * `shift-r`, `shift-s`: `vim::SubstituteLine` * `r` : `vim::PushReplace` * **Increment** * `ctrl-a` : `vim::Increment` * `ctrl-x` : `vim::Decrement` * `g ctrl-a` : `vim::Increment` (step) * `g ctrl-x` : `vim::Decrement` (step) * **Move to Next/Prev:** * `*`: `vim::MoveToNext` (partial word) * `#`: `vim::MoveToPrev` (partial word) * **Insert:** * `shift-i` : `vim::InsertBefore` * `shift-a` : `vim::InsertAfter` * `g shift-i` : `vim::VisualInsertFirstNonWhiteSpace` * `g shift-a` : `vim::VisualInsertEndOfLine` * **Lines** * `shift-j`: `vim::JoinLines` * `g shift-j` : `vim::JoinLinesNoWhitespace` * **Mode Switching:** * `ctrl-c`, `ctrl-[`, `escape`: `vim::SwitchToNormalMode` * **Indent** * `>`: `vim::Indent` * `<`: `vim::Outdent` * `=`: `vim::AutoIndent` * **Shell** * `!`: `vim::ShellCommand` * **Text Objects:** * `i`: `vim::PushObject` (inner) * `a`: `vim::PushObject` (around) * **Comments** * `g c` : `vim::ToggleComments` * **Wrap** * `g q` : `vim::Rewrap` * **Register** * `"`: `vim::PushRegister` * **Tree-sitter:** * `[ x`: `editor::SelectLargerSyntaxNode` * `] x`: `editor::SelectSmallerSyntaxNode` --- ### 5. `vim_mode == insert` Bindings active in Insert mode. * **Mode Switching:** * `ctrl-c`, `ctrl-[`, `escape`: `vim::NormalBefore` * **Completion/Assist:** * `ctrl-x ctrl-o`: `editor::ShowCompletions` * `ctrl-x ctrl-a`: `assistant::InlineAssist` (Zed specific) * `ctrl-x ctrl-c`: `editor::ShowEditPrediction` (Zed specific) * `ctrl-x ctrl-l`: `editor::ToggleCodeActions` (Zed specific) * `ctrl-x ctrl-z`: `editor::Cancel` * **Delete:** * `ctrl-w`: `editor::DeleteToPreviousWordStart` * `ctrl-u` : `editor::DeleteToBeginningOfLine` * **Indent/Outdent:** * `ctrl-t`: `vim::Indent` * `ctrl-d`: `vim::Outdent` * **Digraph/Literal:** * `ctrl-k`: `vim::PushDigraph` * `ctrl-v`, `ctrl-q`, `ctrl-shift-q`: `vim::PushLiteral` * **Paste** * `ctrl-shift-v`: `editor::Paste` * **Register** * `ctrl-r` : `vim::PushRegister` * **Replace** * `insert`: `vim::ToggleReplace` * **Temporary Normal:** * `ctrl-o` : `vim::TemporaryNormal` --- ### 6. `vim_mode == helix_normal` * **Insert Mode:** * `i`: `vim::InsertBefore` * `a`: `vim::InsertAfter` * **Delete** * `d`: `vim::HelixDelete` * **Words:** * `w`: `vim::NextWordStart` * `e`: `vim::NextWordEnd` * `b`: `vim::PreviousWordStart` * **Movement:** * `h`: `vim::Left` * `j`: `vim::Down` * `k`: `vim::Up` * `l`: `vim::Right` --- ### 7. `vim_mode == insert && !(showing_code_actions || showing_completions)` Bindings active in Insert mode *only* when code actions or completions are *not* showing. * `ctrl-p`, `ctrl-n`: `editor::ShowCompletions` --- ### 8. `vim_mode == replace` Bindings active in Replace mode. * **Mode Switching:** * `ctrl-c`, `ctrl-[`, `escape`: `vim::NormalBefore` * `insert` : `vim::InsertBefore` * **Digraph/Literal:** * `ctrl-k` : `vim::PushDigraph` * `ctrl-v`, `ctrl-q`, `ctrl-shift-q`: `vim::PushLiteral` * **Undo** * `backspace` : `vim::UndoReplace` * **Tab/Enter:** * `tab`: `vim::Tab` * `enter` : `vim::Enter` * **Paste** * `ctrl-shift-v`: `editor::Paste` --- ### 9. `vim_mode == waiting` Bindings active when VIM is waiting for further input (e.g., after pressing `g`). * **Tab/Enter:** * `tab`: `vim::Tab` * `enter`: `vim::Enter` * **Clear Operators:** * `ctrl-c`, `ctrl-[`, `escape`: `vim::ClearOperators` * **Digraph/Literal:** * `ctrl-k`: `vim::PushDigraph` * `ctrl-v`, `ctrl-q`: `vim::PushLiteral` --- ### 10. `Editor && vim_mode == waiting && (vim_operator == ys || vim_operator == cs)` * **Mode Switching:** * `escape` : `vim::SwitchToNormalMode` --- ### 11. `vim_mode == operator` * **Clear Operators:** * `ctrl-c`, `ctrl-[`, `escape`: `vim::ClearOperators` * **Comment** * `g c` : `vim::Comment` --- ### 12. `vim_operator == a || vim_operator == i || vim_operator == cs` Bindings for text object selection (used with operators like `d`, `c`, `y`). * `w`: `vim::Word` * `shift-w`: `vim::Word` (ignore punctuation) * `t`: `vim::Tag` * `s`: `vim::Sentence` * `p`: `vim::Paragraph` * `'`: `vim::Quotes` * ``` ` ``: `vim::BackQuotes` * `"`: `vim::DoubleQuotes` * `q`: `vim::AnyQuotes` * `|`: `vim::VerticalBars` * `(`, `)`, `b`: `vim::Parentheses` * `[`, `]`, `r`: `vim::SquareBrackets` * `{`, `}`, `shift-b`: `vim::CurlyBrackets` * `<`, `>`: `vim::AngleBrackets` * `a`: `vim::Argument` * `i` : `vim::IndentObj` * `shift-i` : `vim::IndentObj` (include below) * `f`: `vim::Method` * `c` : `vim::Class` * `e`: `vim::EntireFile` --- ### 13-21. Specific `vim_operator` Bindings These sections define bindings for *specific* operator + motion combinations. They all follow a similar pattern: * Context: `vim_operator == ...` (e.g., `vim_operator == c`, `vim_operator == d`, etc.) * Bindings: Usually define a key (often the same as the operator) to act on the current line (`vim::CurrentLine`), or define a specific action. Here is a concise summary of sections 13 - 21 * **13. `vim_operator == c` (Change):** * `c`: `vim::CurrentLine` * `d`: `editor::Rename` (Zed specific) * `s`: `vim::PushChangeSurrounds` * **14. `vim_operator == d` (Delete):** * `d`: `vim::CurrentLine` * `s`: `vim::PushDeleteSurrounds` * `o`: `editor::ToggleSelectedDiffHunks` * `p`: `editor::RevertSelectedHunks` * **15. `vim_operator == gu` (Lowercase):** * `g u`, `u`: `vim::CurrentLine` * **16. `vim_operator == gU` (Uppercase):** * `g shift-u`, `shift-u`: `vim::CurrentLine` * **17. `vim_operator == g~` (Swap Case):** * `g ~`, `~`: `vim::CurrentLine` * **18. `vim_operator == gq` (Format/Rewrap):** * `g q`,`q`,`g w`, `w`: `vim::CurrentLine` * **19. `vim_operator == y` (Yank):** * `y`: `vim::CurrentLine` * `s`: `vim::PushAddSurrounds` * **20. `vim_operator == ys` (Yank surrounds):** * `s` : `vim::CurrentLine` * **21. `vim_operator == >` (Indent):** * `>`: `vim::CurrentLine` * **22. `vim_operator == <` (Outdent):** * `<`: `vim::CurrentLine` * **23. `vim_operator == eq` (Auto Indent):** * `=`: `vim::CurrentLine` * **24. `vim_operator == sh` (Shell):** * `!`: `vim::CurrentLine` * **25. `vim_operator == gc` (Comment):** * `c`: `vim::CurrentLine` --- ### 26. `vim_mode == literal` Bindings active when inserting a literal character (after `ctrl-v` or similar). This maps control characters to their literal values. This is *very* comprehensive. * `ctrl-@` - `ctrl-_`, `escape`, `enter`, `tab`, `backspace`, `delete`: `vim::Literal` (with corresponding Unicode values) --- ### 27. `BufferSearchBar && !in_replace` Bindings for the buffer search bar, when *not* in replace mode. * `enter`: `vim::SearchSubmit` * `escape`: `buffer_search::Dismiss` --- ### 28. `GitPanel || ProjectPanel || ... || KeyContextView` Bindings active within various panels, including Git, Project, Collaboration, Outline, Chat, VimControl (when not in a specific mode), EmptyPane, SharedScreen, MarkdownPreview, and KeyContextView. This primarily handles `ctrl-w` window/pane management commands. * **Window/Pane Navigation (`ctrl-w ...`):** * `ctrl-w left`, `ctrl-w h`, `ctrl-w ctrl-h`: `workspace::ActivatePaneLeft` * `ctrl-w right`, `ctrl-w l`, `ctrl-w ctrl-l`: `workspace::ActivatePaneRight` * `ctrl-w up`, `ctrl-w k`, `ctrl-w ctrl-k`: `workspace::ActivatePaneUp` * `ctrl-w down`, `ctrl-w j`, `ctrl-w ctrl-j`: `workspace::ActivatePaneDown` * `ctrl-w shift-left`, `ctrl-w shift-h`: `workspace::SwapPaneLeft` * `ctrl-w shift-right`, `ctrl-w shift-l`: `workspace::SwapPaneRight` * `ctrl-w shift-up`, `ctrl-w shift-k`: `workspace::SwapPaneUp` * `ctrl-w shift-down`, `ctrl-w shift-j`: `workspace::SwapPaneDown` * `ctrl-w >`: `vim::ResizePaneRight` * `ctrl-w <`: `vim::ResizePaneLeft` * `ctrl-w -`: `vim::ResizePaneDown` * `ctrl-w +`: `vim::ResizePaneUp` * `ctrl-w _`: `vim::MaximizePane` * `ctrl-w =`: `vim::ResetPaneSizes` * `ctrl-w w`, `ctrl-w ctrl-w`: `workspace::ActivateNextPane` * `ctrl-w p`, `ctrl-w ctrl-p`, `ctrl-w shift-w`, `ctrl-w ctrl-shift-w`: `workspace::ActivatePreviousPane` * `ctrl-w g t`, `ctrl-w ctrl-g t`: `pane::ActivateNextItem` * `ctrl-w g shift-t`, `ctrl-w ctrl-g shift-t`: `pane::ActivatePrevItem` * `ctrl-w v`, `ctrl-w ctrl-v`: `pane::SplitVertical` * `ctrl-w s`, `ctrl-w ctrl-s`, `ctrl-w shift-s`: `pane::SplitHorizontal` * `ctrl-w c`, `ctrl-w ctrl-c`, `ctrl-w q`, `ctrl-w ctrl-q`: `pane::CloseActiveItem` * `ctrl-w a`, `ctrl-w ctrl-a`: `pane::CloseAllItems` * `ctrl-w o`, `ctrl-w ctrl-o`: `workspace::CloseInactiveTabsAndPanes` * `ctrl-w n`, `ctrl-w ctrl-n`: `workspace::NewFileSplitHorizontal` * `ctrl-w`: (null - disables default `ctrl-w` behavior) --- ### 29. `ChangesList || EmptyPane || ... || Welcome` Bindings active in specific contexts like ChangesList, EmptyPane, etc. * `: `: `command_palette::Toggle` * `g /`: `pane::DeploySearch` --- ### 30. `ProjectPanel && not_editing` Bindings for the Project Panel when *not* in editing mode (Netrw compatibility). * **File/Directory Operations:** * `%`: `project_panel::NewFile` * `/`: `project_panel::NewSearchInDirectory` * `d`: `project_panel::NewDirectory` * `shift-d`: `project_panel::Delete` * `shift-r`: `project_panel::Rename` * `x`: `project_panel::RevealInFileManager` * `s` : `project_panel::OpenWithSystem` * **Navigation:** * `enter`, `o`, `t`, `v` : `project_panel::OpenPermanent` * `escape`: `project_panel::ToggleFocus` * `h`: `project_panel::CollapseSelectedEntry` * `j`: `menu::SelectNext` * `k`: `menu::SelectPrev` * `l`: `project_panel::ExpandSelectedEntry` * `p`: `project_panel::Open` * `] c`: `project_panel::SelectNextGitEntry` * `[ c`: `project_panel::SelectPrevGitEntry` * `] d`: `project_panel::SelectNextDiagnostic` * `[ d` : `project_panel::SelectPrevDiagnostic` * `}`: `project_panel::SelectNextDirectory` * `{`: `project_panel::SelectPrevDirectory` * `shift-g`: `menu::SelectLast` * `g g` : `menu::SelectFirst` * `-`: `project_panel::SelectParent` * `ctrl-6` : `pane::AlternateFile` * **Command Palette:** * `: `: `command_palette::Toggle` --- ### 31. `OutlinePanel && not_editing` Bindings active in the Outline Panel when not in edit mode * **Navigation:** * `j` : `menu::SelectNext` * `k` : `menu::SelectPrev` * `shift-g` : `menu::SelectLast` * `g g` : `menu::SelectFirst` --- ### 32. `GitPanel && ChangesList` Bindings for the Git Panel when the Changes List is active. * **Navigation:** * `k`: `menu::SelectPrev` * `j`: `menu::SelectNext` * `g g`: `menu::SelectFirst` * `shift-g`: `menu::SelectLast` * `g f`: `menu::Confirm` * `i` : `git_panel::FocusEditor` * **Git Actions:** * `x`: `git::ToggleStaged` * `shift-x`: `git::StageAll` * `shift-u`: `git::UnstageAll` --- ### 33. `Editor && edit_prediction` Bindings for accepting an edit prediction * `tab`: `editor::AcceptEditPrediction` --- ### 34. `os != macos && Editor && edit_prediction_conflict` Bindings to alternative key for accept edit prediction * `alt-l`: `editor::AcceptEditPrediction` ---