Skip to content

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

ModeMappingAction
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>qqQuit 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)

MappingAction
<leader><space>Find files
<leader>/Grep
<leader>ffFind files
<leader>fgGrep
<leader>fbBuffers
<leader>frRecent files
<leader>fcCommands
<leader>fkKeymaps
<leader>fhHelp

All dispatch through the picker provider — see Pickers.

Buffers

MappingAction
<leader>`Toggle last file (native alternate file)
<leader>bdDelete buffer (via Snacks bufdelete if available)
<leader>bnNext buffer
<leader>bpPrevious buffer

Windows

MappingAction
<leader>wsSplit window below
<leader>wvSplit 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

MappingAction
<leader>eConfigured explorer (Oil by default; Snacks when editor.snacks-explorer is enabled)

Blak leaves Neovim’s native - motion alone.

Terminal

MappingAction
<leader>ttToggle 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)

ModeMappingAction
n]hNext hunk (or ]c inside a diff)
n[hPrevious hunk (or [c inside a diff)
n<leader>gsStage hunk
v<leader>gsStage selection range
n<leader>grReset hunk
v<leader>grReset selection range
n<leader>gSStage buffer
n<leader>gRReset buffer
n<leader>gpPreview hunk
n<leader>gbBlame line (full)
n<leader>gdDiff this

LSP (bound on LspAttach)

These map only when an LSP server attaches to the current buffer.

MappingAction
gdGo to definition
gDGo to declaration
gIGo to implementation
grReferences
KHover
<leader>caCode action
<leader>crRename
<leader>cfFormat buffer (Conform → LSP fallback)
<leader>csDocument symbols (picker)
<leader>cSWorkspace symbols (picker)

See the LSP guide.

Diagnostics

MappingAction
]dNext diagnostic (jumps + opens float)
[dPrevious diagnostic (jumps + opens float)
<leader>xxDiagnostics picker
<leader>xdLine diagnostic float

Blak & Lazy

MappingAction
<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

MappingAction
<leader>ufToggle format-on-save (buffer)

:BlakFormatToggle! toggles it globally. See Formatting.

Keymaps added or changed by extras

ExtraMappingAction
editor.window-navigation<C-h> / <C-j> / <C-k> / <C-l>Move between windows
ui.comfy-line-numberslabel + j / kComfy vertical motions
ui.comfy-line-numberslabel + <Down> / <Up>Comfy vertical motions
ui.zen<leader>uzZen mode
ui.indent<leader>ugToggle indent guides
git.lazygit<leader>ggLazyGit float
git.diffview<leader>gDDiffviewOpen
git.diffview<leader>gHFile history
git.gitbrowse<leader>gBOpen file/line on the Git remote
git.neogit<leader>gnOpen Neogit
ai.claudecode<leader>acToggle Claude Code
ai.claudecode<leader>aFFocus Claude Code
ai.claudecode<leader>arResume Claude Code
ai.claudecode<leader>aCContinue Claude Code
ai.claudecode<leader>amSelect Claude model
ai.claudecode<leader>abAdd current buffer
ai.claudecode<leader>asSend visual selection
ai.claudecode<leader>aAAccept Claude Code diff
ai.claudecode<leader>aDDeny Claude Code diff
ai.sidekick<C-.>Focus Sidekick CLI
ai.sidekick<leader>aaToggle Sidekick CLI
ai.sidekick<leader>asSelect Sidekick CLI
ai.sidekick<leader>adDetach Sidekick CLI session
ai.sidekick<leader>afSend file to Sidekick
ai.sidekick<leader>atSend current context to Sidekick
ai.sidekick<leader>avSend visual selection to Sidekick
ai.sidekick<leader>apPick Sidekick prompt
ai.supermaven<leader>aSToggle Supermaven
ai.supermaven<M-l>Accept inline suggestion
ai.supermaven<M-w>Accept one word
ai.supermaven<M-]>Clear inline suggestion
debug.dap<leader>dbToggle breakpoint
debug.dap<leader>dcContinue debugging
debug.dap<leader>di / <leader>do / <leader>dOStep into / over / out
debug.dap<leader>drToggle DAP REPL
debug.dap<leader>dtTerminate debug session
debug.dap<leader>duToggle dap-ui
lang.python-pro<leader>cvSelect Python virtualenv
test.neotest<leader>TnRun nearest test
test.neotest<leader>TfRun current file tests
test.neotest<leader>TdDebug nearest test
test.neotest<leader>TsToggle test summary
test.neotest<leader>ToOpen test output
test.neotest<leader>TOToggle test output panel
editor.aerial<leader>coToggle code outline
editor.flashs / SFlash jump / Treesitter select
editor.flashr / RFlash remote / Treesitter search
editor.flash<C-s>Toggle Flash while searching (command-line)
editor.grug-far<leader>srSearch and replace (project-wide)
editor.scratch<leader>.Toggle scratch buffer
editor.scratch<leader>SSelect scratch buffer
editor.overseer<leader>ooToggle tasks
editor.overseer<leader>orRun task
editor.overseer<leader>oqTask quick action
editor.refactoring<leader>reExtract function
editor.refactoring<leader>rfExtract function to file
editor.refactoring<leader>rvExtract variable
editor.refactoring<leader>riInline variable
editor.refactoring<leader>rIInline function
editor.refactoring<leader>rpPrint debug variable
editor.refactoring<leader>rcCleanup debug prints
editor.render-markdown<leader>umToggle Markdown rendering
editor.todo-comments]t / [tNext / previous TODO comment
editor.todo-comments<leader>xTTODO quickfix
editor.trouble<leader>xXTrouble diagnostics
editor.trouble<leader>xQTrouble quickfix
editor.trouble<leader>xLTrouble loclist
editor.trouble<leader>cOTrouble symbols
editor.trouble<leader>cRTrouble references
editor.harpoon<leader>haAdd current file to Harpoon
editor.harpoon<leader>hhToggle Harpoon quick menu
editor.harpoon<leader>hp / <leader>hnPrevious / next Harpoon file
editor.harpoon<leader>h1-<leader>h4Jump to Harpoon file
editor.neotree<leader>EToggle Neo-tree
editor.snacks-explorer<leader>eSnacks explorer
editor.snacks-terminalterminal.toggle_keySnacks 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, or user.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 :BlakKeys to see what your enabled extras and user.lua have registered.