README.md

April 29, 2026 ยท View on GitHub

โ˜„๏ธ Markview.nvim

A hackable Markdown, HTML, LaTeX, Typst & YAML previewer for Neovim.

:set wrap:set nowrap
wrapnowrap
๐Ÿ“š Wiki | ๐Ÿงฉ Extras | ๐Ÿ“ฆ Presets

โœจ Features

Core features,

  • Preview Markdown, HTML, LaTeXLaTeX, Typst & Asciidoc(See integrations#Asciidoc) within Neovim.
  • Hybrid editing mode! Allowing editing & previewing at the same time.
  • Splitview! Allows editing & previewing side-by-side.
  • Wrap support(markdown only, at the moment)! Allows using text wrapping while not losing most rendering features! See integrations#wrap for fixing visual glitches or integrations#nowrap for disabling it.
  • Highly customisable! You can change almost anything using the config!
  • Dynamic highlight groups that automatically updates with the colorscheme!
  • Callout, checkbox completions for blink.cmp & nvim-cmp.
  • Works with tree-sitter injections too!

๐Ÿ“š Table of contents

Also see,

๐Ÿ“œ Complete feature-list

Expand to see complete feature list

Asciidoc

Supported syntax,

  • Admonitions
  • Checkboxes(also supports custom checkbox states).
  • Horizontal rules
  • Literal blocks
  • Hiding document attributes
  • Image macros
  • Keycode macros
  • List items(ordered & unordered)
  • Automated TOC(Table of Contents)

Asciidoc inline

Supported syntax,

  • Bold
  • Highlights
  • Italic
  • Monospace
  • URI

Fancy comments,

Comments are still experimental! The original parser only supports basic features.

Conventional commit style comments with support for a subset of markdown & vimdoc. See integrations#fancy-comments For more info.

Supported syntax,

  • Tasks(e.g. feat, TODO etc.)
  • Task scopes.

Extra syntax(needs external parser),

  • **Bold**
  • *Italic*
  • Code
  • 'Quoted_text'
  • "Double quoted text"
  • @mentions
  • issues/reference#52
  • https://example.com
  • |help-section|
  • Code blocks

HTML,

  • Customizable previews for container & void elements.

  • Supports the following container elements out of the box,

    • <a></a>
    • <b></b>
    • <code></code>
    • <em></em>
    • <i></i>
    • <kbd></kbd>
    • <mark></mark>
    • <pre></pre>
    • <s></s>, <strike></strike>, <del></del>
    • <strong></strong>
    • <sub></sub>
    • <sup></sup>
    • <u></u>
  • Supports the following void elements out of the box,

    • <hr>
    • <br>

LaTeX,

  • Supports basic LaTeX syntax,

    • Math blocks(typically $$...$$) & inline math(typically $...$).
    • Escaped characters.
    • Math fonts
    • Math symbols.
    • \text{}.
  • Supports commonly used math commands out of the box,

    • \frac{}
    • \sin{}
    • \cos{}
    • \tan{}
    • \sinh{}
    • \cosh{}
    • \tanh{}
    • \csc{}
    • \sec{}
    • \cot{}
    • \csch{}
    • \sech{}
    • \coth{}
    • \arcsin{}
    • \arccos{}
    • \arctan{}
    • \arg{}
    • \deg{}
    • \drt{}
    • \dim{}
    • \exp{}
    • \gcd{}
    • \hom{}
    • \inf{}
    • \ker{}
    • \lg{}
    • \lim{}
    • \liminf{}
    • \limsup{}
    • \ln{}
    • \log{}
    • \min{}
    • \max{}
    • \Pr{}
    • \sup{}
    • \sqrt{}
    • \lvert{}
    • \lVert{}
    • \boxed{}
  • Supports the following math fonts(requires any modern Unicode font),

    • default(Default math font).
    • \mathbb{}
    • \mathbf{}
    • \mathbffrak{}
    • \mathbfit{}
    • \nathbfscr{}
    • \mathcal{}
    • \mathfrak{}
    • \mathsf{}
    • \mathsfbf{}
    • \mathsfbfit{}
    • \mathsfit{}
    • \mathtt{}
  • Supports Unicode based subscript & superscript texts.

  • Supports 2056 different math symbol definitions.

Markdown,

  • Supports basic markdown(Github-flavored) syntax,

    • Block quotes(with support for callouts & titles).
    • Fenced code blocks.
    • Headings(setext & atx).
    • Horizontal rules.
    • List items(+, -, *, n. & n)).
    • Minus & plus metadata.
    • Reference link definitions.
    • Tables.
    • Checkboxes(supports minimal-style checkboxes).
    • Email links.
    • Entity references.
    • Escaped characters.
    • Footnotes.
    • Hyperlinks.
    • Images.
    • Inline codes/Code spans.
    • Autolinks
  • Wrap support for,

    • Block quotes & Callouts.
    • Sections(when markdown.headings.org_indent is used).
    • List items(when markdown.list_items.<item>.add_padding is true).
    • tables(limited due to technical limitations).
  • Org-mode like indentation for headings.

  • Obsidian/PKM extended syntax support,

    • Block reference links.
    • Embed file links.
    • Internal links(supports aliases).
    • Tags.
  • Wide variety of HTML entity names & codes support.

    • Supported named entities: 786.
    • Supported entity codes
  • Github emoji shorthands support. Supports 1920 shorthands.

  • Custom configuration based on link patterns.

Typst,

  • Supports the following items,

    • Code blocks.
    • Code spans.
    • Escaped characters.
    • Headings.
    • Labels.
    • List items(-, + & n.).
    • Math blocks.
    • Math spans.
    • Raw blocks.
    • Raw spans.
    • Reference links.
    • Subscripts.
    • Superscripts.
    • Symbols.
    • Terms.
    • URL links.
  • Supports a variety of typst symbols,

    • Symbol entries: 932
    • Symbol shorthands: 40
  • Supports Unicode based subscript & superscript texts.

YAML,

  • Custom property icons.

  • Custom property scope decorations.

  • Custom icons(/decorations) based on property type & value(e.g. booleans).

  • Supports the following properties out of the box,

    • tags.
    • aliases.
    • cssclasses.
    • publish.
    • permalink.
    • description.
    • images.
    • cover.

Hybrid mode

Normal hybrid modeLinewise hybrid mode
hybrid_modelinewise_hybrid_mode
  • Node-based edit range(default). Clears a range of lines covered by the (named)TSNode under the cursor. Useful when editing lists, block quotes, code blocks, tables etc.

  • Range-based edit range. Clears the selected number of lines above & below the cursor.

  • Supports multi-window setups.

Splitview

  • View previews in a separate window.
  • Scroll sync between raw file & preview window.

Others

Internal Icon provider features,

  • 708 different filetype configuration.
  • Dynamic highlight groups for matching the colorscheme.
  • You can use :Markview traceShow to see what the plugin has been doing(including how long some of them took).
  • You can also use :Markview traceExport to export these logs.

๐Ÿ“š Requirements

System,

  • Neovim: >= 0.10.3

Note

It is recommended to use nowrap(though there is wrap support in the plugin) & expandtab.


Colorscheme,

  • Any tree-sitter based colorscheme is recommended.

External icon providers,

Note

You need to change the config to use the desired icon provider.

{
    preview = {
        icon_provider = "internal", -- "mini" or "devicons"
    }
}

Parsers,

Tip

You can use nvim-treesitter to easily install parsers. You can install all the parsers with the following command,

:TSInstall markdown markdown_inline html latex typst yaml

Important

On windows, you might need tree-sitter CLI for the LaTeXLaTeX parser.

Fonts,

  • Any modern Unicode font is required for math symbols.
  • Nerd fonts are recommended.

Tip

It is recommended to run :checkhealth markview after installing the plugin to check if any potential issues exist.

๐Ÿ“ Installation

๐Ÿ“ฆ vim.pack

Add this to your init.lua.

vim.pack.add({
    "https://github.com/OXY2DEV/markview.nvim",
})

๐Ÿงฉ Vim-plug

Add this to your plugin list.

Plug 'OXY2DEV/markview.nvim'

๐Ÿ’ค Lazy.nvim

Warning

Do not lazy load this plugin as it is already lazy-loaded. Lazy-loading may cause more time for the previews to load when starting Neovim!

The plugin should be loaded after your colorscheme to ensure the correct highlight groups are used. See integrations.transparent_colorschemes if you use a transparent colorscheme and the colors don't look right.

-- For `plugins/markview.lua` users.
return {
    "OXY2DEV/markview.nvim",
    lazy = false,

    -- Completion for `blink.cmp`
    -- dependencies = { "saghen/blink.cmp" },
};
-- For `plugins.lua` users.
{
    "OXY2DEV/markview.nvim",
    lazy = false,

    -- Completion for `blink.cmp`
    -- dependencies = { "saghen/blink.cmp" },
},

๐Ÿฆ  Mini.deps

local MiniDeps = require("mini.deps");

MiniDeps.add({
    source = "OXY2DEV/markview.nvim",

    -- Completion for `blink.cmp`
    -- depends = { "saghen/blink.cmp" },
});

๐ŸŒ’ Rocks.nvim

Warning

luarocks package may sometimes be a bit behind main.

:Rocks install markview.nvim

๐Ÿ“ฅ GitHub release

Tagged releases can be found in the release page.

Note

Github releases may sometimes be slightly behind main.

๐Ÿชฒ Known bugs

  • code spans don't get recognized when on the line after a code block(if the line after the code span is empty). This is most likely due to some bug in either the markdown or the markdown_inline parser.

  • Incorrect wrapping when setting wrap using modeline. This is due to textoff being 0(instead of the size of the statuscolumn) when entering a buffer.

๐Ÿงญ Usage

You can find more usage recipes here.

๐ŸŽ‡ Commands

This plugin follows the sub-commands approach for creating commands. There is only a single :Markview command.

It comes with the following sub-commands,

Note

When no sub-command name is provided(or an invalid sub-command is used) :Markview will run :Markview Toggle.

Sub-commandArgumentsDescription
TogglenoneToggles preview globally.
EnablenoneEnables preview globally.
DisablenoneDisables preview globally.
togglebuffer, integerToggles preview for buffer.
enablebuffer, integerEnables preview for buffer.
disablebuffer, integerDisables preview for buffer.
splitTogglenoneToggles splitview.
Advanced commands are given below Sub-commands related to auto-registering new buffers for previews and/or manually attaching/detaching buffers,
Sub-commandArgumentsDescription
attachbuffer, integerAttaches to buffer.
detachbuffer, integerDetaches from buffer.
StartnoneAllows attaching to new buffers.
StopnonePrevents attaching to new buffers.

Sub-commands related to controlling hybrid_mode,

Sub-commandArgumentsDescription
HybridEnablenoneEnables hybrid mode.
HybridDisablenoneDisables hybrid mode.
HybridTogglenoneToggles hybrid mode.
hybridEnablebuffer, integerEnables hybrid mode for buffer.
hybridDisablebuffer, integerDisables hybrid mode for buffer.
hybridTogglebuffer, integerToggles hybrid mode for buffer.
linewiseEnablenoneEnables linewise hybrid mode.
linewiseDisablenoneDisables linewise hybrid mode.
linewiseTogglenoneToggles linewise hybrid mode.

Sub-commands for working with splitview,

Sub-commandArgumentsDescription
splitOpenbuffer, integerOpens splitview for buffer.
splitClosenoneCloses any open splitview.
splitRedrawnoneUpdates splitview contents.

Sub-commands for manual preview updates,

Sub-commandArgumentsDescription
renderbuffer, integerRenders preview for buffer.
clearbuffer, integerClears preview for buffer.
RendernoneUpdates preview of all active buffers.
ClearnoneClears preview of all active buffer.

Sub-commands for bug report,

Sub-commandArgumentsDescription
traceExportnoneExports trace logs to markview_log.txt.
traceShownoneShows trace logs in a window.

Tip

buffer defaults to the current buffer. So, you can run commands on the current buffer without providing the buffer.

:Markview toggle "Toggles preview of the current buffer.

โœ… Contributing to the projects

If you have time and want to make this project better, consider helping me fix any of these issues,

  • Add support for more filetypes in the internal icon provider.
  • Optimization of require("markview.renderers.markdown").output().
  • Optimization of the table renderer.
  • Stricter logic to reduce preview redraws.
  • Make splitview update as little content as possible.
  • Make the help files/wiki more beginner friendly.