十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Milkdown 列表缩进设置教程:Tab 没反应、缩进对不齐,一次配好

Milkdown 列表缩进设置教程:Tab 没反应、缩进对不齐,一次配好 Milkdown 列表缩进设置教程Tab 没反应、缩进对不齐一次配好【免费下载链接】milkdown Plugin driven WYSIWYG markdown editor framework.项目地址: https://gitcode.com/GitHub_Trending/mi/milkdownMilkdown 是一款插件驱动的 WYSIWYG Markdown 编辑器框架你可以按需拼装功能模块。说到 Milkdown 列表缩进最常见的抱怨就两个Tab 按下去没反应或者缩进宽度和团队规范对不上。这篇指南把这两件事一次讲清先定位 Tab 到底管什么再给出 4 空格缩进的标准配置写法。Tab 按下去没反应先分清它管什么你按 Tab 看不到层级变化多数情况不是缩进功能坏了而是没搞清楚这个键的职责边界。Milkdown 的 Tab 缩进是 indent 插件管的事而它的行为比想象中朴素监听 Tab 键在当前光标处插入一段缩进文本仅此而已。具体逻辑可以直接看 indent 插件源码 里的updateIndent函数核心就三步读配置、拼出缩进字符串、插到选区末尾。两个前提没满足Tab 就是装死的编辑器初始化时没有.use(indent)挂载插件键位监听根本不存在当前选区不是文本选区比如焦点不在文档里插件直接原样返回不做任何事。还要提前建立预期它插的是字符不是把列表项一键降级成子列表的结构操作。字符插进去后渲染层和 Markdown 序列化再按缩进规则解释层级所以导出前最好拿真实列表验证一次。4 空格缩进的配置写法想让每级缩进是 4 个空格而不是默认的 2 个只需要在编辑器配置阶段改一个 context 值。indentConfig是 indent 插件暴露的配置切片就两个参数/// 缩进配置的两个字段 export interface IndentConfigOptions { /// 缩进字符类型space 或 tab默认 space type: space | tab /// 缩进宽度默认 2 size: number }团队规范要求 4 空格时的完整初始化写法如下import { Editor } from milkdown/core import { indent, indentConfig } from milkdown/plugin-indent Editor .make() .config((ctx) { // 缩进设为 4 个空格 ctx.set(indentConfig.key, { type: space, size: 4, }) }) .use(indent) .create()如果你希望导出 Markdown 时用制表符把type换成tab即可此时size会被忽略、永远插入一个\t——源码里Array(options.size).fill( )与\t的二选一逻辑可以直接印证这一点。size就像字号调大之后每一层级的横向间距更明显多层嵌套时不容易挤在一起。如果你用的是 Crepe 这个开箱即用的高层封装可以不用自己配它的构建器已经把indentConfig的size覆盖成了 4见 Crepe 构建器源码 中ctx.update(indentConfig.key, ...)那几行同时默认挂载了.use(indent)。Tab 键位被占用或想换组合键搞完配置实际操作时你可能遇到另一种情况页面里其他组件抢走了 Tab或者你根本不想让 Tab 承担缩进。indent 插件绑定的键是写死的Tab没法在配置里换成别的组合键可行的路线是绕开它、自己再挂一套监听。Crepe 在代码块场景就是这么干的它给 Tab 挂了 CodeMirror 官方的缩进命令import { defaultKeymap, indentWithTab } from codemirror/commands // 代码块编辑器里Tab 交给 CodeMirror 的缩进命令 extensions: [keymap.of(defaultKeymap.concat(indentWithTab)), basicSetup]自己加组合键的思路类似再挂一个监听Ctrl-]的 shortcut在回调里读取indentConfig的当前值、按同样的方式插入缩进文本即可键位监听的写法照抄 indent 插件源码里的结构就行。容易踩的坑Tab 只认文本选区updateIndent开头就判断选区必须是TextSelection或AllSelection表格单元格选中这类场景下 Tab 无反应这不是 bug。Crepe 已经替你改过默认值在 Crepe 里再ctx.set一遍没问题但它的基线是size: 4而不是插件原生的 2排查为什么不是我设的 2时先想到这层覆盖。缩进字符 ≠ 结构化嵌套插件插入的是纯字符最终 Markdown 里呈现为空格还是层级缩进取决于序列化时列表内容如何解释这些空格对嵌套列表的导出结果有要求时务必做一次往返验证。 把挂载插件 → 改 indentConfig → 验证键位三步走一遍绝大多数 Tab 缩进问题都能定位更多插件开发约定可参考 CONTRIBUTING.md。【免费下载链接】milkdown Plugin driven WYSIWYG markdown editor framework.项目地址: https://gitcode.com/GitHub_Trending/mi/milkdown创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表