>_ lazyvim --list-keymaps
LAZYVIM KEYMAPS
253 shortcuts — search or filter by category
<leader>Space — primary prefix key in LazyVim
<C-x>Ctrl + x
<A-x>Alt + x
<S-x>Shift + x
>_
253 / 253 keymaps
j
Move cursor downcore
// tipBasic downward motion. In LazyVim, j also works on wrapped visual lines so it feels natural on long prose or markdown.
k
Move cursor upcore
// tipBasic upward motion. Pair with a count like 5k to jump multiple lines at once — relative line numbers make this easy.
<Down>
Move cursor downcore
// tipArrow-key alternative to j. Useful while you're still building muscle memory for home-row navigation.
<Up>
Move cursor upcore
// tipArrow-key alternative to k. Most experienced Vim users eventually drop arrow keys in favour of h/j/k/l.
<C-h>
Go to left windowcore
// tipJump to the split on the left. Works the same way as Ctrl+W h but without needing the two-key chord.
<C-j>
Go to lower windowcore
// tipJump to the split below. Essential when you have a terminal pane open at the bottom.
<C-k>
Go to upper windowcore
// tipJump to the split above. Use with <C-j> to toggle between an editor and a terminal pane.
<C-l>
Go to right windowcore
// tipJump to the split on the right. Great for side-by-side file comparison.
<C-Up>
Increase window heightcore
// tipGrow the current split vertically. Use repeatedly or hold to reach the desired height.
<C-Down>
Decrease window heightcore
// tipShrink the current split vertically. Useful to collapse a terminal pane when you need more editor space.
<C-Left>
Decrease window widthcore
// tipNarrow the current split. Use to give more room to the adjacent pane.
<C-Right>
Increase window widthcore
// tipWiden the current split. For fine-grained control, enter hydra mode with <C-w><Space> instead.
<A-j>
Move line downcore
// tipShift the current line (or selected block) down by one. Replaces cut-and-paste for simple reordering — works in both normal and visual mode.
<A-k>
Move line upcore
// tipShift the current line (or selected block) up by one. Hold Alt and tap k repeatedly to bubble a line to the top of a block.
]]
Next referencelsp
// tipJump to the next place the symbol under cursor is referenced. Great for tracing how a function or variable propagates through a file.
[[
Prev referencelsp
// tipJump to the previous reference of the symbol under cursor. Use with ]] to step through all usages in order.
<S-h>
Previous buffercore
// tipCycle to the previous open buffer. Think of it as Shift+Tab for your open files — faster than typing a filename.
<S-l>
Next buffercore
// tipCycle to the next open buffer. Use <S-h> and <S-l> together to quickly alternate between two files.
[b
Previous buffercore
// tipAlternative to <S-h> for navigating to the previous buffer, following the bracket-navigation convention.
]b
Next buffercore
// tipAlternative to <S-l> for navigating to the next buffer, following the bracket-navigation convention.
<leader>bb
Switch to other buffercore
// tipToggle between the current and the previously active buffer — like Ctrl+Tab in a browser. Perfect for switching back and forth between two related files.
<leader>`
Switch to other buffercore
// tipSame as <leader>bb — alternate buffer toggle. Choose whichever feels more natural to reach.
<leader>bd
Delete buffercore
// tipClose the current buffer without closing the window or split. The layout stays intact — only the file is removed from the buffer list.
<leader>bo
Delete other bufferscore
// tipClose every buffer except the one you're currently in. Great for cleaning up after exploring a codebase.
<leader>bD
Delete buffer and windowcore
// tipClose both the buffer and its window in one step. Use this when you want to collapse a split entirely.
<leader>bj
Pick bufferbufferline
// tipOpens a visual buffer picker where each open file gets a letter. Press the letter to jump instantly — faster than scrolling through the tabline.
<leader>bl
Delete buffers to the leftbufferline
// tipClose all buffers to the left of the current one in the tabline. Useful after you've moved on from earlier files in a session.
<leader>bp
Toggle pinbufferline
// tipPin the current buffer so bulk-close commands like <leader>bP won't touch it. Use for files you always want open (config, main entry point).
<leader>bP
Delete non-pinned buffersbufferline
// tipClose everything except pinned buffers. A clean-slate shortcut that respects the files you marked as important.
<leader>br
Delete buffers to the rightbufferline
// tipClose all buffers to the right of the current one. Useful for tidying up after a deep dive into a sub-directory.
<leader>,
List bufferssnacks
// tipOpen a fuzzy-searchable list of all open buffers. Type to filter by filename and press Enter to jump.
<leader>fB
Buffers (all)snacks
// tipShow all buffers including unlisted and hidden ones. Useful for finding files that were opened programmatically.
<leader>fb
Open bufferssnacks
// tipBrowse currently open buffers in a picker. A quicker alternative to <leader>, when you want the snacks UI.
<C-s>
Save filecore
// tipSave the current file. Works in normal, insert, and visual mode — a familiar shortcut for anyone coming from other editors.
<leader>fn
New filecore
// tipCreate a new unnamed buffer. You'll be prompted to name it when you save. Good for quick throwaway files.
<leader>ff
Find files (root dir)snacks
// tipFuzzy-search all files in the project root. The go-to shortcut for opening any file by name — faster than any file tree.
<leader>fF
Find files (cwd)snacks
// tipFuzzy-search from the current working directory instead of the project root. Handy in monorepos to scope the search to your current package.
<leader>fg
Find files (git-files)snacks
// tipSearch only git-tracked files. Excludes build artifacts and ignored paths — gives a cleaner result than <leader>ff in large repos.
<leader>fc
Find config filesnacks
// tipJump to your Neovim config files (init.lua, plugin specs, etc.). A shortcut to your own LazyVim setup.
<leader>fe
File explorer (root dir)snacks
// tipToggle the file explorer rooted at the project root. Use when you need to browse the directory structure rather than jump by name.
<leader>fE
File explorer (cwd)snacks
// tipToggle the file explorer rooted at the current working directory. Scoped to your active context in a monorepo.
<leader>e
File explorer (root dir)snacks
// tipQuick toggle for the file explorer — same as <leader>fe but one keystroke. The fastest way to show or hide the sidebar.
<leader>E
File explorer (cwd)snacks
// tipQuick toggle for the cwd-scoped file explorer — same as <leader>fE with one fewer keystroke.
<leader>fm
Open mini.filesmini.files
// tipOpen mini.files — a lightweight file manager where you can rename, move, and delete files by editing the buffer directly, like a text file.
<leader>fM
Open mini.files (cwd)mini.files
// tipOpen mini.files starting from the current working directory. Useful when you want to manage files relative to your active context.
<leader>fr
Recent filessnacks
// tipShow recently opened files across all projects. Great for picking up where you left off after reopening Neovim.
<leader>fR
Recent files (cwd)snacks
// tipShow recent files scoped to the current working directory. More focused than <leader>fr in multi-project setups.
<leader><space>
Find files (root dir)snacks
// tipThe fastest file-open shortcut — just Space+Space. Same as <leader>ff but easier to type. Your most-used key in LazyVim.
<leader>fp
Open projectssnacks
// tipBrowse and switch between saved projects. Each project restores its session, buffers, and layout.
n
Next search resultcore
// tipJump to the next match after a / or ? search. LazyVim automatically centres the result and shows match count.
N
Prev search resultcore
// tipJump to the previous match. Use n and N together to step through all occurrences of a pattern.
<leader>sr
Search and replacegrug-far
// tipOpen a project-wide search and replace panel (grug-far). Preview all changes before applying — much safer than a bare :%s across multiple files.
<leader>/
Grep (root dir)snacks
// tipLive grep across the entire project. Results update as you type — use it to find any string, function name, or comment in seconds.
<leader>sg
Grep (root dir)snacks
// tipSame as <leader>/ — live grep from the project root. Two ways to reach the same powerful search.
<leader>sG
Grep (cwd)snacks
// tipLive grep scoped to the current working directory. Useful in monorepos where you want results from only your active package.
<leader>sh
Help pagessnacks
// tipSearch Neovim's built-in help system. Type any plugin name, option, or command to find its documentation without leaving the editor.
<leader>sH
Search highlightssnacks
// tipBrowse all active highlight groups. Essential when customising a colorscheme — find the exact group name to override.
<leader>si
Search iconssnacks
// tipBrowse Nerd Font icons interactively. Find a glyph, copy it, and paste it into your config or UI code.
<leader>sj
Jumpssnacks
// tipBrowse your jump list — the history of positions you've visited. Pick any entry to teleport back to an earlier location.
<leader>sk
Search keymapssnacks
// tipSearch all active keymaps live. The built-in equivalent of this tool — useful to verify what a key is bound to in the current context.
<leader>sl
Location listsnacks
// tipOpen the location list in a fuzzy picker. Location lists are per-window and often populated by LSP diagnostics or compiler output.
<leader>sm
Markssnacks
// tipBrowse all marks in a picker. Marks let you bookmark exact cursor positions — use m{letter} to set one, then this to navigate.
<leader>sM
Man pagessnacks
// tipSearch and read system man pages without leaving Neovim. Great for looking up CLI tool options while writing shell scripts.
<leader>sq
Quickfix listsnacks
// tipOpen the quickfix list in a fuzzy picker. The quickfix list is global (unlike location lists) and often holds compiler errors or grep results.
<leader>sR
Resume last searchsnacks
// tipReopen the last picker with the same query. Saves you from retyping a search you just closed accidentally.
<leader>su
Undotreesnacks
// tipOpen the undo tree as a browsable timeline. Vim's undo history is a tree, not a line — this lets you recover changes that redo would miss.
<leader>sw
Search word/selectionsnacks
// tipGrep the project for the word under the cursor (or the visual selection). Faster than typing the word manually into <leader>/.
<leader>sb
Buffer linessnacks
// tipFuzzy-search lines within the current buffer. A lightweight alternative to / when you want to jump by content rather than exact pattern.
<leader>sB
Grep open bufferssnacks
// tipGrep across all currently open buffers. Useful when you know the text is in one of your recent files but can't remember which.
<leader>sc
Command historysnacks
// tipBrowse your : command history in a picker. Re-run complex commands without retyping them.
<leader>sC
Commandssnacks
// tipBrowse all available Neovim commands. Discover plugin commands you may not have memorised yet.
<leader>sd
Diagnosticssnacks
// tipList all LSP diagnostics across the project in a picker. Jump to any error or warning across all files at once.
<leader>sD
Buffer diagnosticssnacks
// tipList diagnostics for the current buffer only. A focused view when you want to fix this file before moving on.
<leader>s"
Registerssnacks
// tipBrowse all register contents. See everything you've yanked or recorded into named registers — then paste from any of them.
<leader>s/
Search historysnacks
// tipBrowse your / search history. Re-apply a past search pattern without retyping it.
<leader>sa
Autocmdssnacks
// tipBrowse all active autocommands. Useful for debugging why something triggers on save, open, or another event.
<leader>st
Todo commentssnacks
// tipFind all TODO comments across the project. Keep your technical debt visible — jump to any TODO and address it.
<leader>sT
Todo/Fix/Fixmesnacks
// tipFind TODO, FIX, and FIXME comments together. A triage view for all code that needs attention.
<leader>ss
LSP symbolssnacks
// tipBrowse all symbols (functions, classes, variables) in the current file. Jump to any definition without scrolling.
<leader>sS
LSP workspace symbolssnacks
// tipSearch symbols across the entire project. Find any class or function by name without knowing which file it's in.
<leader>sp
Search plugin specsnacks
// tipSearch your lazy.nvim plugin specs. Find and jump to any plugin configuration quickly.
<leader>:
Command historysnacks
// tipBrowse : command history from a convenient leader key. Same as <leader>sc — pick whichever feels faster to reach.
<leader>cl
LSP infolsp
// tipShow which language servers are attached to the current buffer. Use this first when LSP features stop working — confirms the server is running.
gd
Go to definitionlsp
// tipJump to where a symbol is defined. The most-used LSP shortcut — essential for reading unfamiliar code or tracing a function call.
gr
Go to referenceslsp
// tipFind every place a symbol is used across the project. Use before renaming or deleting — see the full blast radius first.
gI
Go to implementationlsp
// tipJump to the concrete implementation of an interface or abstract method. Especially useful in TypeScript, Go, and Java.
gy
Go to type definitionlsp
// tipJump to the type definition rather than the value definition. Use when gd takes you to a variable but you want to see its shape.
gD
Go to declarationlsp
// tipJump to the declaration (distinct from definition in C/C++ — takes you to the header file).
K
Hover documentationlsp
// tipShow inline docs for the symbol under cursor. Press K again to enter the hover window and scroll it. The fastest way to read an API without leaving the editor.
gK
Signature helplsp
// tipShow the function signature with parameter names and types. Use while typing arguments inside a function call to see what each position expects.
<leader>ca
Code actionlsp
// tipOpen a menu of context-aware actions from the language server — auto-imports, quick fixes, refactors. Look for the lightbulb indicator to know one is available.
<leader>cc
Run codelenslsp
// tipExecute a codelens action. Codelenses appear inline as virtual text (e.g. 'Run test', '2 references') — this key triggers the one nearest the cursor.
<leader>cC
Refresh & display codelenslsp
// tipForce a refresh of all codelens annotations in the current buffer. Use when the reference counts or test buttons look stale.
<leader>cR
Rename filelsp
// tipRename the current file and automatically update all imports that reference it. Far safer than renaming in the file explorer manually.
<leader>cr
Rename symbollsp
// tipRename the symbol under cursor across the entire project. All references update atomically — the safe way to rename a function or variable.
<leader>cA
Source actionlsp
// tipRun a source-level code action like 'Organize imports' or 'Fix all diagnostics'. Broader than <leader>ca which acts on the current position.
<leader>co
Organize importslsp
// tipSort and remove unused imports in the current file. Run this before committing to keep import blocks clean.
gai
Incoming callslsp
// tipShow which functions call the one under cursor. Use to understand the call graph — who triggers this code path?
gao
Outgoing callslsp
// tipShow which functions the current one calls. Use to understand what a function depends on before refactoring it.
<leader>cf
Format buffercore
// tipFormat the current file using the configured formatter (Prettier, Black, gofmt, etc.). Run before committing to keep diffs clean.
<leader>cF
Format injected languagesconform
// tipFormat embedded language blocks — like CSS inside a <style> tag or SQL inside a string. Formats only the injected sections, not the whole file.
<leader>cd
Line diagnosticscore
// tipShow a floating popup with all diagnostics on the current line. The full error message when the inline virtual text is truncated.
]d
Next diagnosticcore
// tipJump to the next diagnostic in the file (error, warning, or hint). Cycle through all issues in order with ]d and [d.
[d
Prev diagnosticcore
// tipJump to the previous diagnostic. Go back to an issue you passed over.
]e
Next errorcore
// tipJump to the next error only, skipping warnings and hints. Use when you want to fix blockers first.
[e
Prev errorcore
// tipJump to the previous error only. Pair with ]e to step through just the errors.
]w
Next warningcore
// tipJump to the next warning. Use after fixing all errors to clean up the warnings.
[w
Prev warningcore
// tipJump to the previous warning.
gco
Add comment belowcore
// tipInsert a comment line below the cursor and enter insert mode. Uses the correct comment syntax for the file type automatically.
gcO
Add comment abovecore
// tipInsert a comment line above the cursor and enter insert mode. Great for adding a header comment to a function.
<leader>cn
Generate annotationsneogen
// tipAuto-generate a JSDoc, docstring, or annotation template for the function or class under cursor. Fill in the blanks rather than writing boilerplate from scratch.
<leader>cs
Symbols (Aerial/Trouble)aerial
// tipOpen a symbol outline panel showing all functions and classes in the file. Navigate the structure of a long file at a glance.
<leader>cS
LSP refs/definitions (Trouble)trouble
// tipShow LSP references and definitions in Trouble's enhanced panel. Better than the default quickfix for browsing multiple results.
<leader>gL
Git log (cwd)snacks
// tipView the commit history for the current working directory. Scoped to your active package in a monorepo.
<leader>gb
Git blame linesnacks
// tipShow who last changed the current line and in which commit. Use to understand the context behind a piece of code before changing it.
<leader>gf
Git file historysnacks
// tipView the full commit history for the current file. Browse every change ever made to it and jump to any version.
<leader>gl
Git logsnacks
// tipView the full project git log. Browse commits, see diffs, and understand the project history without leaving Neovim.
<leader>gB
Git browse (open)snacks
// tipOpen the current file on GitHub (or GitLab/Bitbucket) in your browser. Line number is preserved — great for sharing links with teammates.
<leader>gY
Git browse (copy URL)snacks
// tipCopy the GitHub URL for the current file and line to clipboard. Paste into Slack or a PR comment to point teammates to exact code.
<leader>gd
Git diff (hunks)snacks
// tipView changed hunks since the last commit. See exactly what you've modified before staging.
<leader>gD
Git diff (origin)snacks
// tipDiff the current file against the remote origin. Useful when reviewing what's changed since the last push.
<leader>gs
Git statussnacks
// tipOpen an interactive git status panel. Stage and unstage files, view diffs, and prepare your commit without leaving Neovim.
<leader>gS
Git stashsnacks
// tipManage git stashes. Save your work-in-progress before switching branches and restore it later.
<leader>gg
GitUI (root dir)gitui
// tipLaunch GitUI — a full terminal git client inside Neovim. Commit, branch, merge, and rebase with a visual interface.
<leader>gG
GitUI (cwd)gitui
// tipLaunch GitUI scoped to the current working directory.
<leader>go
Toggle mini.diff overlaymini.diff
// tipToggle an inline diff overlay showing what changed in each hunk directly in the buffer. See additions and deletions without opening a diff view.
<leader>gi
GitHub issues (open)snacks
// tipBrowse open GitHub issues for the current repo. Check what's being tracked without switching to the browser.
<leader>gI
GitHub issues (all)snacks
// tipBrowse all GitHub issues including closed ones. Useful for finding context on past decisions.
<leader>gp
GitHub PRs (open)snacks
// tipBrowse open pull requests for the current repo. Review what your teammates have in flight.
<leader>gP
GitHub PRs (all)snacks
// tipBrowse all pull requests including merged and closed ones. Good for finding how a feature was implemented historically.
<leader>wd
Delete windowcore
// tipClose the current split window. The buffer stays open — only the pane is removed. The opposite of <leader>- or <leader>|.
<leader>wm
Toggle zoom modecore
// tipMaximize the current window temporarily, hiding all other splits. Toggle again to restore the previous layout.
<leader>-
Split window horizontallycore
// tipSplit the current window into two panes stacked vertically (one above the other). Useful for reading a file while editing another.
<leader>|
Split window verticallycore
// tipSplit the current window into two panes side by side. The classic layout for comparing two files.
<c-w><space>
Window hydra modewhich-key
// tipEnter window hydra mode for rapid resizing and rearranging. Stay in the mode and tap arrow keys to resize without holding modifiers.
<leader><tab>l
Last tabcore
// tipJump to the last active tab. Useful when you temporarily switched tabs and want to get back quickly.
<leader><tab>o
Close other tabscore
// tipClose all tabs except the current one. Clean up your workspace when you're done with parallel contexts.
<leader><tab>f
First tabcore
// tipJump to the first tab regardless of how many are open.
<leader><tab><tab>
New tabcore
// tipOpen a new tab. Tabs in Neovim hold their own window layout — useful for a completely separate working context.
<leader><tab>]
Next tabcore
// tipSwitch to the next tab.
<leader><tab>d
Close tabcore
// tipClose the current tab and its window layout. Buffers remain open.
<leader><tab>[
Previous tabcore
// tipSwitch to the previous tab.
<leader>uf
Toggle auto format (global)core
// tipToggle format-on-save for all files. Disable temporarily when working with legacy code that you don't want to reformat in bulk.
<leader>uF
Toggle auto format (buffer)core
// tipToggle format-on-save for the current buffer only. More surgical than the global toggle.
<leader>us
Toggle spellingcore
// tipToggle spell checking. Useful when writing documentation, commit messages, or markdown. Misspelled words get underlined.
<leader>uw
Toggle line wrapcore
// tipToggle soft line wrapping. Helpful for reading long lines in markdown or config files without horizontal scrolling.
<leader>uL
Toggle relative line numberscore
// tipToggle relative line numbers. With relative numbers, 5j jumps exactly 5 lines — makes count-based motions much easier to use.
<leader>ud
Toggle diagnosticscore
// tipToggle LSP diagnostic display. Turn off when the error highlighting is distracting while you're mid-refactor and know the code is temporarily broken.
<leader>ul
Toggle line numberscore
// tipToggle absolute line numbers. Pair with <leader>uL to switch between absolute and relative modes.
<leader>uc
Toggle conceal levelcore
// tipToggle concealment — the feature that hides markdown syntax like ** around bold text. Disable to see raw syntax while editing.
<leader>uT
Toggle treesitter highlightcore
// tipToggle treesitter syntax highlighting. Disable temporarily when treesitter is causing slowness or incorrect highlighting.
<leader>ub
Toggle dark backgroundcore
// tipToggle between dark and light background. Tells colorschemes which variant to use.
<leader>uD
Toggle dimmingcore
// tipDim inactive windows so your focus stays on the current split. Subtle but effective for deep work sessions with many open panes.
<leader>ug
Toggle indent guidescore
// tipToggle vertical indent guide lines. Helps see nesting depth in deeply indented code like nested callbacks or config blocks.
<leader>uS
Toggle smooth scrollcore
// tipToggle smooth scrolling animation. Turn off if scrolling feels laggy on a slower machine.
<leader>uh
Toggle inlay hintscore
// tipToggle LSP inlay hints — the inline grey type annotations that appear next to variables. Turn off if they clutter the view.
<leader>uz
Toggle zen modecore
// tipEnter Zen mode — a distraction-free full-screen layout that hides all UI chrome. Perfect for focused writing or deep coding sessions.
<leader>uC
Colorschemescore
// tipBrowse and preview colorschemes interactively. Switch themes live and see how they look before committing to one.
<leader>un
Dismiss all notificationssnacks
// tipClear all active notification popups at once. Use when multiple notifications are stacking up and blocking your view.
<leader>n
Notification historysnacks
// tipView all past notifications in a scrollable list. Check a message that disappeared before you could read it.
<leader>ui
Inspect positioncore
// tipShow the highlight group and treesitter node under the cursor. Use when customising a colorscheme to find the exact group name to override.
<leader>uI
Inspect treecore
// tipOpen the treesitter AST inspector. See the parsed syntax tree for the current file — useful when writing treesitter queries or debugging parsers.
<leader>ur
Redraw / clear hlsearchcore
// tipClear search highlighting without moving the cursor or running a new search. Press after n/N to remove the match highlights.
<leader>da
Run with argsnvim-dap
// tipStart a debug session and prompt for command-line arguments. Use when the program needs flags like --port 3000 or a config file path.
<leader>db
Toggle breakpointnvim-dap
// tipSet or remove a breakpoint on the current line. Execution will pause here when you run the debugger, letting you inspect state.
<leader>dB
Conditional breakpointnvim-dap
// tipSet a breakpoint that only triggers when an expression is true — e.g. i == 50. Saves you from hitting a breakpoint hundreds of times in a loop.
<leader>dc
Run / continuenvim-dap
// tipStart the debugger or resume execution after a pause. The primary key for beginning and continuing a debug session.
<leader>dC
Run to cursornvim-dap
// tipContinue execution until the line under cursor is reached. A quick alternative to setting and removing a temporary breakpoint.
<leader>di
Step intonvim-dap
// tipStep into the function call on the current line. Follow execution inside the callee to inspect its behaviour.
<leader>do
Step outnvim-dap
// tipStep out of the current function back to the caller. Use when you've seen enough inside a function and want to return.
<leader>dO
Step overnvim-dap
// tipExecute the current line and move to the next without entering any function calls. The most common step action.
<leader>dr
Toggle REPLnvim-dap
// tipOpen the debug REPL. Evaluate arbitrary expressions in the context of the paused program — inspect variables and test hypotheses.
<leader>dt
Terminatenvim-dap
// tipEnd the debug session immediately. Use when you've found the bug and don't need to run any further.
<leader>de
Evalnvim-dap-ui
// tipEvaluate the expression under cursor (or visual selection) in the current debug context. Faster than typing it into the REPL.
<leader>du
DAP UInvim-dap-ui
// tipToggle the DAP UI panel with variables, call stack, breakpoints, and watches. The full debugging dashboard.
<leader>td
Debug nearest testneotest
// tipRun the nearest test with the debugger attached. Set a breakpoint first, then use this to pause inside the test.
<leader>tl
Run last testneotest
// tipRe-run the last test without moving the cursor back to it. Use repeatedly after each fix to see if it passes.
<leader>tr
Run nearest testneotest
// tipRun the test function closest to the cursor. The primary shortcut for TDD — write a test, run it, fix the code.
<leader>ts
Toggle test summaryneotest
// tipOpen a tree view of all tests and their pass/fail status. See your entire test suite at a glance.
<leader>tt
Run test fileneotest
// tipRun all tests in the current file. Use when you've finished a component and want to verify everything at once.
<leader>tT
Run all test filesneotest
// tipRun the entire test suite. Use before committing to make sure nothing is broken.
<leader>tw
Toggle test watchneotest
// tipToggle watch mode — tests re-run automatically whenever you save. The ideal TDD feedback loop.
<leader>to
Show test outputneotest
// tipShow the full output from the last test run. Read stack traces and assertion messages to understand why a test failed.
<leader>tS
Stop testsneotest
// tipStop a running test suite. Use when you spot the failure immediately and don't need to wait for the rest to finish.
<leader>p
Open yank historyyanky
// tipBrowse everything you've yanked in a picker. Paste something you copied earlier in the session without losing your current clipboard.
[y
Cycle forward yank historyyanky
// tipAfter pasting, press [y to replace the pasted text with an earlier yank. Cycle back through your clipboard history.
]y
Cycle backward yank historyyanky
// tipAfter pasting, press ]y to move forward through yank history if you cycled too far back with [y.
gsa
Add surroundingmini.surround
// tipWrap text with a surrounding character. gsa + motion + character — e.g. gsaiw" wraps the word in double quotes.
gsd
Delete surroundingmini.surround
// tipRemove a surrounding pair. gsd" deletes the surrounding double quotes and everything between stays intact.
gsr
Replace surroundingmini.surround
// tipSwap one surrounding character for another. gsr"' changes double quotes to single quotes around the current text object.
gsh
Highlight surroundingmini.surround
// tipHighlight the surrounding pair under cursor. Visually confirm what will be affected before deleting or replacing.
<C-a>
Incrementdial
// tipIncrement a number, boolean, or date under the cursor. With dial.nvim, it also cycles true/false, weekdays, and other sequences.
<C-x>
Decrementdial
// tipDecrement a number or cycle a value backwards. Pair with <C-a> to adjust values without entering insert mode.
s
Flash jumpflash
// tipType 2 characters to jump anywhere visible on screen. Flash highlights matching positions with single-letter labels — press the label to land there instantly.
S
Flash treesitterflash
// tipJump to treesitter nodes using Flash. Useful for selecting entire functions, blocks, or expressions by their structure rather than text pattern.
r
Remote flashflash
// tipPerform an operator at a remote location without moving the cursor. Example: yank a word across the screen with yr{label}.
R
Treesitter searchflash
// tipSearch using treesitter node patterns. More semantic than text search — find code structures rather than character sequences.
<c-s>
Toggle flash searchflash
// tipToggle Flash labels while in / search mode. Overlay jump labels on top of search results to jump directly to any match.
<leader>rf
Extract functionrefactoring
// tipExtract the selected code into a new function. Select the block in visual mode first, then trigger this — the refactoring plugin handles the signature.
<leader>rx
Extract variablerefactoring
// tipExtract the selected expression into a named variable. Reduces duplication and makes intent clearer.
<leader>ri
Inline variablerefactoring
// tipInline a variable — replace all usages with its value and remove the declaration. The inverse of extract variable.
<leader>rp
Debug print variablerefactoring
// tipInsert a debug print statement for the variable under cursor. Uses the correct print function for the language (console.log, print, fmt.Println, etc.).
<leader>rc
Debug cleanuprefactoring
// tipRemove all debug print statements inserted by <leader>rp. Clean up before committing without hunting for each one manually.
<leader>1
Harpoon to file 1harpoon
// tipJump instantly to the first harpoon-marked file. Harpoon lets you pin your 4–5 most active files and switch between them with a single keystroke.
<leader>2
Harpoon to file 2harpoon
// tipJump to harpoon file 2. Set up your marks at the start of a session for zero-friction file switching.
<leader>3
Harpoon to file 3harpoon
// tipJump to harpoon file 3.
<leader>4
Harpoon to file 4harpoon
// tipJump to harpoon file 4.
<leader>5
Harpoon to file 5harpoon
// tipJump to harpoon file 5.
<leader>h
Harpoon quick menuharpoon
// tipOpen the Harpoon quick menu. View, reorder, and remove your pinned files. Edit it like a buffer — delete a line to unpin a file.
<leader>H
Harpoon add fileharpoon
// tipPin the current file to Harpoon. It's then accessible via <leader>1–5. Do this at the start of a focused work session.
<leader>ft
Terminal (root dir)core
// tipOpen a floating terminal at the project root. Run build commands, git operations, or scripts without leaving Neovim.
<leader>fT
Terminal (cwd)core
// tipOpen a floating terminal in the current working directory. Useful in monorepos where you want the terminal scoped to your active package.
<c-/>
Terminal (root dir)core
// tipQuickest terminal toggle — one chord to show or hide the floating terminal. Press again to dismiss it.
<leader>xl
Location listcore
// tipOpen the location list. Location lists are per-window and commonly populated by LSP diagnostics for the current buffer.
<leader>xq
Quickfix listcore
// tipOpen the quickfix list. It's global (shared across windows) and often holds compiler errors, grep results, or test failures.
[q
Previous quickfixcore
// tipJump to the previous item in the quickfix list. Use with ]q to step through errors or search results one by one.
]q
Next quickfixcore
// tipJump to the next quickfix item. The most efficient way to work through a list of errors — fix one, press ]q, fix the next.
<leader>xx
Diagnostics (Trouble)trouble
// tipOpen all project diagnostics in Trouble's enhanced panel. Grouped by file with icons and severity — easier to triage than the raw quickfix list.
<leader>xX
Buffer diagnostics (Trouble)trouble
// tipOpen diagnostics for only the current buffer in Trouble. Focused view when you want to fix this file completely before moving on.
<leader>xt
Todo (Trouble)todo-comments
// tipList all TODO comments in Trouble. Keep technical debt visible and jump to any item to address it.
<leader>ql
Restore last sessionpersistence
// tipRestore the previous session — all buffers, splits, and window layout. The fastest way to pick up exactly where you left off.
<leader>qs
Restore sessionpersistence
// tipRestore the session for the current directory. Each directory has its own saved session.
<leader>qS
Select sessionpersistence
// tipPick from a list of saved sessions. Switch between project contexts with their full layouts intact.
<leader>qd
Don't save current sessionpersistence
// tipExit without saving the current session. Use when you've opened files for a one-off task and don't want them restored next time.
<leader>qq
Quit allcore
// tipQuit Neovim and close all buffers. The clean exit — prompts you to save any unsaved changes.
[t
Previous todo commenttodo-comments
// tipJump to the previous TODO comment in the file. Step through your notes in reverse order.
]t
Next todo commenttodo-comments
// tipJump to the next TODO comment. Keep your work-in-progress notes visible while navigating the codebase.
<leader>l
Lazy (plugin manager)lazy
// tipOpen Lazy.nvim — the plugin manager. Update, install, clean, and inspect all your plugins from a single UI.
<leader>L
LazyVim changeloglazyvim
// tipRead the LazyVim changelog. Check what changed after an update to understand new defaults or breaking changes.
<leader>cm
Mason (LSP installer)mason
// tipOpen Mason — the LSP server, formatter, and linter installer. Install or update language servers for any language without leaving Neovim.
<leader>.
Toggle scratch buffersnacks
// tipToggle a scratch buffer — a quick notepad inside Neovim. Jot down notes, test code snippets, or draft text without creating a file.
<leader>?
Buffer keymaps (which-key)which-key
// tipShow all keymaps available in the current buffer and mode via which-key. The built-in help system for discovering shortcuts in context.
<esc>
Escape and clear hlsearchcore
// tipClear search highlighting after navigating to a result. In LazyVim, Escape in normal mode also dismisses the match highlights automatically.
<c-b>
Scroll message backwardnoice
// tipScroll a long Noice message (like a hover doc) backward. Use when the content overflows the popup and you need to read the top.
<c-f>
Scroll message forwardnoice
// tipScroll a long Noice message forward. Pair with <c-b> to read multi-page hover documentation or error details.
<leader>snd
Dismiss all noice messagesnoice
// tipClear all visible Noice notifications at once. Use when multiple messages are stacking up and covering your code.
<leader>snh
Noice historynoice
// tipBrowse the full Noice message history. Read a notification that disappeared before you could finish reading it.
<leader>snl
Noice last messagenoice
// tipShow the last Noice message again in a popup. The quickest way to re-read a message that just dismissed itself.
<leader>aa
Ask AI (Avante)avante
// tipOpen the AI assistant and ask a question about your code. Avante reads the current buffer as context automatically.
<leader>ac
Chat with AIavante
// tipOpen a persistent AI chat panel. Ask follow-up questions, iterate on code, or request explanations.
<leader>ae
Edit with AIavante
// tipSelect code in visual mode, then trigger this to ask the AI to rewrite or improve the selection in place.
<leader>am
Select AI modelavante
// tipSwitch between AI models (e.g. Claude Sonnet vs Opus, GPT-4o vs mini). Pick a faster model for quick questions and a stronger one for complex tasks.
<leader>at
Toggle AI panelavante
// tipShow or hide the AI panel. Keep it open during a coding session and toggle it away when you need full-screen space.
<leader>aq
Copilot quick chatcopilot
// tipOpen a lightweight Copilot chat popup for quick questions. Faster than the full chat panel for simple lookups.
<leader>Rs
Send HTTP requestkulala
// tipSend the HTTP request defined in the current .http file at the cursor. Results appear in a split below — no browser or Postman needed.
<leader>Rr
Replay last requestkulala
// tipResend the last HTTP request. Use after changing a payload or endpoint to quickly re-test without repositioning the cursor.
<leader>Re
Set environmentkulala
// tipSwitch the active environment (dev/staging/prod). Environment variables like {{base_url}} resolve to the selected environment's values.
<leader>Ri
Inspect requestkulala
// tipPreview the fully resolved request before sending — see headers, body, and substituted variables. Catch mistakes before hitting the server.
<leader>Rc
Copy as cURLkulala
// tipCopy the current request as a cURL command. Share it with a teammate or paste it into a terminal to run outside of Neovim.
<leader>Rn
Next requestkulala
// tipJump to the next HTTP request in the file. .http files can contain multiple requests separated by ### — navigate between them quickly.
<leader>Rp
Previous requestkulala
// tipJump to the previous HTTP request in the .http file.
<leader>RS
Show statskulala
// tipShow response statistics — timing breakdown, response size, and status. Use to diagnose slow endpoints.
<leader>Rt
Toggle headers/bodykulala
// tipToggle between viewing response headers and the response body. Check headers for auth issues, content-type, or rate-limit info.