-
Notifications
You must be signed in to change notification settings - Fork 4
6.Customizing Keymaps
yousefhadder edited this page Dec 1, 2025
·
1 revision
markdown-plus.nvim provides <Plug> mappings for all features, allowing you to customize keybindings to your preference.
To disable all default keymaps and define your own:
require("markdown-plus").setup({
keymaps = {
enabled = false, -- Disable all default keymaps
},
})You can create custom keymaps using the provided <Plug> mappings. Add these to your Neovim configuration (after the plugin loads):
-- Normal mode
vim.keymap.set("n", "<C-b>", "<Plug>(MarkdownPlusBold)")
vim.keymap.set("n", "<C-i>", "<Plug>(MarkdownPlusItalic)")
vim.keymap.set("n", "<C-s>", "<Plug>(MarkdownPlusStrikethrough)")
vim.keymap.set("n", "<C-k>", "<Plug>(MarkdownPlusCode)")
vim.keymap.set("n", "<C-x>", "<Plug>(MarkdownPlusClearFormatting)")
-- Visual mode
vim.keymap.set("x", "<C-b>", "<Plug>(MarkdownPlusBold)")
vim.keymap.set("x", "<C-i>", "<Plug>(MarkdownPlusItalic)")
vim.keymap.set("x", "<C-s>", "<Plug>(MarkdownPlusStrikethrough)")
vim.keymap.set("x", "<C-k>", "<Plug>(MarkdownPlusCode)")
vim.keymap.set("x", "<leader>mw", "<Plug>(MarkdownPlusCodeBlock)")
vim.keymap.set("x", "<C-x>", "<Plug>(MarkdownPlusClearFormatting)")vim.keymap.set("n", "gn", "<Plug>(MarkdownPlusNextHeader)")
vim.keymap.set("n", "gp", "<Plug>(MarkdownPlusPrevHeader)")
vim.keymap.set("n", "<leader>h+", "<Plug>(MarkdownPlusPromoteHeader)")
vim.keymap.set("n", "<leader>h-", "<Plug>(MarkdownPlusDemoteHeader)")
vim.keymap.set("n", "<leader>ht", "<Plug>(MarkdownPlusGenerateTOC)")
vim.keymap.set("n", "<leader>hu", "<Plug>(MarkdownPlusUpdateTOC)")
vim.keymap.set("n", "<leader>hT", "<Plug>(MarkdownPlusOpenTocWindow)")
vim.keymap.set("n", "<CR>", "<Plug>(MarkdownPlusFollowLink)") -- Follow TOC link
-- Header levels (H1-H6)
for i = 1, 6 do
vim.keymap.set("n", "<leader>" .. i, "<Plug>(MarkdownPlusHeader" .. i .. ")")
endvim.keymap.set("n", "<leader>li", "<Plug>(MarkdownPlusInsertLink)")
vim.keymap.set("v", "<leader>li", "<Plug>(MarkdownPlusSelectionToLink)")
vim.keymap.set("n", "<leader>le", "<Plug>(MarkdownPlusEditLink)")
vim.keymap.set("n", "<leader>lr", "<Plug>(MarkdownPlusConvertToReference)")
vim.keymap.set("n", "<leader>ln", "<Plug>(MarkdownPlusConvertToInline)")
vim.keymap.set("n", "<leader>la", "<Plug>(MarkdownPlusAutoLinkURL)")vim.keymap.set("n", "<leader>mL", "<Plug>(MarkdownPlusInsertImage)")
vim.keymap.set("v", "<leader>mL", "<Plug>(MarkdownPlusSelectionToImage)")
vim.keymap.set("n", "<leader>mE", "<Plug>(MarkdownPlusEditImage)")
vim.keymap.set("n", "<leader>mA", "<Plug>(MarkdownPlusToggleImageLink)")-- Insert mode
vim.keymap.set("i", "<C-CR>", "<Plug>(MarkdownPlusListEnter)")
vim.keymap.set("i", "<A-CR>", "<Plug>(MarkdownPlusListShiftEnter)")
vim.keymap.set("i", "<C-]>", "<Plug>(MarkdownPlusListIndent)")
vim.keymap.set("i", "<C-[>", "<Plug>(MarkdownPlusListOutdent)")
vim.keymap.set("i", "<C-h>", "<Plug>(MarkdownPlusListBackspace)")
vim.keymap.set("i", "<C-t>", "<Plug>(MarkdownPlusToggleCheckbox)")
-- Normal mode
vim.keymap.set("n", "<leader>lr", "<Plug>(MarkdownPlusRenumberLists)")
vim.keymap.set("n", "<leader>ld", "<Plug>(MarkdownPlusDebugLists)")
vim.keymap.set("n", "o", "<Plug>(MarkdownPlusNewListItemBelow)")
vim.keymap.set("n", "O", "<Plug>(MarkdownPlusNewListItemAbove)")
vim.keymap.set("n", "<leader>mx", "<Plug>(MarkdownPlusToggleCheckbox)")
-- Visual mode
vim.keymap.set("x", "<leader>mx", "<Plug>(MarkdownPlusToggleCheckbox)")-- Normal mode
vim.keymap.set("n", "<C-q>", "<Plug>(MarkdownPlusToggleQuote)")
-- Visual mode
vim.keymap.set("x", "<C-q>", "<Plug>(MarkdownPlusToggleQuote)")-- Normal mode - Insert callout
vim.keymap.set("n", "<leader>mc", "<Plug>(MarkdownPlusInsertCallout)")
-- Visual mode - Wrap selection in callout
vim.keymap.set("x", "<leader>mc", "<Plug>(MarkdownPlusInsertCallout)")
-- Toggle callout type (cycle through types)
vim.keymap.set("n", "<leader>mC", "<Plug>(MarkdownPlusToggleCalloutType)")
-- Convert blockquote to callout
vim.keymap.set("n", "<leader>m>c", "<Plug>(MarkdownPlusConvertToCallout)")
-- Convert callout to blockquote
vim.keymap.set("n", "<leader>m>b", "<Plug>(MarkdownPlusConvertToBlockquote)")vim.keymap.set("n", "<leader>fi", "<Plug>(MarkdownPlusFootnoteInsert)")
vim.keymap.set("n", "<leader>fe", "<Plug>(MarkdownPlusFootnoteEdit)")
vim.keymap.set("n", "<leader>fd", "<Plug>(MarkdownPlusFootnoteDelete)")
vim.keymap.set("n", "<leader>fg", "<Plug>(MarkdownPlusFootnoteGotoDefinition)")
vim.keymap.set("n", "<leader>fr", "<Plug>(MarkdownPlusFootnoteGotoReference)")
vim.keymap.set("n", "<leader>fn", "<Plug>(MarkdownPlusFootnoteNext)")
vim.keymap.set("n", "<leader>fp", "<Plug>(MarkdownPlusFootnotePrev)")
vim.keymap.set("n", "<leader>fl", "<Plug>(MarkdownPlusFootnoteList)")-- Table operations with different prefix
vim.keymap.set("n", "<leader>Tc", "<Plug>(markdown-plus-table-create)")
vim.keymap.set("n", "<leader>Tf", "<Plug>(markdown-plus-table-format)")
vim.keymap.set("n", "<leader>Tn", "<Plug>(markdown-plus-table-normalize)")
-- Row operations
vim.keymap.set("n", "<leader>Tir", "<Plug>(markdown-plus-table-insert-row-below)")
vim.keymap.set("n", "<leader>TiR", "<Plug>(markdown-plus-table-insert-row-above)")
vim.keymap.set("n", "<leader>Tdr", "<Plug>(markdown-plus-table-delete-row)")
vim.keymap.set("n", "<leader>Tyr", "<Plug>(markdown-plus-table-duplicate-row)")
-- Column operations
vim.keymap.set("n", "<leader>Tic", "<Plug>(markdown-plus-table-insert-column-right)")
vim.keymap.set("n", "<leader>TiC", "<Plug>(markdown-plus-table-insert-column-left)")
vim.keymap.set("n", "<leader>Tdc", "<Plug>(markdown-plus-table-delete-column)")
vim.keymap.set("n", "<leader>Tyc", "<Plug>(markdown-plus-table-duplicate-column)")-
<Plug>(MarkdownPlusBold)- Toggle bold (n, x) -
<Plug>(MarkdownPlusItalic)- Toggle italic (n, x) -
<Plug>(MarkdownPlusStrikethrough)- Toggle strikethrough (n, x) -
<Plug>(MarkdownPlusCode)- Toggle inline code (n, x) -
<Plug>(MarkdownPlusCodeBlock)- Convert selection to code block (x) -
<Plug>(MarkdownPlusClearFormatting)- Clear all formatting (n, x)
-
<Plug>(MarkdownPlusNextHeader)- Jump to next header (n) -
<Plug>(MarkdownPlusPrevHeader)- Jump to previous header (n) -
<Plug>(MarkdownPlusPromoteHeader)- Promote header (n) -
<Plug>(MarkdownPlusDemoteHeader)- Demote header (n) -
<Plug>(MarkdownPlusGenerateTOC)- Generate TOC (n) -
<Plug>(MarkdownPlusUpdateTOC)- Update TOC (n) -
<Plug>(MarkdownPlusFollowLink)- Follow TOC link (n) -
<Plug>(MarkdownPlusOpenTocWindow)- Open navigable TOC window (n) -
<Plug>(MarkdownPlusHeader1)through<Plug>(MarkdownPlusHeader6)- Set header level (n)
-
<Plug>(MarkdownPlusInsertLink)- Insert new link (n) -
<Plug>(MarkdownPlusSelectionToLink)- Convert selection to link (v) -
<Plug>(MarkdownPlusEditLink)- Edit link under cursor (n) -
<Plug>(MarkdownPlusConvertToReference)- Convert to reference-style (n) -
<Plug>(MarkdownPlusConvertToInline)- Convert to inline link (n) -
<Plug>(MarkdownPlusAutoLinkURL)- Auto-convert URL to link (n)
-
<Plug>(MarkdownPlusInsertImage)- Insert new image (n) -
<Plug>(MarkdownPlusSelectionToImage)- Convert selection to image (v) -
<Plug>(MarkdownPlusEditImage)- Edit image under cursor (n) -
<Plug>(MarkdownPlusToggleImageLink)- Toggle between link and image (n)
-
<Plug>(MarkdownPlusListEnter)- Auto-continue list (i) -
<Plug>(MarkdownPlusListShiftEnter)- Continue list content on next line (i) -
<Plug>(MarkdownPlusListIndent)- Indent list item (i) -
<Plug>(MarkdownPlusListOutdent)- Outdent list item (i) -
<Plug>(MarkdownPlusListBackspace)- Smart backspace (i) -
<Plug>(MarkdownPlusRenumberLists)- Renumber lists (n) -
<Plug>(MarkdownPlusDebugLists)- Debug list groups (n) -
<Plug>(MarkdownPlusNewListItemBelow)- New item below (n) -
<Plug>(MarkdownPlusNewListItemAbove)- New item above (n) -
<Plug>(MarkdownPlusToggleCheckbox)- Toggle checkbox (n, x, i)
-
<Plug>(MarkdownPlusToggleQuote)- Toggle blockquote (n, x)
-
<Plug>(MarkdownPlusInsertCallout)- Insert/wrap callout (n, x) -
<Plug>(MarkdownPlusToggleCalloutType)- Toggle callout type (n) -
<Plug>(MarkdownPlusConvertToCallout)- Convert blockquote to callout (n) -
<Plug>(MarkdownPlusConvertToBlockquote)- Convert callout to blockquote (n)
-
<Plug>(MarkdownPlusFootnoteInsert)- Insert new footnote (n) -
<Plug>(MarkdownPlusFootnoteEdit)- Edit footnote definition (n) -
<Plug>(MarkdownPlusFootnoteDelete)- Delete footnote (n) -
<Plug>(MarkdownPlusFootnoteGotoDefinition)- Go to footnote definition (n) -
<Plug>(MarkdownPlusFootnoteGotoReference)- Go to footnote reference(s) (n) -
<Plug>(MarkdownPlusFootnoteNext)- Navigate to next footnote (n) -
<Plug>(MarkdownPlusFootnotePrev)- Navigate to previous footnote (n) -
<Plug>(MarkdownPlusFootnoteList)- List all footnotes (n)
-
<Plug>(markdown-plus-table-create)- Create table interactively (n) -
<Plug>(markdown-plus-table-format)- Format table (n) -
<Plug>(markdown-plus-table-normalize)- Normalize malformed table (n) -
<Plug>(markdown-plus-table-insert-row-below)- Insert row below (n) -
<Plug>(markdown-plus-table-insert-row-above)- Insert row above (n) -
<Plug>(markdown-plus-table-delete-row)- Delete current row (n) -
<Plug>(markdown-plus-table-duplicate-row)- Duplicate row (n) -
<Plug>(markdown-plus-table-insert-column-right)- Insert column right (n) -
<Plug>(markdown-plus-table-insert-column-left)- Insert column left (n) -
<Plug>(markdown-plus-table-delete-column)- Delete column (n) -
<Plug>(markdown-plus-table-duplicate-column)- Duplicate column (n) -
<Plug>(markdown-plus-table-toggle-cell-alignment)- Toggle cell alignment (n) -
<Plug>(markdown-plus-table-clear-cell)- Clear cell content (n) -
<Plug>(markdown-plus-table-move-row-up)- Move row up (n) -
<Plug>(markdown-plus-table-move-row-down)- Move row down (n) -
<Plug>(markdown-plus-table-move-column-left)- Move column left (n) -
<Plug>(markdown-plus-table-move-column-right)- Move column right (n) -
<Plug>(markdown-plus-table-transpose)- Transpose table (n) -
<Plug>(markdown-plus-table-sort-ascending)- Sort by column ascending (n) -
<Plug>(markdown-plus-table-sort-descending)- Sort by column descending (n) -
<Plug>(markdown-plus-table-to-csv)- Convert table to CSV (n) -
<Plug>(markdown-plus-table-from-csv)- Convert CSV to table (n)
You can keep the default keymaps enabled and override specific ones:
require("markdown-plus").setup({
keymaps = {
enabled = true, -- Keep defaults
},
})
-- Override only specific keymaps in your config
vim.keymap.set("n", "<C-b>", "<Plug>(MarkdownPlusBold)", { buffer = false }) -- Global overrideNote: The plugin uses hasmapto() to check if a <Plug> mapping is already mapped before setting defaults, so your custom mappings will take precedence.