news 2026/9/14 9:54:28

Milkdown 嵌套列表缩进配置指南:indent 插件使用与 indentConfig 参数详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Milkdown 嵌套列表缩进配置指南:indent 插件使用与 indentConfig 参数详解

Milkdown 嵌套列表缩进配置指南:indent 插件使用与 indentConfig 参数详解

【免费下载链接】milkdown🍼 Plugin driven WYSIWYG markdown editor framework.项目地址: https://gitcode.com/GitHub_Trending/mi/milkdown

写 Markdown 时经常要处理嵌套列表、任务清单这类有层级的内容,缩进处理不好,排出来的层级就容易乱。Milkdown 里的缩进能力由@milkdown/plugin-indent提供,一个 Tab 键就能在光标处插入缩进字符,配合indentConfig配置项还能把缩进单位换成团队规范里要求的空格数或制表符。

两步接入:在编辑器里启用 indent 插件

如果你只想快速跑起来,只需要做这两步:导入插件、挂载到编辑器。

import { Editor } from '@milkdown/core' import { indent, indentConfig } from '@milkdown/plugin-indent' Editor .make() .use(indent) // 挂上后 Tab 键即可插入缩进 .create()

默认配置通常够用:type'space'size2,也就是每次按 Tab 插入两个空格。

这里的关键是配置项,而不是插件本身——indent只是一个把 Tab 键接到缩进逻辑上的快捷键,真正决定插入什么、插入多少的是indentConfig

indentConfig 参数说明:type 与 size 怎么填

想改缩进行为,在初始化时通过.config()写入即可:

.config(ctx => { ctx.set(indentConfig.key, { type: 'space', // 用空格做缩进;填 'tab' 则每次插入一个制表符 size: 4, // 每次按 Tab 插入的空格数 }) })
参数取值默认作用
type'space'/'tab''space'缩进字符类型
size正整数2一次插入的空格数

一个容易踩的点:type设为'tab'时,插入的固定是一个制表符,size对制表符不生效。如果你的团队规范要求 4 空格,就保持type: 'space'并把size调到 4。

顺带一提,Milkdown 官方的高层封装 Crepe 内置了 indent 插件,并把size覆盖成了 4,见 packages/crepe/src/core/builder.ts。用 Crepe 时你不需要手动挂载,但想知道它的缩进行为,可以顺着这份源码确认。

什么时候会触发,什么时候不会

Tab 触发的缩进有明确前提,理解这两条能少查很多错:

  • 光标必须停在可编辑文本里。选中状态是普通文本选区(TextSelection)或全选(AllSelection)时才会插入,选在别的节点上(比如图片、表格)则什么都不发生。
  • 插入位置就是光标所在位置,它把字符串直接写进文档,序列化出的 Markdown 就是带缩进的前导空格。

所以想给一组任务清单做层级,常见做法是:把光标放到子项行首,按 Tab 让前导空格对齐,再录入内容。层级建议控制在 3 级以内,再深的内容用标题或表格组织更清晰。

和"列表自动重排"的区别

这是新手最常被误导的地方:indent插件是插入缩进字符,不是给列表项做层级升降的"自动缩进命令"。列表项的嵌套结构,主要由你在 ProseMirror 文档里的节点层级决定,而不是这个快捷键直接改出来的。

如果你希望"选中列表项按 Tab 就整体下沉一级"这类行为,需要借助 keymap 或 slash 命令另行实现;而代码块里的 Tab 缩进则是另一套机制——Crepe 的代码块基于 CodeMirror,用的是indentWithTab,配置入口在 packages/crepe/src/feature/code-mirror/index.ts,和正文的 indent 插件互不干扰。

Tab 没有反应的排查思路

  • 现象:按 Tab 完全没变化→ 通常没挂载插件。确认Editor.make()链上执行过.use(indent),或用 Crepe 时检查features是否被禁用。
  • 现象:每次插入的字符数不对→ 大概率是indentConfig没写进去,或在插件之前被其他配置覆盖。可以用ctx.get(indentConfig.key)打印当前值核对。
  • 现象:光标在表格或图片上按 Tab 无效→ 这是预期行为,选区类型不满足触发条件,把光标移回文本行再试。

参数定义和默认值都在 packages/plugins/plugin-indent/src/index.ts,接口文档在 docs/api/plugin-indent.md,不确定某个行为时直接对照这两处最快。

下一步

先把size和团队文档规范对齐(比如统一 4 空格),再验证一次 Tab 的实际输出。如果后续需要"列表项整体升降级"或代码块内的自定义缩进键位,再去找 keymap 相关的扩展点,不必动 indent 插件本身。

【免费下载链接】milkdown🍼 Plugin driven WYSIWYG markdown editor framework.项目地址: https://gitcode.com/GitHub_Trending/mi/milkdown

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 9:50:10

机器人端侧AI硬件选型:MCU与MPU的确定性与算力博弈

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 9:46:32

Context-Mode:基于MCP+SQLite+FTS5的本地化上下文感知工作流

1. 项目概述:Context-Mode 不是玄学,而是现代数据驱动工作流的底层操作系统 “Context-Mode”这个词最近在开发者、AI 工程师和低代码平台使用者的圈子里频繁出现,但它既不是某个新发布的编程语言,也不是某家大厂刚推出的闭源 SDK…

作者头像 李华
网站建设 2026/9/14 9:44:58

强化学习与VR虚拟建模在工业控制中的融合应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 9:43:50

阿里开源Agent项目实战:从原理到生产落地的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 9:43:28

5 分钟跑通 Keep:AIOps 告警聚合与降噪怎么做到的

5 分钟跑通 Keep:AIOps 告警聚合与降噪怎么做到的 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 凌晨三点,Prometheus、Datadog、CloudWatch 同时炸出两三…

作者头像 李华