## 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`
---