Skip to content

6.Customizing Keymaps

yousefhadder edited this page Dec 1, 2025 · 1 revision

Customizing Keymaps

Custom Keymap Configuration

markdown-plus.nvim provides <Plug> mappings for all features, allowing you to customize keybindings to your preference.

Disabling Default Keymaps

To disable all default keymaps and define your own:

require("markdown-plus").setup({
  keymaps = {
    enabled = false,  -- Disable all default keymaps
  },
})

Using Mappings

You can create custom keymaps using the provided <Plug> mappings. Add these to your Neovim configuration (after the plugin loads):

Text Formatting

-- 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)")

Headers & TOC

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 .. ")")
end

Links

vim.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)")

Images

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)")

List Management

-- 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)")

Quotes

-- Normal mode
vim.keymap.set("n", "<C-q>", "<Plug>(MarkdownPlusToggleQuote)")
-- Visual mode
vim.keymap.set("x", "<C-q>", "<Plug>(MarkdownPlusToggleQuote)")

Callouts

-- 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)")

Footnotes

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)")

Tables

-- 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)")

Available Mappings

Text Formatting

  • <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)

Headers & TOC

  • <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)

Links

  • <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)

Images

  • <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)

List Management

  • <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)

Quotes

  • <Plug>(MarkdownPlusToggleQuote) - Toggle blockquote (n, x)

Callouts

  • <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)

Footnotes

  • <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)

Tables

  • <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)

Mixing Default and Custom Keymaps

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 override

Note: The plugin uses hasmapto() to check if a <Plug> mapping is already mapped before setting defaults, so your custom mappings will take precedence.

Clone this wiki locally