markdown.nvim

markdown.nvim: Plugin to improve viewing Markdown files in Neovim.

Features

  • Functions entirely inside of Neovim with no external windows
  • Changes between rendered view in normal mode and raw view in all other modes
  • Changes window options between rendered and raw view based on configuration
    • Effects conceallevel & concealcursor by default
  • Supports rendering markdown injected into other file types
  • Renders the following markdown components:
    • Headings: highlight depending on level and replaces # with icon
    • Horizontal breaks: replace with full-width lines
    • Code blocks: highlight to better stand out
      • Adds language icon 1, requires icon provider (mini.icons or nvim-web-devicons)
      • Left pad lines within block 1
    • Inline code: highlight to better stand out
    • List bullet points: replace with provided icon based on level
    • Checkboxes: replace with provided icon based on whether they are checked
    • Block quotes: replace leading > with provided icon
    • Tables: replace border characters, does NOT automatically align
    • Callouts
      • Github & Obsidian out of the box, supports user defined as well
    • Custom checkbox states 1, function similar to callouts
    • Adds icon before images / links 1
    • LaTeX blocks: renders formulas if latex parser and pylatexenc are installed
  • Disable rendering when file is larger than provided value
  • Support custom handlers which are ran identically to builtin handlers
{
    'MeanderingProgrammer/markdown.nvim',
    name = 'render-markdown', -- Only needed if you have another plugin named markdown.nvim
    dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.nvim' }, -- if you use the mini.nvim suite
    -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.icons' }, -- if you use standalone mini plugins
    -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons
    config = function()
        require('render-markdown').setup({})
    end,
}