This is the reference . NvChad chord on the left, mnml chord on the right, the command id mnml fires in the middle. For the narrative migration walkthrough — what mnml ships, what’s renamed, what’s intentionally missing — see Coming from NvChad . For the live in-app cheatsheet that walks your current keymap, open the pane with <leader>? or the palette command view.cheatsheet.
How to use this page
Use your browser’s find (Ctrl+F / Cmd+F) to grep for a chord, a command id, or an action verb.
Rows marked (not bound) are honest about chords NvChad has that mnml does not — either the feature exists under a different chord, or the feature isn’t here yet.
mnml ships in vim mode by default if you set [editor] input_style = "vim". Without that flag every Ctrl shortcut you see for VS Code-style users is also live in vim mode (mnml’s Keymap overlays both layers).
Vim mode reserves Ctrl+W, Ctrl+G, Ctrl+D, Ctrl+U for vim’s window / file-info / half-page chords — the global keymap removes those so vim semantics win.
These work as vim built-ins — no remapping is involved, the vim input handler interprets them directly.
NvChad / vim chord mnml chord Source Notes i I a A o O s S Rsame vim.rsInsert variants Esc / Ctrl+[same vim.rsBack to Normal v V Ctrl+Vsame vim.rsVisual / line / block hjklsame vim.rsCursor w b e ge W B Esame vim.rsWord motion 0 ^ $ g_same vim.rsLine ends gg G nGsame vim.rsBuffer ends Ctrl+D Ctrl+Usame vim.rsHalf-page Ctrl+F Ctrl+Bsame vim.rsFull-page H M Lsame view.move_cursor_view_*Viewport top/mid/bottom zz zt zbsame view.cursor_to_*Scroll cursor in viewport Ctrl+E Ctrl+Ysame view.scroll_buffer_*Scroll one line f<c> F<c> t<c> T<c> ; ,same vim.rsChar find on line %same editor.bracket_matchMatching bracket { }same vim.rsParagraph nav ( )same vim.rsSentence nav * #same find.word_{forward,backward}Word under cursor g* g#same vim.rsPartial-word variant '' “same vim.rsLast jump Ctrl+O Ctrl+Isame vim.rsJumplist g; g,same editor.jump_{prev,next}_editChangelist d c y > < =same vim.rsOperators dd yy cc D Y Csame vim.rsLine / from-cursor gU gu ~same vim.rsCase toggle gq gqq gqap gqipsame editor.reflow_paragraphReflow to text_width gJ Jsame vim.rsJoin (no-space / space) iw aw i( a( i" a" ip ap is assame vim.rsText objects if af ic ac ia aa ii aisame vim.rsTree-sitter text objects .same vim.dot_repeatDot-repeat u Ctrl+Rsame vim.rsUndo / redo qa … q @a @@ n@asame vim.macro_{toggle,replay}Macros "ay "ap "+y "+p "0psame vim.rsNamed / system / yank registers ma 'a `asame vim.rsMarks gdsame lsp.goto_definitionLSP gDsame lsp.goto_declarationLSP Ksame lsp.hoverLSP hover popup grsame lsp.referencesLSP refs picker gisame vim.go_to_last_insertLast insert position gxsame editor.open_url_at_cursorOpen URL in OS browser gfsame view.split_open_file_under_cursorOpen path under cursor ga g8same editor.char_info / editor.char_utf8Char info Ctrl+G g Ctrl+Gsame editor.file_info / editor.file_statsFile info / stats &same editor.repeat_last_substituteRepeat last :s gn gNsame find.select_match_{forward,backward}Select next/prev find match
NvChad / vim chord mnml chord Command id Notes /same find.findForward find prompt ?same find.find_backwardReverse find prompt n Nsame find.{next,prev}Next / prev match * #same find.word_{forward,backward}Word under cursor :noh / :nohlsearchsame find.clearClear highlights :%s/old/new/gsame vim.rs substituteSubstitute :%s/old/new/gcsame vim.rsConfirm flow (y/n/a/q/l) :Ag :Rg :grep :vimgrep:Rg <pat>find.grepWorkspace grep → results pane :cn :cp :cfirst :clastsame qf.{next,prev,first,last}Quickfix nav :copen :cclose :cwindowsame vim.rsQuickfix pane
NvChad / vim chord mnml chord Command id Notes :e <file>same vim.rs editOpens existing or creates new buffer :enewsame vim.rsEmpty buffer :w :writesame file.saveSave :wa :wallsame file.save_allSave all :q :quitsame vim.rsRefuses if dirty :q!same vim.rsForce quit :wq :x :xitsame vim.rsWrite + quit :qa :qall :wqa :wqallsame vim.rsAll-buffers variants :bn :bnextsame buffer.nextNext buffer :bp :bprev :bprevioussame buffer.prevPrevious buffer :bd :bdeletesame buffer.closeClose buffer :b <name> :buffer <name>same vim.rsFuzzy buffer switch :ls :buffers :filessame vim.rsList buffers :b# Ctrl+^Ctrl+6 / Ctrl+Tabbuffer.lastLast buffer toggle :tabnew :tabe :tabeditsame tab.newNew tab page gt :tabnextsame tab.nextNext tab gT :tabprevsame tab.prevPrev tab :tabfirst :tablastsame tab.{first,last}First / last tab :tabclosesame tab.closeClose active tab :tabonlysame tab.onlyClose other tabs (NvChad’s <leader>x) <leader>bd or :bd or Ctrl+Wbuffer.closeClose buffer (standard mode rebinds Ctrl+W) :sp :split<leader>ss or :splitview.split_downHorizontal split :vsp :vsplit<leader>sv or :vsplitview.split_rightVertical split Ctrl+W h/j/k/lsame view.focus_{left,down,up,right}Move focus Ctrl+W wsame view.focus_next_splitCycle focus Ctrl+W csame view.close_splitClose split Ctrl+W o :onlysame view.close_othersClose other splits Ctrl+W =same view.equalize_splitsBalance splits Ctrl+W _same view.maximize_heightMaximize height `Ctrl+W ` same view.maximize_widthCtrl+W + Ctrl+W -same view.split_{grow,shrink}_heightResize height Ctrl+W > Ctrl+W <same view.split_{grow,shrink}_widthResize width Ctrl+W rsame view.rotate_splitsRotate splits Ctrl+W H/J/K/Lsame view.move_split_{left,down,up,right}Move split Ctrl+W Tsame view.move_to_new_tabPromote to tab Ctrl+W dsame view.split_goto_definitionSplit + go-to-def Ctrl+W fsame view.split_open_file_under_cursorSplit + open path Ctrl+W nsame view.split_new_scratchSplit + scratch buffer
NvChad / vim chord mnml chord Command id Notes zasame editor.toggle_foldToggle fold zRsame editor.unfold_allOpen every fold zM(not bound) — “Close every fold” not exposed yet zo zc(not bound directly) — Use za; no separate open/close-only zh zl zH zLsame view.hscroll_*Horizontal scroll
NvChad picks <space> as the leader. mnml does too. The chord trie is in src/whichkey.rs; the which-key popup opens after <space> in Normal mode (and Ctrl+K in standard mode).
NvChad chord mnml chord Command id Notes <leader>ff filessame picker.files<leader>fb bufferssame picker.buffers<leader>fo recents(not bound under <leader>f) picker.recentUse Ctrl+R <leader>fg grep<leader>fgfind.grepNvChad parity — added 2026-06-08. Ctrl+Shift+F / :Rg also work. <leader>fh help(not bound) — mnml has no :help system; use this docs site <leader>fm formatter(not bound) editor.formatUse Ctrl+Shift+I <leader>fz find in buffer(not bound under <leader>f) find.findUse Ctrl+F or /
NvChad chord mnml chord Command id Notes <leader>b new buffer(not bound) — Use Ctrl+N or :enew — <leader>bn nextbuffer.next— <leader>bp previousbuffer.prev— <leader>bd deletebuffer.close— <leader>br reopen closedbuffer.reopenNvChad doesn’t ship this
NvChad chord mnml chord Command id Notes <leader>th themes<leader>tttheme.pick— <leader>te explorerview.toggle_treeAlso <leader>e and Ctrl+B — <leader>tk vim ⇄ standardeditor.toggle_keymapmnml-specific — flip input mode at runtime — <leader>th hidden (focused tree)view.toggle_hidden— <leader>tH hidden (all)view.toggle_hidden_all
NvChad’s git chords live under <leader>g (gitsigns / fugitive flavor). mnml’s git layer is richer than NvChad’s defaults — full graph DAG, AI commit messages, stash management, multi-repo.
NvChad chord mnml chord Command id Notes <leader>gs statussame git.status_paneStaging view <leader>gc commitsame git.commitEditor for staged changes — <leader>gm AI (Claude) commit messagegit.ai_commit— <leader>gM AI rewrite HEAD msggit.ai_recomposegit commit --amend with AI— <leader>gx Codex commit messagegit.codex_commit<leader>gb blamesame git.blame_toggleGutter blame <leader>gd diffsame git.diff_fileFile diff (split) — <leader>gD diff worktreegit.diffAll changes — <leader>gA diff all vs HEADgit.diff_allMulti-file — <leader>gp peek change at cursorgit.peek_changePopup <leader>gl logsame git.graphDAG browser <leader>go checkoutsame git.checkoutBranch picker — <leader>gn new branchgit.new_branch— <leader>gw worktreesgit.worktreesShell in one — <leader>gS stash (with msg)git.stash— <leader>gP stash popgit.stash_pop[c ]c hunk navsame git.jump_{prev,next}_change]f [fsame git.diff_{next,prev}_fileWithin diff pane
NvChad chord mnml chord Command id Notes <leader>la code actionsame lsp.code_actionAlso Ctrl+. <leader>lc completesame lsp.completionAlso Ctrl+Space <leader>ls symbols (file)same lsp.symbolsAlso Ctrl+Shift+O <leader>lS workspace symbolssame lsp.workspace_symbols<leader>lo outlinesame outline.showSidebar <leader>ld definitionsame lsp.goto_definitionAlso gd, F12 <leader>lh hoversame lsp.hoverAlso K <leader>lr referencessame lsp.referencesAlso gr <leader>lR renamesame lsp.rename<leader>le diagnosticssame lsp.diagnostics<leader>ln next diagsame lsp.next_diagnostic<leader>lp prev diagsame lsp.prev_diagnostic<leader>lf format(not bound) lsp.formatUse Ctrl+Shift+I
NvChad chord mnml chord Command id Notes — <leader>sv split rightview.split_right— <leader>ss split downview.split_down— <leader>sh/sj/sk/sl focusview.focus_*Same hjkl layout — <leader>sw focus nextview.focus_next_split— <leader>sc close splitview.close_split— <leader>so close othersview.close_others
mnml ships Harpoon-style file pinning out of the box.
Chord Command id Action <leader>Haharpoon.addPin active file in next free slot <leader>Hmharpoon.menuPicker over pinned files <leader>1 … <leader>9harpoon.goto_NJump to slot N
NvChad’s snippet integration is through cmp/LuaSnip; mnml’s is built-in.
NvChad equivalent mnml chord Command id Notes LuaSnip jump <leader>Issnippet.pickLuaSnip expand <leader>Ix / Ctrl+Jsnippet.expandTrigger word at cursor
mnml has no NvChad analog here — these are mnml-native. (NvChad has <leader>th for theme picker; mnml uses <leader>tt.)
Chord Command id Action <leader>aaai.askAsk Claude <leader>aeai.explainExplain selection <leader>afai.fixFix bugs <leader>arai.refactorRefactor <leader>awai.write_testsWrite tests <leader>amai.session_viewMirror Claude session live <leader>atterm.shellShell <leader>acai.claude_codeClaude Code dock <leader>aCai.chatClaude chat with context <leader>axai.codexCodex dock <leader>aMmixr.showMixr DJ split
Chord Command id Action <leader>hshttp.sendSend request <leader>hyhttp.copy_curlCopy as curl <leader>hdhttp.ai_debugAsk Claude (debug failing request)
NvChad chord mnml chord Command id Notes (vim-test) <leader>ta <leader>Tatest.run_all(vim-test) <leader>tf <leader>Tftest.run_file(vim-test) <leader>tn <leader>Tttest.run_at_cursor(vim-test) <leader>tl <leader>Tltest.rerun_failed— <leader>Thtest.healClaude heals failing test — <leader>Twflaky.showFlaky dashboard
mnml has cross-host PR discovery (GitHub / GitLab / Bitbucket / Azure DevOps unified). NvChad has no analog.
Chord Command id Action <leader>Pppr.pickerCross-host fuzzy picker <leader>Prpr.refreshRefresh cross-host cache
The sibling-binary launcher trie. NvChad has no analog — these are mnml-family viewers (each lives in a separate repo as mnml-{forge,aws,db,…}-*).
Chord Command id Action <leader>ibforge.open_bitbucketBitbucket viewer <leader>igforge.open_githubGitHub viewer <leader>ilforge.open_gitlabGitLab viewer <leader>izforge.open_azdevopsAzure DevOps viewer <leader>icforge.open_codebuildAWS CodeBuild <leader>isforge.open_s3Amazon S3 <leader>iAforge.open_azure_blobAzure Blob Storage <leader>iwforge.open_cloudwatch_logsCloudWatch Logs <leader>iaforge.open_amplifyAWS Amplify <leader>idforge.open_dynamodbDynamoDB <leader>iLforge.open_lambdaLambda functions <leader>ieforge.open_eventbridgeEventBridge <leader>iRforge.open_rdsRDS <leader>iCforge.open_ecsECS <leader>iEforge.open_ecrECR <leader>ioforge.open_cognitoCognito <leader>iqforge.open_sqsSQS <leader>iNforge.open_snsSNS <leader>iDforge.open_datadogDatadog <leader>iBforge.open_buttondownButtondown <leader>iSforge.open_slackSlack <leader>iTforge.open_teamsMicrosoft Teams <leader>iMforge.open_mandrillMandrill <leader>iKforge.open_dockerDocker <leader>iGforge.open_gmailGmail <leader>ijforge.open_jiraJira <leader>iFforge.open_cloudflareCloudflare <leader>ihtools.htophtop <leader>iItools.iftopiftop
Chord Command id Action <leader>wfile.saveSave <leader>qbuffer.closeClose buffer <leader>eview.toggle_treeToggle file rail <leader>ppaletteCommand palette <leader>otask.runRun task <leader>rapp.restartRestart mnml (rebuild via run.sh) <leader>mmarkdown.previewMarkdown preview <leader>Bbrowser.openOpen browser (CDP) <leader>?view.cheatsheetLive cheatsheet pane
src/input/vim.rs ships ~120 ex-command names. Selected mappings — every common NvChad-era reflex is honored.
: commandmnml behavior Notes :w :write :wa :wallSave current / all :q :qa :qallQuit current / all (refuses if dirty) :q! :qa!Force quit :wq :x :xit :wqa :wqall :xallWrite + quit variants :e <file> :edit :enewOpen / new buffer 2026-06-07: :e <newfile> creates a buffer :saveas <path>Save copy :reloadRe-read buffer from disk (refuses if dirty) file.reload:bd :bdelete :bn :bp :bnext :bprev :bfirst :blastBuffer ops :b <name> :buffer :buffers :ls :filesSwitch / list :badd <file>Add buffer (don’t focus) :sp :split :vsp :vsplit :close :only :resizeSplits :tabnew :tabe :tabedit :tabnext :tabprev :tabfirst :tablast :tabclose :tabonlyTabs :set input=vim :set input=standardFlip input handler at runtime mnml-specific :set wrap :set nowrap :set cc=80 :set text_width=NEditor toggles :noh :nohlsearchClear find highlight :%s/old/new/g[c] :'<,'>s/… :.s/… :sub :substituteSubstitute (ranges + flags) :&Repeat last :s on current line editor.repeat_last_substitute:earlier <N> :later <N>Time-machine undo :redo :undoSame :marks :jumps :history :messages :registers :regListings :delm <a>Delete mark :Ag <pat> :Rg <pat> :grep <pat> :vimgrep <pat>Workspace grep → find.grep :copen :cclose :cwindow :cnext :cprev :cfirst :clastQuickfix :norm <chord> :normalRun Normal-mode chord on every selected line E.g. :'<,'>norm @a :earlier 1f :earlier 5mTime-based undo :G <args> :Git :Gblame :Gcommit :Gdiff :Glogfugitive-style Aliased to mnml’s git layer :Blame :Branch :Branches :Commit :Diagnostics :Format :Hover :Log :QF :QuickFix :References :Rename :Stash :StashPop :Status :Symbols :Test :TestAll :TestFailed :TestFile :Flaky :TrimTitle-case command aliases One word, no chord needed :Files :Buffers :Lines :BLines :History :Marks :Maps :Keys :Snippetsfzf.vim-style pickers :term :terminalOpen shell pane term.shell:cd <dir> :pwdChange / print directory :source <file>Source script :retabRetab buffer :sort [u]Sort selection / range :Toast <msg>Drop a manual toast Useful from headless :Explore :Lex :Lexplore :Sex :Sexplore :Vex :Vexplorenetrw-style tree open Routes to view.toggle_tree / split equivalents :versionVersion info :colo :colorschemePick theme theme.pick
Even in vim mode, the global Keymap overlay still resolves these unless your vim handler intercepts them first. The exceptions vim mode reserves (so vim semantics win) are Ctrl+W, Ctrl+G, Ctrl+D, Ctrl+U.
Vim might-also-know-this chord mnml chord Command id Notes Ctrl+S savesame file.saveSurvives in vim mode too Ctrl+P Filessame picker.filesNvChad telescope analog Ctrl+Shift+P palettesame paletteAlso F1 Ctrl+B toggle treesame view.toggle_treeNvChad’s nvimtree toggle Ctrl+R recentssame picker.recentPicker over recently-opened Ctrl+F findsame find.findMid-buffer dialog (not / style) Ctrl+H replace-allsame find.replaceCtrl+Shift+F grepsame find.grepSame as :Rg Ctrl+L redrawsame view.redrawCtrl+, open configsame file.open_settingsCtrl+E cycle focus tree ⇄ editorsame focus.cyclemnml-specific; vim’s Ctrl+E scroll-line-down still works inside buffers Alt+Left / Alt+Rightsame nav.{back,forward}Jumplist analog Alt+1 … Alt+9same tab.goto_NTab N F1same palette or view.helpToggle help / palette F3 / Shift+F3same find.{next,prev}F5 / Shift+F5same dap.{run,continue}Debug F9 / Shift+F9same dap.toggle_breakpoint{,_conditional}F10 / F11 / Shift+F11same dap.{next,step_in,step_out}F12same lsp.goto_definition
Honest gaps. These are either intentional (mnml is not Neovim) or backlogged.
NvChad / vim chord Status in mnml Notes <leader>th themesrenamed to <leader>tt theme.pick<leader>n line numbers toggle(not bound) Toggle relative numbers exists as view.toggle_relative_numbers (palette only) <leader>rn LSP renameuse <leader>lR <leader>cm Comment.nvim(not bound under leader) Use Ctrl+/ or gc <leader>fa find all (project-wide)use <leader>fg (2026-06-08) or Ctrl+Shift+F find.grep<leader>x close bufferuse <leader>q or Ctrl+W gcc gc<motion> Comment.nvim(toggle line comment is Ctrl+/) Vim handler has no operator-pending gc; SEV-3 finding :help <topic>(no :help) This docs site is the substitute :Telescope <picker>use :Files / :Buffers / :History / :Marks / :Maps :Masonuse Browse external tools palette / tools.installer :Lazy(no plugin manager) mnml’s plugin model is the command registry + IPC :Troubleuse <leader>le (lsp.diagnostics) :DiffviewOpenuse git.diff / git.graph <leader>ww window picker(not bound) Use Ctrl+W w zM close all folds(not bound) zR works; close-all is missing — SEV-3zo / zc open / close fold (only)use za toggle <leader>uX UI togglesspread across <leader>t… and palette mnml has many but no umbrella menu <leader>th ASCII / Nerd toggle(not bound) mnml respects --ascii flag at launch
src/whichkey.rs — <leader> trie root
src/command.rs — every command + its default keyspecs
src/input/keymap.rs — keyspec parser + the Keymap overlay engine
src/input/vim.rs — vim handler + ex-command set
src/cheatsheet.rs — the in-app cheatsheet pane