# Neovim Config Reference Living reference for session management, keymaps, commands, and plugin-specific features in this config. ## Session Management Session support is automatic but user-controlled: **Manual session creation** (one-time): ```vim :mksession " Creates Session.vim in current directory ``` **Auto-load/save** (via `lua/autocmds.lua`): - On startup: auto-loads `Session.vim` if it exists (unless files specified on command line) - On exit: auto-saves to `Session.vim` if it already exists - Sessions are per-directory and opt-in (just create one to start using) **Stop using a session**: ```bash rm Session.vim # Won't auto-create a new one ``` ## Keymaps ### `:KeymapsGuide` (`lua/keymaps_reference.lua`) | Command | Description | | --- | --- | | `:KeymapsGuide` | Open a floating window with a dynamically generated list of all user-defined keymaps | ### `lua/keymaps.lua` Core keymaps available globally (not plugin-specific). These provide fallbacks for LSP features and diagnostic navigation. | Mode | Key | Description | Notes | | --- | --- | --- | --- | | n | `gd` | Vim goto-definition fallback | Executes `normal! gd` for tags/include jumps when no LSP | | n | `gD` | Vim goto-declaration fallback | Executes `normal! gD` | | n | `gr` | LSP references placeholder | `` so LSP buffers can override cleanly | | n | `gI` | LSP implementation placeholder | `` so LSP buffers can override cleanly | | n | `K` | Keyword help fallback | Uses `keywordprg` (e.g., `man`) when LSP hover is unavailable | | n | `xx` | Diagnostics → location list | Populates current buffer diagnostics | | n | `xX` | Diagnostics → quickfix | Populates project-wide diagnostics | | n | `xe` | Diagnostics → buffer errors | Location list filtered to errors | | n | `xE` | Diagnostics → all errors | Quickfix filtered to errors | | n | `[d` | Diagnostics: previous item | Uses `vim.diagnostic.goto_prev` | | n | `]d` | Diagnostics: next item | Uses `vim.diagnostic.goto_next` | | n | `xd` | Diagnostic float | Opens hover window for cursor diagnostic | | n | `xt` | Toggle diagnostics | Flips `vim.diagnostic.enable()` | | n | `hi` | Highlight inspector | Shows highlight/capture stack under cursor | ### `lua/netrw-config.lua` | Mode | Key | Description | | --- | --- | --- | | n | `te` | Open netrw in a new tab rooted at current file directory | | n | `tE` | Open netrw in a new tab rooted at project cwd | ## Plugin Reference ### LSP `lua/plugins/lsp.lua` #### Keymaps Buffer-local keymaps available when an LSP client attaches: | Mode | Key | Description | | --- | --- | --- | | n | `gd` | LSP: go to definition | | n | `gr` | LSP: references | | n | `gD` | LSP: declaration | | n | `gI` | LSP: implementation | | n | `K` | LSP hover | ### None-ls (Formatting) `lua/plugins/none-ls.lua` #### Keymaps | Mode | Key | Description | | --- | --- | --- | | n | `lt` | Toggle format-on-save flag | | n | `lf` | Format current buffer (synchronous) | | v | `lf` | Format visual selection | ### Nvim-lint `lua/plugins/nvim-lint.lua` #### Commands | Command | Description | | --- | --- | | `:MarkdownLintEnable` | Enable automatic markdown linting (runs on BufEnter, BufWritePost, InsertLeave) | | `:MarkdownLintDisable` | Disable automatic markdown linting and clear diagnostics | **Note:** Markdown linting is disabled by default. Spellcheck is always enabled for markdown files. ### Gitsigns `lua/plugins/gitsigns.lua` #### Keymaps Buffer-local keymaps available when inside a git repository: | Mode | Key | Description | | --- | --- | --- | | n | `]h` | Next hunk (`expr` mapping that respects `diff` windows) | | n | `[h` | Previous hunk | | n | `hs` | Stage current hunk | | n | `hr` | Reset current hunk | | v | `hs` | Stage visually selected range as hunk | | v | `hr` | Reset visually selected range | | n | `hS` | Stage entire buffer | | n | `hu` | Undo last staged hunk | | n | `hR` | Reset entire buffer | | n | `hp` | Preview hunk | | n | `hd` | Diff against index | | n | `hD` | Diff against previous commit (`~`) | | o/x | `ih` | Text object: select git hunk | ### Telescope `lua/plugins/telescope.lua` #### Keymaps ##### Launcher mappings (normal mode) | Key | Description | | --- | --- | | `ff` | Find files | | `fg` | Live grep | | `fb` | Open buffers picker (`` deletes buffers in picker) | | `fh` | Help tags | | `fr` | Recent files (oldfiles) | | `/` | Fuzzy search current buffer | | `fk` / `?` | Telescope keymaps picker | | `fc` | Commands picker | | `fs` | LSP document symbols | | `fS` | LSP workspace symbols | ##### Telescope prompt mappings (`defaults.mappings`) | Mode | Key | Description | | --- | --- | --- | | i | `` / `` | Move selection down | | i | `` / `` | Move selection up | | i | `` | Close picker | | i | `` | Accept selection | | i | `` | Open selection in horizontal split | | i | `` | Open selection in vertical split | | i | `` | Open selection in tab | | n | `` | Close picker | | n | `` | Accept selection | | n | `` | Horizontal split | | n | `` | Vertical split | | n | `` | New tab | | n | `j` | Move selection down | | n | `k` | Move selection up | ##### Picker-specific overrides | Context | Mode | Key | Description | | --- | --- | --- | --- | | `buffers` picker | i | `` | Delete highlighted buffer | ### Oil `lua/plugins/oil.lua` #### Keymaps ##### Global launcher mappings | Mode | Key | Description | | --- | --- | --- | | n | `fo` | Open Oil in current window | | n | `fO` | Open Oil in floating window | ##### Oil buffer mappings (`opts.keymaps`) | Key | Description | | --- | --- | | `g?` | Show Oil help | | `` | Open entry in current window | | `` | Open entry in vertical split | | `` | Open entry in horizontal split | | `` | Open entry in new tab | | `` | Preview entry (vertical split belowright) | | `` | Close Oil | | `` | Refresh | | `-` | Go to parent directory | | `_` | Open Neovim cwd | | `` ` `` | `:cd` into entry | | `~` | `:tcd` into entry | | `gs` | Change sort mode | | `gx` | Open entry externally | | `g.` | Toggle hidden files | | `g\` | Toggle trash visibility | ### UFO (Folding) `lua/plugins/ufo.lua` #### Keymaps | Mode | Key | Description | | --- | --- | --- | | n | `zR` | Open all folds | | n | `zM` | Close all folds | | n | `zr` | Open folds except configured kinds | | n | `zm` | Close folds with configured kinds | | n | `K` | Peek fold under cursor; falls back to LSP hover | | preview window | `` / `` | Scroll within UFO preview | | preview window | `[` / `]` | Jump to top/bottom of preview | ### Undotree `lua/plugins/undotree.lua` #### Keymaps | Mode | Key | Description | | --- | --- | --- | | n | `u` | Toggle Undotree panel | ### Treesitter `lua/plugins/treesitter.lua` #### Keymaps ##### Incremental selection | Key | Description | | --- | --- | | `+` | Initialize/expand selection | | `g+` | Expand to scope | | `-` | Shrink selection | ##### Textobject selection (`select.keymaps`) | Key | Target | | --- | --- | | `af` / `if` | Function outer / inner | | `ac` / `ic` | Class outer / inner | | `aa` / `ia` | Parameter outer / inner | | `ai` / `ii` | Conditional outer / inner | | `al` / `il` | Loop outer / inner | | `a/` | Comment outer | ##### Textobject movement (`move` mappings) | Key | Action | | --- | --- | | `]f` / `]F` | Next function start / end | | `[f` / `[F` | Previous function start / end | | `]c` / `]C` | Next class start / end | | `[c` / `[C` | Previous class start / end | | `]a` / `]A` | Next parameter start / end | | `[a` / `[A` | Previous parameter start / end | ##### Parameter swapping | Key | Description | | --- | --- | | `a` | Swap parameter with next | | `A` | Swap parameter with previous | ### Comment.nvim `lua/plugins/comment.lua` #### Keymaps | Mapping | Description | | --- | --- | | `gcc` | Toggle line comment | | `gbc` | Toggle block comment | | `gc` | Operator-pending line comment | | `gb` | Operator-pending block comment | | `gcO` / `gco` / `gcA` | Insert comment above / below / end-of-line | ### Nvim-surround `lua/plugins/surround.lua` #### Keymaps | Mode | Mapping | Description | | --- | --- | --- | | normal | `ys{motion}{char}` | Add surround to motion | | normal | `yss` | Surround current line | | normal | `yS` | Surround motion with linewise behavior | | normal | `ySS` | Surround current line linewise | | insert | `s` | Surround following text object | | insert | `S` | Surround current line | | visual | `S` | Surround selection | | visual line | `gS` | Surround visual-line selection | | normal | `ds{char}` | Delete surround | | normal | `cs{old}{new}` | Change surround | | normal | `cS{old}{new}` | Change surround (linewise) | ### Nvim-cmp (Completion) `lua/plugins/cmp.lua` #### Keymaps | Mode | Key | Description | | --- | --- | --- | | insert | `` | Manually trigger completion | | insert | `` | Confirm selection (selects first item by default) | | insert | `` | Next completion item | | insert | `` | Previous completion item | | insert | `` | Abort completion menu | ### Nvim-autopairs `lua/plugins/autopairs.lua` #### Keymaps | Mode | Key | Description | | --- | --- | --- | | insert | `` | Fast wrap the previous text with a pair |