📜 Markview.nvim
一个实验性的 Neovim Markdown 预览插件。
✨ 特性
Markview.nvim 拥有众多特性,例如:
- 接近完整渲染的 Markdown 文档。目前支持的项目有:
- 块引用(包括
callouts
/alerts
) - 复选框(已选、未选和待定状态)
- 标题(atx 标题和 setext 标题)
- 水平分割线
- HTML 支持(仅限简单标签,如
<u>下划线</u>
) - HTML 实体(支持
&<名称>;
和&<名称>
两种形式) - 行内代码
- 链接(超链接、图片和电子邮件支持)
- 列表项(有序和无序)
- 表格
- 块引用(包括
- 完全可定制的设置!你可以根据需求自定义一切!
- 支持实时渲染的"混合模式"!它甚至会取消隐藏光标下的节点。
- 动态"高亮组",支持几乎所有配色方案!
未来还会有更多功能!
📦 要求
- Neovim 版本:
0.10.0
或更高。 - Tree-sitter 解析器:
- markdown
- markdown_inline
- html
- Nerd 字体。
可选:
- 支持 Tree-sitter 的配色方案。
🚀 安装
Markview 可以通过你喜欢的"包管理器"安装。
💤 Lazy.nvim
[!注意] 不建议延迟加载此插件,因为它默认就是这样做的。
对于 lazy.lua
用户:
{
"OXY2DEV/markview.nvim",
lazy = false, -- 推荐
-- ft = "markdown" -- 如果你决定延迟加载
dependencies = {
-- 如果你手动安装了解析器,就不需要这个
-- 或者如果解析器在你的 $RUNTIMEPATH 中
"nvim-treesitter/nvim-treesitter",
"nvim-tree/nvim-web-devicons"
}
}
对于 plugins/markview.lua
用户:
return {
"OXY2DEV/markview.nvim",
lazy = false, -- 推荐
-- ft = "markdown" -- 如果你决定延迟加载
dependencies = {
-- 如果你手动安装了解析器,就不需要这个
-- 或者如果解析器在你的 $RUNTIMEPATH 中
"nvim-treesitter/nvim-treesitter",
"nvim-tree/nvim-web-devicons"
}
}
🦠 Mini.deps
local MiniDeps = require("mini.deps");
MiniDeps.add({
source = "OXY2DEV/markview.nvim",
depends = {
-- 如果你不延迟加载,可能不需要这个
-- 或者如果解析器在你的 $RUNTIMEPATH 中
"nvim-treesitter/nvim-treesitter",
"nvim-tree/nvim-web-devicons"
}
})
🌒 Rocks.nvim
你可以通过运行以下命令安装插件:
:Rocks install markview.nvim
👾 Github 发布
你也可以下载其中一个发布版本。
🛸 测试
如果你不介意使用稍微"不稳定"的插件版本,可以使用 dev 分支。
🌇 命令
Markview 提供了一个命令。
:Markview
它有以下子命令:
- toggleAll,切换插件状态。将所有已附加缓冲区的状态设置为插件状态。
- enableAll,在所有已附加缓冲区中启用插件。如果插件已启用,将刷新装饰。
- disableAll,在所有已附加缓冲区中禁用插件。如果插件已禁用,将尝试删除任何剩余的装饰。
- toggle {buffer},切换指定缓冲区的状态。
- enable {buffer},在特定缓冲区启用/刷新插件。
- disable {buffer},在特定缓冲区禁用插件并清除装饰。
🚀 混合模式
混合模式是插件新增的功能。它可用于在输入时展示或编辑文件。
它使用 tree-sitter
从特定范围移除装饰。它会执行以下操作:
- 移除光标当前所在块元素的所有装饰。
- 移除父列表项的装饰,使编辑更加实用。
- 移除整个代码块的装饰,以防止丢失缩进。
以下是使用此功能的推荐配置:
require("markview").setup({
modes = { "n", "no", "c" }, -- 根据需要更改这些模式
hybrid_modes = { "n" }, -- 在普通模式下使用此功能
-- 这个设置很好
callbacks = {
on_enable = function (_, win)
vim.wo[win].conceallevel = 2;
vim.wo[win].conecalcursor = "c";
end
}
})
以下是在插入模式下使用的最小配置:
require("markview").setup({
modes = { "n", "i", "no", "c" },
hybrid_modes = { "i" },
-- 这是一个不错的功能
callbacks = {
on_enable = function (_, win)
vim.wo[win].conceallevel = 2;
vim.wo[win].concealcursor = "nc";
end
}
})
🧭 配置
你可以使用 setup()
函数来改变插件的外观。
local markview = require("markview");
local presets = require("markview.presets");
markview.setup({
headings = presets.headings.glow_labels
});
vim.cmd("Markview enableAll");
这也可以在运行时使用。所以,你可以随时热切换配置!
现在就试着运行一下吧。
你可以通过两种方式配置插件,
📂 预设
预设是一种简单的方法来改变插件某些部分的外观。
目前有以下项目的预设,
- 标题
- 表格
你可以在wiki页面上找到更多关于预设的信息。
🎨 手动
创建这个插件的唯一目的是使其可定制。
所以,你可以根据自己的需求改变一切。
下面给出一个简单的例子,
require("markview").setup({
headings = {
enable = true,
heading_1 = {
style = "label",
padding_left = " ",
padding_right = " ",
hl = "MarkviewHeading1"
}
}
});
你可以查看wiki了解更多关于配置的信息。
你还可以查看Recipes获取一些简单的例子。
🌃 高亮组
为了使配置更简单,markview.nvim
默认带有以下高亮组。
📦 引用块
引用块默认使用以下高亮组,
- MarkviewBlockQuoteDefault,也用于
Quote
。
各种标注/警告使用以下高亮组,
- MarkviewBlockQuoteOk,用于
Tip
、Success
。 - MarkviewBlockQuoteWarn,用于
Question
、Custom
、Warning
。 - MarkviewBlockQuoteError,用于
Caution
、Bug
、Danger
、Failure
。 - MarkviewBlockQuoteNote,用于
Note
、Todo
、Abstract
。 - MarkviewBlockQuoteSpecial,用于
Important
、Example
。
🎯 复选框
复选框使用这些高亮组,
- MarkviewCheckboxChecked,来自
DiagnosticOk
。 - MarkviewCheckboxUnChecked,来自
DiagnosticError
。 - MarkviewCheckboxPending,来自
DiagnosticWarn
。
💻 代码块和内联代码
代码块使用以下高亮组,
- MarkviewCode
内联代码使用以下高亮组,
- MarkviewInlineCode
🔖 标题
标题使用以下高亮组,
- MarkviewHeading1,来自
DiagnosticVirtualTextOk
- MarkviewHeading2,来自
DiagnosticVirtualTextHint
- MarkviewHeading3,来自
DiagnosticVirtualTextInfo
- MarkviewHeading4,来自
Special
- MarkviewHeading5,来自
DiagnosticVirtualTextWarn
- MarkviewHeading6,来自
DiagnosticVirtualTextError
标记使用以下高亮组,
- MarkviewHeading1Sign,来自
DiagnosticOk
- MarkviewHeading2Sign,来自
DiagnosticHint
- MarkviewHeading3Sign,来自
DiagnosticInfo
- MarkviewHeading4Sign,来自
Special
- MarkviewHeading5Sign,来自
DiagnosticWarn
- MarkviewHeading6Sign,来自
DiagnosticError
📏 水平分割线
水平分割线使用以下高亮组作为渐变。
- MarkviewGradient1,来自
Normal
。 - MarkviewGradient2
- MarkviewGradient3
- MarkviewGradient4
- MarkviewGradient5
- MarkviewGradient6
- MarkviewGradient7
- MarkviewGradient8
- MarkviewGradient9
- MarkviewGradient10,来自
Cursor
。
🔗 链接
链接使用以下高亮组,
- MarkviewHyperlink,来自
markdownLinkText
。 - MarkviewImageLink,来自
markdownLinkText
。 - MarkviewEmail,来自
@markup.link.url.markdown_inline
。
📝 列表项
列表项使用以下高亮组,
- MarkviewListItemMinus,来自
DiagnosticWarn
。 - MarkviewListItemPlus,来自
DiagnosticOk
。 - MarkviewListItemStar,来自
@comment.note
。
📐 表格
表格使用以下高亮组作为边框,
- MarkviewTableBorder,来自
Title
。
对于列对齐标记,使用这些高亮组,
- MarkviewTableAlignLeft,来自
Title
。 - MarkviewTableAlignRight,来自
Title
。 - MarkviewTableAlignCenter,来自
Title
。
⭐ 插件展示
由 @scottmckendry 提供