-
Notifications
You must be signed in to change notification settings - Fork 54
Home
![](https://github.com/OXY2DEV/markview.nvim/raw/images/v25/repo/markdown-catppuccin_mocha.png)
A hackable markdown, HTML, Typst
& YAML previewer for Neovim.
Note
This wiki assumes you have basic understanding of LuaCATS
annotations.
If you don't, check out this section.
Make sure you read this to understand how the type definitions in the wiki are written.
-- β Main option name
-- [ Markdown | Block quotes ] --------------------------------------------------------------
-- β Sub option name
--- This is the type used in the configuration table.
---@class markdown.block_quotes
---
---@field enable boolean A normal option.
---
--- A dynamic option that can have a function as value. It receives these parameters,
--- buffer: Buffer number
--- item: the item that will is being rendered.
--- It returns a `string`.
---@field default block_quotes.opts | fun(buf: integer, item: __markdown.block_quotes): block_quotes.opts
-- [ Markdown | Block quotes β’ Static ] -----------------------------------------------------
-- βΎβββββ΄ This is the resulting configuration
-- table that will be used by the plugin
-- βΎβββββ΄ Static configuration classes end with `static`
---@class markdown.block_quotes.static
---
---@field enable boolean Option description.
---@field default block_quotes.opts Another option description.
-- Type definition for any
-- βΎββββββββββββββββ΄ options that are inside `block_quotes`.
-- [ Markdown | Block quotes > Type definitions ] -------------------------------------------
---@class block_quotes.opts
---
---@field border string | fun(buffer: integer, item: __markdown.block_quotes): string
---@field border_hl string? | fun(buffer: integer, item: __markdown.block_quotes): string?
-- βΎβββββββββ΄ Definitions for the parameters.
-- [ Markdown | Block quotes > Parameters ] -------------------------------------------------
---@class __markdown.block_quotes
---
---@field class "markdown_block_quote"
---
---@field text string[]
---@field range node.range
Click for config jump-scare
--- Configuration table for `markview.nvim`.
---@class mkv.config
---
---@field experimental config.experimental | fun(): config.experimental
---@field highlight_groups { [string]: config.hl } | fun(): { [string]: config.hl }
---@field html config.html | fun(): config.html
---@field latex config.latex | fun(): config.latex
---@field markdown config.markdown | fun(): config.markdown
---@field markdown_inline config.markdown_inline | fun(): config.markdown_inline
---@field preview config.preview | fun(): config.preview
---@field renderers config.renderer[] | fun(): config.renderer[]
---@field typst config.typst | fun(): config.typst
---@field yaml config.yaml | fun(): config.yaml
mkv.config = {
experimental = {
date_formats = {},
date_time_formats = {},
text_filetypes = {},
read_chunk_size = 1000,
link_open_alerts = false,
file_open_command = "tabnew",
list_empty_line_tolerance = 3
},
highlight_groups = {},
preview = {
enable = true,
filetypes = { "md", "rmd", "quarto" },
ignore_buftypes = { "nofile" },
ignore_previews = {},
modes = { "n", "no", "c" },
hybrid_modes = {},
debounce = 50,
draw_range = { vim.o.lines, vim.o.lines },
edit_range = { 1, 0 },
callbacks = {},
splitview_winopts = { split = "left" }
},
renderers = {},
html = {
enable = true,
container_elements = {},
headings = {},
void_elements = {},
},
latex = {
enable = true,
blocks = {},
commands = {},
escapes = {},
fonts = {},
inlines = {},
parenthesis = {},
subscripts = {},
superscripts = {},
symbols = {},
texts = {}
},
markdown = {
enable = true,
block_quotes = {},
code_blocks = {},
headings = {},
horizontal_rules = {},
list_items = {},
metadata_plus = {},
metadata_minus = {},
tables = {}
},
markdown_inline = {
enable = true,
block_references = {},
checkboxes = {},
emails = {},
embed_files = {},
entities = {},
escapes = {},
footnotes = {},
highlights = {},
hyperlinks = {},
images = {},
inline_codes = {},
internal_links = {},
uri_autolinks = {}
},
typst = {
enable = true,
codes = {},
escapes = {},
headings = {},
labels = {},
list_items = {},
math_blocks = {},
math_spans = {},
raw_blocks = {},
raw_spans = {},
reference_links = {},
subscripts = {},
superscript = {},
symbols = {},
terms = {},
url_links = {}
},
yaml = {
enable = true,
properties = {}
}
}
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-command | Arguments | Description |
---|---|---|
Start |
none | Allows attaching to new buffers. |
Stop |
none | Prevents attaching to new buffers. |
ββββββββββββ | βββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ |
attach |
buffer, integer | Attaches to buffer. |
detach |
buffer, integer | Detaches from buffer. |
ββββββββββββ | βββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ |
Enable |
none | Enables preview globally. |
Disable |
none | Disables preview globally. |
Toggle |
none | Toggles preview globally. |
ββββββββββββ | βββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ |
enable |
buffer, integer | Enables preview for buffer. |
disable |
buffer, integer | Disables preview for buffer. |
toggle |
buffer, integer | Toggles preview for buffer. |
ββββββββββββ | βββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ |
splitOpen |
buffer, integer | Opens splitview for buffer. |
splitClose |
none | Closes any open splitview. |
splitToggle |
none | Toggles splitview. |
splitRedraw |
none | Updates splitview contents. |
ββββββββββββ | βββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ |
Render |
none | Updates preview of all active buffers. |
Clear |
none | Clears preview of all active buffer. |
ββββββββββββ | βββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ |
render |
buffer, integer | Renders preview for buffer. |
clear |
buffer, integer | Clears preview for buffer. |
ββββββββββββ | βββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ |
toggleAll |
none |
Deprecated version of Toggle . |
enableAll |
none |
Deprecated version of Enable . |
disableAll |
none |
Deprecated version of Disable . |
ββββββββββββ | βββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ |
traceExport |
none | Exports trace logs to trace.txt . |
traceShow |
none | Shows 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.
markview.nvim
emits various autocmd events during different parts of the rendering allowing users to extend the plugin's functionality.
vim.api.nvim_create_autocmd("User", {
pattern = "MarkviewAttach",
callback = function (event)
--- This will have all the data you need.
local data = event.data;
vim.print(data);
end
})
Note
Autocmds are executed after callbacks!
Currently emitted autocmds are,
-
MarkviewAttach Called when attaching to a buffer.
Arguments,
-
buffer
, integer The buffer that's being attached to. -
windows
, integer[] List of windows attached tobuffer
.
-
-
MarkviewDetach Called when detaching from a buffer.
Arguments,
-
buffer
, integer The buffer that's being detached from. -
windows
, integer[] List of windows attached tobuffer
.
-
-
MarkviewDisable Called when disabling previews in a buffer.
Arguments,
-
buffer
, integer The buffer whose the preview was disabled. -
windows
, integer[] List of windows attached tobuffer
.
-
-
MarkviewEnable Called when enabling previews in a buffer.
Arguments,
-
buffer
, integer The buffer whose the preview was enabled. -
windows
, integer[] List of windows attached tobuffer
.
-
-
MarkviewSplitviewClose Called when the splitview window is closed. Called before splitview is closed.
Arguments,
-
source
, integer The buffer whose contents are being shown. -
preview_buffer
, integer The buffer that's showing the preview. -
preview_window
, integer The window where thepreview_buffer
is being shown.
-
-
MarkviewSplitviewOpen Called when the splitview window is opened.
Arguments,
-
source
, integer The buffer whose contents are being shown. -
preview_buffer
, integer The buffer that's showing the preview. -
preview_window
, integer The window where thepreview_buffer
is being shown.
-
markview.nvim
creates a number of primary highlight groups that are used by most of the decorations.
Important
These groups are all generated during runtime and as such their colors may look different.
If you want to create your own dynamic highlight groups or modify existing ones, see the custom highlight groups section.
Highlight group | Generated from | Default |
---|---|---|
MarkviewPalette0 | Normal(bg) + Comment(fg) | fg: #9399b2 bg: #35374a
|
MarkviewPalette0Fg | Comment(fg) | fg: #9399b2
|
MarkviewPalette0Bg | Normal(bg) + Comment(fg) | bg: #35374a
|
MarkviewPalette0Sign | Normal(bg) + Comment(fg), LineNr(bg) | fg: #9399b2
|
ββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ | βββββββββββββββββββββββββββ |
MarkviewPalette1 | Normal(bg) + markdownH1(fg) | fg: #f38ba8 bg: #4d3649
|
MarkviewPalette1Fg | markdownH1(fg) | fg: #f38ba8
|
MarkviewPalette1Bg | Normal(bg) + markdownH1(fg) | bg: #4d3649
|
MarkviewPalette1Sign | Normal(bg) + markdownH1(fg), LineNr(bg) | fg: #f38ba8
|
ββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ | βββββββββββββββββββββββββββ |
MarkviewPalette2 | Normal(bg) + markdownH2(fg) | fg: #f9b387 bg: #4d3d43
|
MarkviewPalette2Fg | markdownH2(fg) | fg: #f9b387
|
MarkviewPalette2Bg | Normal(bg) + markdownH2(fg) | bg: #4d3d43
|
MarkviewPalette2Sign | Normal(bg) + markdownH2(fg), LineNr(bg) | fg: #f9b387
|
ββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ | βββββββββββββββββββββββββββ |
MarkviewPalette3 | Normal(bg) + markdownH3(fg) | fg: #f9e2af bg: #4c474b
|
MarkviewPalette3Fg | markdownH3(fg) | fg: #f9e2af
|
MarkviewPalette3Bg | Normal(bg) + markdownH3(fg) | bg: #4c474b
|
MarkviewPalette3Sign | Normal(bg) + markdownH3(fg), LineNr(bg) | fg: #f9e2af
|
ββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ | βββββββββββββββββββββββββββ |
MarkviewPalette4 | Normal(bg) + markdownH4(fg) | fg: #a6e3a1 bg: #3c4948
|
MarkviewPalette4Fg | markdownH4(fg) | fg: #a6e3a1
|
MarkviewPalette4Bg | Normal(bg) + markdownH4(fg) | bg: #3c4948
|
MarkviewPalette4Sign | Normal(bg) + markdownH4(fg), LineNr(bg) | fg: #a6e3a1
|
ββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ | βββββββββββββββββββββββββββ |
MarkviewPalette5 | Normal(bg) + markdownH5(fg) | fg: #74c7ec bg: #314358
|
MarkviewPalette5Fg | markdownH5(fg) | fg: #74c7ec
|
MarkviewPalette5Bg | Normal(bg) + markdownH5(fg) | bg: #314358
|
MarkviewPalette5Sign | Normal(bg) + markdownH5(fg), LineNr(bg) | fg: #74c7ec
|
ββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ | βββββββββββββββββββββββββββ |
MarkviewPalette6 | Normal(bg) + markdownH6(fg) | fg: #b4befe bg: #3c405b
|
MarkviewPalette6Fg | markdownH6(fg) | fg: #b4befe
|
MarkviewPalette6Bg | Normal(bg) + markdownH6(fg) | bg: #3c405b
|
MarkviewPalette6Sign | Normal(bg) + markdownH6(fg), LineNr(bg) | fg: #b4befe
|
ββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββ | βββββββββββββββββββββββββββ |
MarkviewPalette7 | Normal(bg) + @conditional(fg) | fg: #cba6f7 bg: #403b5a
|
MarkviewPalette7Fg | @conditional(fg) | fg: #cba6f7
|
MarkviewPalette7Bg | Normal(bg) + @conditional(fg) | bg: #403b5a
|
MarkviewPalette7Sign | Normal(bg) + @conditional(fg), LineNr(bg) | fg: #cba6f7
|
The source highlight group's values are turned into
Lab
color-space and then mixed to reduce unwanted results.
These groups are then used as links by other groups responsible for various preview elements,
Note
These groups exist for the sake of backwards compatibility and ease of use.
You will see something like fg: Normal
, it means the fg of Normal was used as the fg of that group.
Highlight group | value |
---|---|
MarkviewBlockQuoteDefault | link: MarkviewPalette0Fg
|
MarkviewBlockQuoteError | link: MarkviewPalette1Fg
|
MarkviewBlockQuoteNote | link: MarkviewPalette5Fg
|
MarkviewBlockQuoteOk | link: MarkviewPalette4Fg
|
MarkviewBlockQuoteSpecial | link: MarkviewPalette3Fg
|
MarkviewBlockQuoteWarn | link: MarkviewPalette2Fg
|
βββββββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββββ |
MarkviewCheckboxCancelled | link: MarkviewPalette0Fg
|
MarkviewCheckboxChecked | link: MarkviewPalette4Fg
|
MarkviewCheckboxPending | link: MarkviewPalette2Fg
|
MarkviewCheckboxProgress | link: MarkviewPalette6Fg
|
MarkviewCheckboxUncheked | link: MarkviewPalette1Fg
|
MarkviewCheckboxStriked | link*: MarkviewPalette0Fg
|
βββββββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββββ |
MarkviewCode | bg**: normal Β± 5%(L) |
MarkviewCodeInfo | bg**: normal Β± 5%(L), fg: comment
|
MarkviewCodeFg | fg**: normal Β± 5%(L) |
MarkviewInlineCode | fg**: normal Β± 10%(L) |
βββββββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββββ |
MarkviewIcon0 | link***: MarkviewPalette0Fg
|
MarkviewIcon1 | link***: MarkviewPalette1Fg
|
MarkviewIcon2 | link***: MarkviewPalette5Fg
|
MarkviewIcon3 | link***: MarkviewPalette4Fg
|
MarkviewIcon4 | link***: MarkviewPalette3Fg
|
MarkviewIcon5 | link***: MarkviewPalette2Fg
|
βββββββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββββ |
MarkviewGradient0 | fg: Normal
|
MarkviewGradient1 | fg****: lerp(Normal, Title, 1/9)
|
MarkviewGradient2 | fg****: lerp(Normal, Title, 2/9)
|
MarkviewGradient3 | fg****: lerp(Normal, Title, 3/9)
|
MarkviewGradient4 | fg****: lerp(Normal, Title, 4/9)
|
MarkviewGradient5 | fg****: lerp(Normal, Title, 5/9)
|
MarkviewGradient6 | fg****: lerp(Normal, Title, 6/9)
|
MarkviewGradient7 | fg****: lerp(Normal, Title, 7/9)
|
MarkviewGradient8 | fg****: lerp(Normal, Title, 8/9)
|
MarkviewGradient9 | fg: Title
|
βββββββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββββ |
MarkviewHeading1 | link: MarkviewPalette1
|
MarkviewHeading2 | link: MarkviewPalette2
|
MarkviewHeading3 | link: MarkviewPalette3
|
MarkviewHeading4 | link: MarkviewPalette4
|
MarkviewHeading5 | link: MarkviewPalette5
|
MarkviewHeading6 | link: MarkviewPalette6
|
βββββββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββββ |
MarkviewEmail | link: @markup.link.url.markdown_inline
|
MarkviewHyperlink | link: @markup.link.label.markdown_inline
|
MarkviewImage | link: @markup.link.label.markdown_inline
|
βββββββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββββ |
MarkviewSubscript | link: MarkviewPalette3Fg
|
MarkviewSuperscript | link: MarkviewPalette6Fg
|
βββββββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββββ |
MarkviewListItemMinus | link: MarkviewPalette2Fg
|
MarkviewListItemPlus | link: MarkviewPalette4Fg
|
MarkviewListItemStar | link: MarkviewPalette6Fg
|
βββββββββββββββββββββββββ | ββββββββββββββββββββββββββββββββββββββββββ |
MarkviewTableHeader | link: @markup.heading.markdown
|
MarkviewTableBorder | link: MarkviewPalette5Fg
|
MarkviewTableAlignCenter | link: MarkviewPalette5Fg
|
MarkviewTableAlignLeft | link: MarkviewPalette5Fg
|
MarkviewTableAlignRight | link: MarkviewPalette5Fg
|
* = Only the foreground color is used. Strikeout is added.
** = The color is converted to HSL and it's luminosity(L) is increased/decreased by the specified amount.
*** = The background color of
MarkviewCode
is added to the groups.**** = Linearly interpolated value between 2 highlight groups
fg
.
Also available in vimdoc, :h markview.nvim
.