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 chord mnml chord Source Notes
i I a A o O S R same vim.rs Insert variants
s substitute char cl vim.rs mnml gives Normal-mode s to flash (below). Visual s still changes the selection
(leap.nvim / flash.nvim s) s<a><b><label> vim.rsFlashStart Label every visible ab, press a label to jump, Esc cancels
Esc / Ctrl+[ same vim.rs Back to Normal
v V Ctrl+V same vim.rs Visual / line / block. Charwise v is inclusive of the cell under the cursor, as vim’s is — v y yanks one char, v l l y yanks three
hjkl same vim.rs Cursor
w b e ge W B E same vim.rs Word motion
0 ^ $ g_ same vim.rs Line ends
gg G nG same vim.rs Buffer ends
Ctrl+D Ctrl+U same vim.rs Half-page
Ctrl+F Ctrl+B same vim.rs Full-page
H M L same view.move_cursor_view_* Viewport top/mid/bottom
zz zt zb same view.cursor_to_* Scroll cursor in viewport
Ctrl+E Ctrl+Y same view.scroll_buffer_* Scroll one line
f<c> F<c> t<c> T<c> ; , same vim.rs Char find on line
% same editor.bracket_match Matching bracket
{ } same vim.rs Paragraph nav
( ) same vim.rs Sentence nav
* # same find.word_{forward,backward} Word under cursor
g* g# same vim.rs Partial-word variant
'' `` same vim.rs Last jump
Ctrl+O Ctrl+I same vim.rs Jumplist
g; g, same editor.jump_{prev,next}_edit Changelist
d c y > < = same vim.rs Operators
dd yy cc D Y C same vim.rs Line / from-cursor
gU gu ~ same vim.rs Case toggle
gq gqq gqap gqip same editor.reflow_paragraph Reflow to text_width
gJ J same vim.rs Join (no-space / space)
iw aw i( a( i" a" ip ap is as same vim.rs Text objects
if af ic ac ia aa ii ai same vim.rs Tree-sitter text objects
. same vim.dot_repeat Dot-repeat
u Ctrl+R same vim.rs Undo / redo
qaq @a @@ n@a same vim.macro_{toggle,replay} Macros
"ay "ap "+y "+p "0p same vim.rs Named / system / yank registers
ma 'a `a same vim.rs Marks
gd same lsp.goto_definition LSP
gD same lsp.goto_declaration LSP
K same lsp.hover LSP hover popup
gr same lsp.references LSP refs picker
gi same vim.go_to_last_insert Last insert position
gx same editor.open_url_at_cursor Open URL in OS browser
gf same view.split_open_file_under_cursor Open path under cursor
ga g8 same editor.char_info / editor.char_utf8 Char info
Ctrl+G g Ctrl+G same editor.file_info / editor.file_stats File info / stats
& same editor.repeat_last_substitute Repeat last :s
gn gN same find.select_match_{forward,backward} Select next/prev find match
NvChad / vim chord mnml chord Command id Notes
/ same find.find Forward find prompt
? same find.find_backward Reverse find prompt
n N same find.{next,prev} Next / prev match
* # same find.word_{forward,backward} Word under cursor
:noh / :nohlsearch same find.clear Clear highlights
:%s/old/new/g same vim.rs substitute Substitute
:%s/old/new/gc same vim.rs Confirm flow (y/n/a/q/l)
:Ag :Rg :grep :vimgrep :Rg <pat> find.grep Workspace grep → results pane
:cn :cp :cfirst :clast same qf.{next,prev,first,last} Quickfix nav
:copen :cclose :cwindow same vim.rs Quickfix pane
NvChad / vim chord mnml chord Command id Notes
:e <file> same vim.rs edit Opens existing or creates new buffer
:enew same vim.rs Empty buffer
:w :write same file.save Save
:wa :wall same file.save_all Save all
:q :quit same vim.rs Refuses if dirty
:q! same vim.rs Force quit
:wq :x :xit same vim.rs Write + quit
:qa :qall :wqa :wqall same vim.rs All-buffers variants
:bn :bnext same buffer.next Next buffer
:bp :bprev :bprevious same buffer.prev Previous buffer
:bd :bdelete same buffer.close Close buffer
:b <name> :buffer <name> same vim.rs Fuzzy buffer switch
:ls :buffers :files same vim.rs List buffers
:b# Ctrl+^ Ctrl+6 / Ctrl+Tab buffer.last Last buffer toggle
:tabnew :tabe :tabedit same tab.new New tab page
gt :tabnext same tab.next Next tab
gT :tabprev same tab.prev Prev tab
:tabfirst :tablast same tab.{first,last} First / last tab
:tabclose same tab.close Close active tab
:tabonly same tab.only Close other tabs
(NvChad’s <leader>x) <leader>bd or :bd or Ctrl+W buffer.close Close buffer (standard mode rebinds Ctrl+W)
:sp :split <leader>ss or :split view.split_down Horizontal split
:vsp :vsplit <leader>sv or :vsplit view.split_right Vertical split
Ctrl+W h/j/k/l same view.focus_{left,down,up,right} Move focus
Ctrl+W w same view.focus_next_split Cycle focus
Ctrl+W c same view.close_split Close split
Ctrl+W o :only same view.close_others Close other splits
Ctrl+W = same view.equalize_splits Balance splits
Ctrl+W _ same view.maximize_height Maximize height
`Ctrl+W ` same view.maximize_width
Ctrl+W + Ctrl+W - same view.split_{grow,shrink}_height Resize height
Ctrl+W > Ctrl+W < same view.split_{grow,shrink}_width Resize width
Ctrl+W r same view.rotate_splits Rotate splits
Ctrl+W H/J/K/L same view.move_split_{left,down,up,right} Move split
Ctrl+W T same view.move_to_new_tab Promote to tab
Ctrl+W d same view.split_goto_definition Split + go-to-def
Ctrl+W f same view.split_open_file_under_cursor Split + open path
Ctrl+W n same view.split_new_scratch Split + scratch buffer
NvChad / vim chord mnml chord Command id Notes
za zA same editor.toggle_fold Toggle fold at cursor
zo zO same editor.open_fold Open fold — idempotent, zo twice stays open
zc zC same editor.close_fold Close fold — idempotent
zf same editor.toggle_fold Fold the enclosing bracket pair
zf (Visual) same editor.fold_selection Fold the selected rows
zR zE same editor.unfold_all Open every fold
zM same editor.fold_all_brackets Fold every multi-line bracket pair
zj zk same editor.fold_next / editor.fold_prev Next / previous top-level fold
zh zl zH zL same view.hscroll_* Horizontal scroll

zO / zC are vim’s recursive forms; mnml’s folds are single-level and line-based, so they reduce to the same action rather than being dead chords. Same reasoning as zA. See Editing → folding chords.

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 files same picker.files
<leader>fb buffers same picker.buffers
<leader>fo recents (not bound under <leader>f) picker.recent Use Ctrl+R
<leader>fg grep <leader>fg find.grep NvChad 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.format Use Ctrl+Shift+I
<leader>fz find in buffer (not bound under <leader>f) find.find Use Ctrl+F or /
NvChad chord mnml chord Command id Notes
<leader>b new buffer (not bound) Use Ctrl+N or :enew
<leader>bn next buffer.next
<leader>bp previous buffer.prev
<leader>bd delete buffer.close
<leader>br reopen closed buffer.reopen NvChad doesn’t ship this
NvChad chord mnml chord Command id Notes
<leader>th themes <leader>tt theme.pick
<leader>te explorer view.toggle_tree Also <leader>e and Ctrl+B
<leader>tk vim ⇄ standard editor.toggle_keymap mnml-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 status same git.status_pane Staging view
<leader>gc commit same git.commit Editor for staged changes
<leader>gm AI (Claude) commit message git.ai_commit
<leader>gM AI rewrite HEAD msg git.ai_recompose git commit --amend with AI
<leader>gx Codex commit message git.codex_commit
<leader>gb blame same git.blame_toggle Gutter blame
<leader>gd diff same git.diff_file File diff (split)
<leader>gD diff worktree git.diff All changes
<leader>gA diff all vs HEAD git.diff_all Multi-file
<leader>gp peek change at cursor git.peek_change Popup
<leader>gl log same git.graph DAG browser
<leader>go checkout same git.checkout Branch picker
<leader>gn new branch git.new_branch
<leader>gw worktrees git.worktrees Shell in one
<leader>gS stash (with msg) git.stash
<leader>gP stash pop git.stash_pop
[c ]c hunk nav same git.jump_{prev,next}_change
]f [f same git.diff_{next,prev}_file Within diff pane
NvChad chord mnml chord Command id Notes
<leader>la code action same lsp.code_action Also Ctrl+.
<leader>lc complete same lsp.completion Also Ctrl+Space
<leader>ls symbols (file) same lsp.symbols Also Ctrl+Shift+O
<leader>lS workspace symbols same lsp.workspace_symbols
<leader>lo outline same outline.show Sidebar
<leader>ld definition same lsp.goto_definition Also gd, F12
<leader>lh hover same lsp.hover Also K
<leader>lr references same lsp.references Also gr
<leader>lR rename same lsp.rename
<leader>le diagnostics same lsp.diagnostics
<leader>ln next diag same lsp.next_diagnostic
<leader>lp prev diag same lsp.prev_diagnostic
<leader>lf format (not bound) lsp.format Use Ctrl+Shift+I
NvChad chord mnml chord Command id Notes
<leader>sv split right view.split_right
<leader>ss split down view.split_down
<leader>sh/sj/sk/sl focus view.focus_* Same hjkl layout
<leader>sw focus next view.focus_next_split
<leader>sc close split view.close_split
<leader>so close others view.close_others

mnml ships Harpoon-style file pinning out of the box.

Chord Command id Action
<leader>Ha harpoon.add Pin active file in next free slot
<leader>Hm harpoon.menu Picker over pinned files
<leader>1<leader>9 harpoon.goto_N Jump 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>Is snippet.pick
LuaSnip expand <leader>Ix / Ctrl+J snippet.expand Trigger 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>aa ai.ask Ask Claude
<leader>ae ai.explain Explain selection
<leader>af ai.fix Fix bugs
<leader>ar ai.refactor Refactor
<leader>aw ai.write_tests Write tests
<leader>am ai.session_view Mirror Claude session live
<leader>at term.shell Shell
<leader>ac ai.claude_code Claude Code dock
<leader>aC ai.chat Claude chat with context
<leader>ax ai.codex Codex dock
<leader>aM mixr.show Mixr DJ split
Chord Command id Action
<leader>hs http.send Send request
<leader>hy http.copy_curl Copy as curl
<leader>hd http.ai_debug Ask Claude (debug failing request)
NvChad chord mnml chord Command id Notes
(vim-test) <leader>ta <leader>Ta test.run_all
(vim-test) <leader>tf <leader>Tf test.run_file
(vim-test) <leader>tn <leader>Tt test.run_at_cursor
(vim-test) <leader>tl <leader>Tl test.rerun_failed
<leader>Th test.heal Claude heals failing test
<leader>Tw flaky.show Flaky dashboard

mnml has cross-host PR discovery (GitHub / GitLab / Bitbucket / Azure DevOps unified). NvChad has no analog.

Chord Command id Action
<leader>Pp pr.picker Cross-host fuzzy picker
<leader>Pr pr.refresh Refresh cross-host cache

Integration management + external-tool launchers. NvChad has no analog. The per-forge / cloud / database chords that lived under this trie until 2026-08 (forge.open_*) were removed alongside the ecosystem consolidation — each installed sibling now brings its own command + chord via its manifest, so a <leader>iL for AWS Lambda comes from mnml-aws-lambda’s manifest rather than mnml core.

Chord Command id Action
<leader>id integrations.show_details Detail pane for the focused chip
<leader>iE integrations.toggle_enabled Enable / disable a chip (picker)
<leader>ip integrations.icon_picker Browse Nerd Font glyphs
<leader>ih tools.htop htop
<leader>iI tools.iftop iftop
<leader>ir tools.btop btop

Any additional chords come from whatever launcher manifests you’ve installed via the Marketplace — each [[commands]] entry can carry a keys = ["<leader>i…"] binding that gets wired at load time.

Chord Command id Action
<leader>w file.save Save
<leader>q buffer.close Close buffer
<leader>e view.toggle_tree Toggle file rail
<leader>p palette Command palette
<leader>o task.run Run task
<leader>r app.restart Restart mnml (rebuild via run.sh)
<leader>m markdown.preview Markdown preview
<leader>B browser.open Open browser (CDP)
<leader>? view.cheatsheet Live cheatsheet pane

src/input/vim.rs ships ~120 ex-command names. Selected mappings — every common NvChad-era reflex is honored.

: command mnml behavior Notes
:w :write :wa :wall Save current / all
:q :qa :qall Quit current / all (refuses if dirty)
:q! :qa! Force quit
:wq :x :xit :wqa :wqall :xall Write + quit variants
:e <file> :edit :enew Open / new buffer 2026-06-07: :e <newfile> creates a buffer
:saveas <path> Save copy
:reload Re-read buffer from disk (refuses if dirty) file.reload
:bd :bdelete :bn :bp :bnext :bprev :bfirst :blast Buffer ops
:b <name> :buffer :buffers :ls :files Switch / list
:badd <file> Add buffer (don’t focus)
:sp :split :vsp :vsplit :close :only :resize Splits
:tabnew :tabe :tabedit :tabnext :tabprev :tabfirst :tablast :tabclose :tabonly Tabs
:set input=vim :set input=standard Flip input handler at runtime mnml-specific
:set wrap :set nowrap :set cc=80 :set text_width=N Editor toggles
:noh :nohlsearch Clear find highlight
:%s/old/new/g[c] :'<,'>s/… :.s/… :sub :substitute Substitute (ranges + flags)
:& Repeat last :s on current line editor.repeat_last_substitute
:earlier <N> :later <N> Time-machine undo
:redo :undo Same
:marks :jumps :history :messages :registers :reg Listings
:delm <a> Delete mark
:Ag <pat> :Rg <pat> :grep <pat> :vimgrep <pat> Workspace grep find.grep
:copen :cclose :cwindow :cnext :cprev :cfirst :clast Quickfix
:norm <chord> :normal Run Normal-mode chord on every selected line E.g. :'<,'>norm @a
:earlier 1f :earlier 5m Time-based undo
:G <args> :Git :Gblame :Gcommit :Gdiff :Glog fugitive-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 :Trim Title-case command aliases One word, no chord needed
:Files :Buffers :Lines :BLines :History :Marks :Maps :Keys :Snippets fzf.vim-style pickers
:term :terminal Open shell pane term.shell
:cd <dir> :pwd Change / print directory
:source <file> Source script
:retab Retab buffer
:sort [u] Sort selection / range
:Toast <msg> Drop a manual toast Useful from headless
:Explore :Lex :Lexplore :Sex :Sexplore :Vex :Vexplore netrw-style tree open Routes to view.toggle_tree / split equivalents
:version Version info
:colo :colorscheme Pick 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 save same file.save Survives in vim mode too
Ctrl+P Files same picker.files NvChad telescope analog
Ctrl+Shift+P palette same palette Also F1
Ctrl+B toggle tree same view.toggle_tree NvChad’s nvimtree toggle
Ctrl+R recents same picker.recent Picker over recently-opened
Ctrl+F find same find.find Mid-buffer dialog (not / style)
Ctrl+H replace-all same find.replace
Ctrl+Shift+F grep same find.grep Same as :Rg
Ctrl+L redraw same view.redraw
Ctrl+, open config same file.open_settings
Ctrl+E cycle focus tree ⇄ editor same focus.cycle mnml-specific; vim’s Ctrl+E scroll-line-down still works inside buffers
Alt+Left / Alt+Right same nav.{back,forward} Jumplist analog
Alt+1Alt+9 same tab.goto_N Tab N
F1 same palette or view.help Toggle help / palette
F3 / Shift+F3 same find.{next,prev}
F5 / Shift+F5 same dap.{run,continue} Debug
F9 / Shift+F9 same dap.toggle_breakpoint{,_conditional}
F10 / F11 / Shift+F11 same dap.{next,step_in,step_out}
F12 same lsp.goto_definition

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

NvChad / vim chord Status in mnml Notes
<leader>th themes renamed 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 rename use <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 buffer use <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
:Mason use Browse external tools palette / tools.installer
:Lazy (no plugin manager) mnml’s plugin model is the command registry + IPC
:Trouble use <leader>le (lsp.diagnostics)
:DiffviewOpen use git.diff / git.graph
<leader>ww window picker (not bound) Use Ctrl+W w
s substitute character s is flash/leap Use cl for vim’s substitute; S (substitute line) is unchanged
<leader>uX UI toggles spread 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