Keymaps
The rule: common operations get memorable mappings; uncommon operations get commands and pickers. Every keymap has a description and appears in :BlakKeys.
The leader is <Space>. Local leader is \.
All core keymaps are defined in lua/blak/core/keymaps.lua. Extras and user.lua can add more — they show up in :BlakKeys too.
Custom keymaps
Add or override mappings from lua/blak/user.lua with the keymaps list:
return { keymaps = { { key = "<leader>sg", action = "<cmd>BlakPick grep<cr>", description = "Grep" }, { mode = { "n", "x" }, key = "<leader>y", action = '"+y', description = "Yank to clipboard", }, { key = "<leader>rn", action = function() vim.lsp.buf.rename() end, description = "Rename symbol", }, { key = "<leader>/", disable = true }, },}Active entries require description so they stay discoverable through :BlakKeys.
Use mode for one mode or a list of modes, and use a command string or Lua
function for action. Use disable = true to disable a Blak mapping. To move a
default action, disable the old key and add the new one.
Edit & navigation
| Mode | Mapping | Action |
|---|---|---|
| n | <Esc> | Clear search highlight |
| n,i,x,s | <C-s> | Save (where Neovim leaves it free) |
| n,i,x,s | <D-s> | Save (where the UI forwards Command-s) |
| n | <leader>qq | Quit all (:qa) |
<C-s> and <D-s> are bound only if your config or a plugin hasn’t already claimed them. See map_if_available in the source.
Find (pickers)
| Mapping | Action |
|---|---|
<leader><space> | Find files |
<leader>/ | Grep |
<leader>ff | Find files |
<leader>fg | Grep |
<leader>fb | Buffers |
<leader>fr | Recent files |
<leader>fc | Commands |
<leader>fk | Keymaps |
<leader>fh | Help |
All dispatch through the picker provider — see Pickers.
Buffers
| Mapping | Action |
|---|---|
<leader>` | Toggle last file (native alternate file) |
<leader>bd | Delete buffer (via Snacks bufdelete if available) |
<leader>bn | Next buffer |
<leader>bp | Previous buffer |
Windows
| Mapping | Action |
|---|---|
<leader>ws | Split window below |
<leader>wv | Split window right |
These use Neovim’s native :rightbelow split and :rightbelow vsplit. Blak
only binds them when those keys are still free, so an existing user or plugin
mapping wins.
Explorer
| Mapping | Action |
|---|---|
<leader>e | Configured explorer (Oil by default; Snacks when editor.snacks-explorer is enabled) |
Blak leaves Neovim’s native - motion alone.
Terminal
| Mapping | Action |
|---|---|
<leader>tt | Toggle the configured terminal provider |
Change this mapping with terminal.toggle_key in lua/blak/user.lua. Set it
to false to leave terminal toggling command-only.
Git (gitsigns)
| Mode | Mapping | Action |
|---|---|---|
| n | ]h | Next hunk (or ]c inside a diff) |
| n | [h | Previous hunk (or [c inside a diff) |
| n | <leader>gs | Stage hunk |
| v | <leader>gs | Stage selection range |
| n | <leader>gr | Reset hunk |
| v | <leader>gr | Reset selection range |
| n | <leader>gS | Stage buffer |
| n | <leader>gR | Reset buffer |
| n | <leader>gp | Preview hunk |
| n | <leader>gb | Blame line (full) |
| n | <leader>gd | Diff this |
LSP (bound on LspAttach)
These map only when an LSP server attaches to the current buffer.
| Mapping | Action |
|---|---|
gd | Go to definition |
gD | Go to declaration |
gI | Go to implementation |
gr | References |
K | Hover |
<leader>ca | Code action |
<leader>cr | Rename |
<leader>cf | Format buffer (Conform → LSP fallback) |
<leader>cs | Document symbols (picker) |
<leader>cS | Workspace symbols (picker) |
See the LSP guide.
Diagnostics
| Mapping | Action |
|---|---|
]d | Next diagnostic (jumps + opens float) |
[d | Previous diagnostic (jumps + opens float) |
<leader>xx | Diagnostics picker |
<leader>xd | Line diagnostic float |
Blak & Lazy
| Mapping | Action |
|---|---|
<leader>ll | :Lazy |
<leader>lo | :Blak |
<leader>lc | :BlakConfig |
<leader>lu | :BlakUpdate |
<leader>lU | :BlakUpgrade |
<leader>lr | :BlakRollback |
<leader>ld | :BlakDoctor |
<leader>le | :BlakExtras |
<leader>lk | :BlakKeys |
<leader>ln | :BlakNews |
<leader>ls | :BlakSplash |
<leader>lt | :BlakToolsInstall |
<leader>lT | :BlakTreesitterInstall |
<leader>? | :BlakKeys |
Toggles
| Mapping | Action |
|---|---|
<leader>uf | Toggle format-on-save (buffer) |
:BlakFormatToggle! toggles it globally. See Formatting.
Keymaps added or changed by extras
| Extra | Mapping | Action |
|---|---|---|
editor.window-navigation | <C-h> / <C-j> / <C-k> / <C-l> | Move between windows |
ui.comfy-line-numbers | label + j / k | Comfy vertical motions |
ui.comfy-line-numbers | label + <Down> / <Up> | Comfy vertical motions |
ui.zen | <leader>uz | Zen mode |
ui.indent | <leader>ug | Toggle indent guides |
git.lazygit | <leader>gg | LazyGit float |
git.diffview | <leader>gD | DiffviewOpen |
git.diffview | <leader>gH | File history |
git.gitbrowse | <leader>gB | Open file/line on the Git remote |
git.neogit | <leader>gn | Open Neogit |
ai.claudecode | <leader>ac | Toggle Claude Code |
ai.claudecode | <leader>aF | Focus Claude Code |
ai.claudecode | <leader>ar | Resume Claude Code |
ai.claudecode | <leader>aC | Continue Claude Code |
ai.claudecode | <leader>am | Select Claude model |
ai.claudecode | <leader>ab | Add current buffer |
ai.claudecode | <leader>as | Send visual selection |
ai.claudecode | <leader>aA | Accept Claude Code diff |
ai.claudecode | <leader>aD | Deny Claude Code diff |
ai.sidekick | <C-.> | Focus Sidekick CLI |
ai.sidekick | <leader>aa | Toggle Sidekick CLI |
ai.sidekick | <leader>as | Select Sidekick CLI |
ai.sidekick | <leader>ad | Detach Sidekick CLI session |
ai.sidekick | <leader>af | Send file to Sidekick |
ai.sidekick | <leader>at | Send current context to Sidekick |
ai.sidekick | <leader>av | Send visual selection to Sidekick |
ai.sidekick | <leader>ap | Pick Sidekick prompt |
ai.supermaven | <leader>aS | Toggle Supermaven |
ai.supermaven | <M-l> | Accept inline suggestion |
ai.supermaven | <M-w> | Accept one word |
ai.supermaven | <M-]> | Clear inline suggestion |
debug.dap | <leader>db | Toggle breakpoint |
debug.dap | <leader>dc | Continue debugging |
debug.dap | <leader>di / <leader>do / <leader>dO | Step into / over / out |
debug.dap | <leader>dr | Toggle DAP REPL |
debug.dap | <leader>dt | Terminate debug session |
debug.dap | <leader>du | Toggle dap-ui |
lang.python-pro | <leader>cv | Select Python virtualenv |
test.neotest | <leader>Tn | Run nearest test |
test.neotest | <leader>Tf | Run current file tests |
test.neotest | <leader>Td | Debug nearest test |
test.neotest | <leader>Ts | Toggle test summary |
test.neotest | <leader>To | Open test output |
test.neotest | <leader>TO | Toggle test output panel |
editor.aerial | <leader>co | Toggle code outline |
editor.flash | s / S | Flash jump / Treesitter select |
editor.flash | r / R | Flash remote / Treesitter search |
editor.flash | <C-s> | Toggle Flash while searching (command-line) |
editor.grug-far | <leader>sr | Search and replace (project-wide) |
editor.scratch | <leader>. | Toggle scratch buffer |
editor.scratch | <leader>S | Select scratch buffer |
editor.overseer | <leader>oo | Toggle tasks |
editor.overseer | <leader>or | Run task |
editor.overseer | <leader>oq | Task quick action |
editor.refactoring | <leader>re | Extract function |
editor.refactoring | <leader>rf | Extract function to file |
editor.refactoring | <leader>rv | Extract variable |
editor.refactoring | <leader>ri | Inline variable |
editor.refactoring | <leader>rI | Inline function |
editor.refactoring | <leader>rp | Print debug variable |
editor.refactoring | <leader>rc | Cleanup debug prints |
editor.render-markdown | <leader>um | Toggle Markdown rendering |
editor.todo-comments | ]t / [t | Next / previous TODO comment |
editor.todo-comments | <leader>xT | TODO quickfix |
editor.trouble | <leader>xX | Trouble diagnostics |
editor.trouble | <leader>xQ | Trouble quickfix |
editor.trouble | <leader>xL | Trouble loclist |
editor.trouble | <leader>cO | Trouble symbols |
editor.trouble | <leader>cR | Trouble references |
editor.harpoon | <leader>ha | Add current file to Harpoon |
editor.harpoon | <leader>hh | Toggle Harpoon quick menu |
editor.harpoon | <leader>hp / <leader>hn | Previous / next Harpoon file |
editor.harpoon | <leader>h1-<leader>h4 | Jump to Harpoon file |
editor.neotree | <leader>E | Toggle Neo-tree |
editor.snacks-explorer | <leader>e | Snacks explorer |
editor.snacks-terminal | terminal.toggle_key | Snacks terminal |
Design notes
- No hidden chords. If a Blak mapping isn’t in this page or in
:BlakKeys, it doesn’t exist in core, enabled extras, oruser.lua. - Mnemonic grouping.
<leader>f*find,<leader>b*buffers,<leader>g*git,<leader>c*code,<leader>x*diagnostics,<leader>l*Lazy/Blak,<leader>t*terminal,<leader>u*UI toggles,<leader>w*windows,<leader>q*quit. map_if_available. Keys like<C-s>and<D-s>are only set when not already mapped — they yield to native bindings or another plugin’s claim.- Extras and user config add to or retarget this list. Run
:BlakKeysto see what your enabled extras anduser.luahave registered.