如何在Astro的Markdown中禁用缩进代码块?
如何禁用Markdown中的缩进代码块(适配新版remark-parse/micromark)
由于新版remark-parse基于micromark重构,旧工具remark-disable-tokenizers已不再兼容,可通过配置micromark的扩展禁用规则实现需求,无需切换到MDX:
核心方案:通过remarkParse配置禁用缩进代码块解析
在使用unified/remark的流程中,给remark-parse传入配置,禁用codeIndented扩展即可关闭缩进代码块的识别:
import { unified } from 'unified' import remarkParse from 'remark-parse' import remarkRehype from 'remark-rehype' import rehypeStringify from 'rehype-stringify' // 构建解析管道 unified() .use(remarkParse, { extensions: [ { disable: ['codeIndented'] // 禁用缩进代码块规则 } ] }) .use(remarkRehype) .use(rehypeStringify) .process(' 这行缩进文本将被解析为普通段落') .then(file => console.log(String(file)))
在Astro中直接配置(无需切换MDX)
若你使用Astro,可直接在astro.config.mjs中配置Markdown的remark解析选项,替代临时切换MDX的方案:
import { defineConfig } from 'astro/config' export default defineConfig({ markdown: { remarkParseOptions: { extensions: [{ disable: ['codeIndented'] }] } } })
原理说明
新版remark通过micromark处理Markdown语法解析,codeIndented是控制缩进代码块的内置扩展,通过disable数组指定该扩展后,micromark会跳过对缩进4个空格/1个制表符文本的代码块识别,将其视为普通段落文本。
内容的提问来源于stack exchange,提问作者Aravind Prabhakaran
相关产品推荐
相关产品推荐

