手动调整VS Code下Markdown Preview Enhanced插件中Front-Matter的渲染方式

本文主要是介绍手动调整VS Code下Markdown Preview Enhanced插件中Front-Matter的渲染方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我曾用过一些静态博客框架撰写并发布文章,这些静态博客框架均采用 Front-Matter 管理文章信息。这导致了我非常多的 Markdown 文章开头都带有诸如这样的内容:

---
title: 【我的文章】
author: Voimmamored
date: "2023-01-13 23:20:00"
---

目前我已弃用博客框架。但是,曾经在博客框架下写作时,Front matter 内的信息会被渲染成文章标题,而 VS Code 下 Markdown Preview Enhanced 插件默认不会渲染 Front matter。这导致我长期以来习惯的文章结构改变了,所有文章都没了标题支撑,一时间弄得我很不适应。

在 Extension Settings 中可以看到,插件默认关闭渲染,但提供了 表格代码块 两种渲染 Front matter 的方式。而 Markdown Preview Enhanced 是一款开源的插件。于是我只要找到相关程序稍作修改即可实现用 Front matter 渲染文章标题的效果。


插件本体的路径:C:\Users\User\.vscode\extensions\shd101wyy.markdown-preview-enhanced-0.6.5(后文简称插件目录)。

为找到相关程序,使用 VS Code 打开插件目录,按下Crtl + Shift + F 开启全局搜索,输入关键词front matter

注意,VS Code可能会自动省略node_modules文件夹下的搜索,点击files to exclude下的齿轮按钮即可取消。
在这里插入图片描述

现在我们找到了关于 Front matter 渲染的程序,其在插件目录下的相对路径为:
node_modules\@shd101wyy\mume\out\src\markdown-engine.js

直接定位到控制 Front matter 渲染的源代码:

/*** process input string, skip front-matter* if usePandocParser. return {*      content: frontMatterString* }* else if display table. return {*      table: string of <table>...</table> generated from data*      content: ''* }* else return {*      content: replace ---\n with ```yaml* }**/
processFrontMatter(frontMatterString, hideFrontMatter = false) {if (frontMatterString) {const data = utility.parseYAML(frontMatterString);if (this.config.usePandocParser) {// use pandoc parser, so don't change inputStringreturn { content: frontMatterString, table: "", data: data || {} };}else if (hideFrontMatter ||this.config.frontMatterRenderingOption[0] === "n") {// 不渲染// hidereturn { content: "", table: "", data };}else if (this.config.frontMatterRenderingOption[0] === "t") {	// 渲染表格// table// to tablelet table;if (typeof data === "object") {table = this.frontMatterToTable(data);}else {table = "<pre>Failed to parse YAML.</pre>";}return { content: "", table, data };} else {// 渲染代码块// if (this.config.frontMatterRenderingOption[0] === "n") {const content = frontMatterString.replace(/^---/, "```yaml").replace(/\n---$/, "\n```\n");return { content, table: "", data };}}else {return { content: frontMatterString, table: "", data: {} };}
}

此处注释和代码都写得很清楚,不多赘述。
我们可以直接把其中一个条件分支拿来用,把里面的效果改成自己想要的即可。

如果你想要和我一样保留原本的设置,可以手动在插件目录的package.json文件内添加一个渲染选项,此处我添加的选项名为custom

"markdown-preview-enhanced.frontMatterRenderingOption": {"description": "Front matter rendering option","type": "string","enum": ["none","table","code block","custom"],"default": "none"
},

处理后的程序(未注释部分为新增代码):

frontMatterToInfo(arg) {let info = "";for (const key in arg) {info += `<div class = ${key}>${arg[key]}</div>`;}return info;
}/*processFrontMatter(frontMatterString, hideFrontMatter = false) {if (frontMatterString) {const data = utility.parseYAML(frontMatterString);if (this.config.usePandocParser) {// use pandoc parser, so don't change inputStringreturn { content: frontMatterString, table: "", data: data || {} };}else if (hideFrontMatter ||this.config.frontMatterRenderingOption[0] === "n") {// hidereturn { content: "", table: "", data };}else if (this.config.frontMatterRenderingOption[0] === "t") {let table;if (typeof data === "object") {table = this.frontMatterToTable(data);}else {table = "<pre>Failed to parse YAML.</pre>";}return { content: "", table, data };*/} else if (this.config.frontMatterRenderingOption[0] === "c") {// customconst content = this.frontMatterToInfo(data);return { content, table: "", data };/* } else {const content = frontMatterString.replace(/^---/, "```yaml").replace(/\n---$/, "\n```\n");return { content, table: "", data };}}else {return { content: frontMatterString, table: "", data: {} };}
}*/

现在,上文的Front matter:

title: 【我的文章】
author: Voimammored
date: "2023-01-13 23:20:00"

会在文章起始处被渲染为:

<div class = "title">【我的文章】</div>
<div class = "author">Voimammored</div>
<div class = "date">2023-01-13 23:20:00</div>

现在我们就能使用CSS自定义样式了。当然,换用其他的标签,或者直接在标签内嵌入style都是可以的。

需要注意的是,现在渲染出的Front matter仅存在于预览界面中,而导出时会被自动移除。如果需要保留,同样可以在markdown-engine.js中调整。

例如,我想在导出为HTML文件时保留渲染后的 Front matter,只需要将htmlExport方法的部分修改。

let yamlConfig;
({ html, yamlConfig } = yield this.parseMD(inputString, {useRelativeFilePath: true,hideFrontMatter: true,		// 将hideFrontMatter修改为falseisForPreview: false,runAllCodeChunks,
}));

同理,导出其他格式时都有类似的设置,需要的话手动修改即可。

这篇关于手动调整VS Code下Markdown Preview Enhanced插件中Front-Matter的渲染方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703595

相关文章

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与