Skip to content

NvChad cheatsheet

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.

These work as vim built-ins — no remapping is involved, the vim input handler interprets them directly.

NvChad / vim chordmnml chordSourceNotes
i I a A o O s S Rsamevim.rsInsert variants
Esc / Ctrl+[samevim.rsBack to Normal
v V Ctrl+Vsamevim.rsVisual / line / block
hjklsamevim.rsCursor
w b e ge W B Esamevim.rsWord motion
0 ^ $ g_samevim.rsLine ends
gg G nGsamevim.rsBuffer ends
Ctrl+D Ctrl+Usamevim.rsHalf-page
Ctrl+F Ctrl+Bsamevim.rsFull-page
H M Lsameview.move_cursor_view_*Viewport top/mid/bottom
zz zt zbsameview.cursor_to_*Scroll cursor in viewport
Ctrl+E Ctrl+Ysameview.scroll_buffer_*Scroll one line
f<c> F<c> t<c> T<c> ; ,samevim.rsChar find on line
%sameeditor.bracket_matchMatching bracket
{ }samevim.rsParagraph nav
( )samevim.rsSentence nav
* #samefind.word_{forward,backward}Word under cursor
g* g#samevim.rsPartial-word variant
'' samevim.rsLast jump
Ctrl+O Ctrl+Isamevim.rsJumplist
g; g,sameeditor.jump_{prev,next}_editChangelist
d c y > < =samevim.rsOperators
dd yy cc D Y Csamevim.rsLine / from-cursor
gU gu ~samevim.rsCase toggle
gq gqq gqap gqipsameeditor.reflow_paragraphReflow to text_width
gJ Jsamevim.rsJoin (no-space / space)
iw aw i( a( i" a" ip ap is assamevim.rsText objects
if af ic ac ia aa ii aisamevim.rsTree-sitter text objects
.samevim.dot_repeatDot-repeat
u Ctrl+Rsamevim.rsUndo / redo
qaq @a @@ n@asamevim.macro_{toggle,replay}Macros
"ay "ap "+y "+p "0psamevim.rsNamed / system / yank registers
ma 'a `asamevim.rsMarks
gdsamelsp.goto_definitionLSP
gDsamelsp.goto_declarationLSP
Ksamelsp.hoverLSP hover popup
grsamelsp.referencesLSP refs picker
gisamevim.go_to_last_insertLast insert position
gxsameeditor.open_url_at_cursorOpen URL in OS browser
gfsameview.split_open_file_under_cursorOpen path under cursor
ga g8sameeditor.char_info / editor.char_utf8Char info
Ctrl+G g Ctrl+Gsameeditor.file_info / editor.file_statsFile info / stats
&sameeditor.repeat_last_substituteRepeat last :s
gn gNsamefind.select_match_{forward,backward}Select next/prev find match
NvChad / vim chordmnml chordCommand idNotes
/samefind.findForward find prompt
?samefind.find_backwardReverse find prompt
n Nsamefind.{next,prev}Next / prev match
* #samefind.word_{forward,backward}Word under cursor
:noh / :nohlsearchsamefind.clearClear highlights
:%s/old/new/gsamevim.rs substituteSubstitute
:%s/old/new/gcsamevim.rsConfirm flow (y/n/a/q/l)
:Ag :Rg :grep :vimgrep:Rg <pat>find.grepWorkspace grep → results pane
:cn :cp :cfirst :clastsameqf.{next,prev,first,last}Quickfix nav
:copen :cclose :cwindowsamevim.rsQuickfix pane
NvChad / vim chordmnml chordCommand idNotes
:e <file>samevim.rs editOpens existing or creates new buffer
:enewsamevim.rsEmpty buffer
:w :writesamefile.saveSave
:wa :wallsamefile.save_allSave all
:q :quitsamevim.rsRefuses if dirty
:q!samevim.rsForce quit
:wq :x :xitsamevim.rsWrite + quit
:qa :qall :wqa :wqallsamevim.rsAll-buffers variants
:bn :bnextsamebuffer.nextNext buffer
:bp :bprev :bprevioussamebuffer.prevPrevious buffer
:bd :bdeletesamebuffer.closeClose buffer
:b <name> :buffer <name>samevim.rsFuzzy buffer switch
:ls :buffers :filessamevim.rsList buffers
:b# Ctrl+^Ctrl+6 / Ctrl+Tabbuffer.lastLast buffer toggle
:tabnew :tabe :tabeditsametab.newNew tab page
gt :tabnextsametab.nextNext tab
gT :tabprevsametab.prevPrev tab
:tabfirst :tablastsametab.{first,last}First / last tab
:tabclosesametab.closeClose active tab
:tabonlysametab.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/lsameview.focus_{left,down,up,right}Move focus
Ctrl+W wsameview.focus_next_splitCycle focus
Ctrl+W csameview.close_splitClose split
Ctrl+W o :onlysameview.close_othersClose other splits
Ctrl+W =sameview.equalize_splitsBalance splits
Ctrl+W _sameview.maximize_heightMaximize height
`Ctrl+W`sameview.maximize_width
Ctrl+W + Ctrl+W -sameview.split_{grow,shrink}_heightResize height
Ctrl+W > Ctrl+W <sameview.split_{grow,shrink}_widthResize width
Ctrl+W rsameview.rotate_splitsRotate splits
Ctrl+W H/J/K/Lsameview.move_split_{left,down,up,right}Move split
Ctrl+W Tsameview.move_to_new_tabPromote to tab
Ctrl+W dsameview.split_goto_definitionSplit + go-to-def
Ctrl+W fsameview.split_open_file_under_cursorSplit + open path
Ctrl+W nsameview.split_new_scratchSplit + scratch buffer
NvChad / vim chordmnml chordCommand idNotes
zasameeditor.toggle_foldToggle fold
zRsameeditor.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 zLsameview.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 chordmnml chordCommand idNotes
<leader>ff filessamepicker.files
<leader>fb bufferssamepicker.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 chordmnml chordCommand idNotes
<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 chordmnml chordCommand idNotes
<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 chordmnml chordCommand idNotes
<leader>gs statussamegit.status_paneStaging view
<leader>gc commitsamegit.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 blamesamegit.blame_toggleGutter blame
<leader>gd diffsamegit.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 logsamegit.graphDAG browser
<leader>go checkoutsamegit.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 navsamegit.jump_{prev,next}_change
]f [fsamegit.diff_{next,prev}_fileWithin diff pane
NvChad chordmnml chordCommand idNotes
<leader>la code actionsamelsp.code_actionAlso Ctrl+.
<leader>lc completesamelsp.completionAlso Ctrl+Space
<leader>ls symbols (file)samelsp.symbolsAlso Ctrl+Shift+O
<leader>lS workspace symbolssamelsp.workspace_symbols
<leader>lo outlinesameoutline.showSidebar
<leader>ld definitionsamelsp.goto_definitionAlso gd, F12
<leader>lh hoversamelsp.hoverAlso K
<leader>lr referencessamelsp.referencesAlso gr
<leader>lR renamesamelsp.rename
<leader>le diagnosticssamelsp.diagnostics
<leader>ln next diagsamelsp.next_diagnostic
<leader>lp prev diagsamelsp.prev_diagnostic
<leader>lf format(not bound)lsp.formatUse Ctrl+Shift+I
NvChad chordmnml chordCommand idNotes
<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.

ChordCommand idAction
<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 equivalentmnml chordCommand idNotes
LuaSnip jump<leader>Issnippet.pick
LuaSnip 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.)

ChordCommand idAction
<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
ChordCommand idAction
<leader>hshttp.sendSend request
<leader>hyhttp.copy_curlCopy as curl
<leader>hdhttp.ai_debugAsk Claude (debug failing request)
NvChad chordmnml chordCommand idNotes
(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.

ChordCommand idAction
<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,…}-*).

ChordCommand idAction
<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
ChordCommand idAction
<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 behaviorNotes
: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 buffer2026-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 runtimemnml-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 lineeditor.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 grepfind.grep
:copen :cclose :cwindow :cnext :cprev :cfirst :clastQuickfix
:norm <chord> :normalRun Normal-mode chord on every selected lineE.g. :'<,'>norm @a
:earlier 1f :earlier 5mTime-based undo
:G <args> :Git :Gblame :Gcommit :Gdiff :Glogfugitive-styleAliased 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 aliasesOne word, no chord needed
:Files :Buffers :Lines :BLines :History :Marks :Maps :Keys :Snippetsfzf.vim-style pickers
:term :terminalOpen shell paneterm.shell
:cd <dir> :pwdChange / print directory
:source <file>Source script
:retabRetab buffer
:sort [u]Sort selection / range
:Toast <msg>Drop a manual toastUseful from headless
:Explore :Lex :Lexplore :Sex :Sexplore :Vex :Vexplorenetrw-style tree openRoutes to view.toggle_tree / split equivalents
:versionVersion info
:colo :colorschemePick themetheme.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 chordmnml chordCommand idNotes
Ctrl+S savesamefile.saveSurvives in vim mode too
Ctrl+P Filessamepicker.filesNvChad telescope analog
Ctrl+Shift+P palettesamepaletteAlso F1
Ctrl+B toggle treesameview.toggle_treeNvChad’s nvimtree toggle
Ctrl+R recentssamepicker.recentPicker over recently-opened
Ctrl+F findsamefind.findMid-buffer dialog (not / style)
Ctrl+H replace-allsamefind.replace
Ctrl+Shift+F grepsamefind.grepSame as :Rg
Ctrl+L redrawsameview.redraw
Ctrl+, open configsamefile.open_settings
Ctrl+E cycle focus tree ⇄ editorsamefocus.cyclemnml-specific; vim’s Ctrl+E scroll-line-down still works inside buffers
Alt+Left / Alt+Rightsamenav.{back,forward}Jumplist analog
Alt+1Alt+9sametab.goto_NTab N
F1samepalette or view.helpToggle help / palette
F3 / Shift+F3samefind.{next,prev}
F5 / Shift+F5samedap.{run,continue}Debug
F9 / Shift+F9samedap.toggle_breakpoint{,_conditional}
F10 / F11 / Shift+F11samedap.{next,step_in,step_out}
F12samelsp.goto_definition

Honest gaps. These are either intentional (mnml is not Neovim) or backlogged.

NvChad / vim chordStatus in mnmlNotes
<leader>th themesrenamed to <leader>tttheme.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+Ffind.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-3
zo / zc open / close fold (only)use za toggle
<leader>uX UI togglesspread across <leader>t… and palettemnml 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