VS Code markdown预览使用markdown-it
,它支持插件生态系统。
Extension of this rendering pipeline已记录在案,但这并未考虑降价预览窗格以外的客户端的可能性。
任何人都可以提供有关使用内置Markdown渲染的指南吗?
如果有用,我的用例是打印。我为vs代码写了一个打印扩展程序,它的自然增强是在打印时渲染markdown。目前,我正在有效地重新创建渲染管道。除了明显的冗余之外,我想使用内置渲染的原因是继承任何已配置的扩展名,以便打印输出与预览功能匹配。
期望将markdown预览窗格实现为virtual document,这是呈现管道的客户端,这似乎是合理的。有人知道降价预览窗格的实现包含哪些存储库和文件吗?
答案 0 :(得分:0)
似乎有一个MarkdownEngine类根据配置来管理插件的加载,虽然似乎没有引用MarkdownIt实例的方法,但这里定义了一个render方法
因此,表面上,您需要做的就是导入MarkdownEngine并使用此方法。但是,当前不支持此功能。我有logged a feature request。
作者不想公开MarkdownEngine,但建议提供一个render方法。
这是最终的答案,但现在无济于事。在此期间,可以获取对VS Code的markdownIt
实例的引用。
将扩展名伪装为markdown插件。请注意,在添加插件的文档中,它显示为
然后,在扩展程序的主要激活函数中,返回一个具有名为extendMarkdownIt的函数的对象。此函数采用当前的markdown-it实例,并且必须返回一个新的markdown-it实例:
import * as vscode from 'vscode'; export function activate(context: vscode.ExtensionContext) { return { extendMarkdownIt(md: any) { return md.use(require('markdown-it-emoji')); } }; }
这是捕获Markdown渲染器的机会。修改您的扩展程序以作为markdown插件
"contributes": {
"markdown.markdownItPlugins": true,
使用私有属性为其提供对markdownIt实例的引用。不要打扰它的强类型,这将要求您捆绑MarkdownIt库。
var md: any;
然后将其放在您的activate方法的末尾来获取参考。
return { extendMarkdownIt(mdparam: any) { return md = mdparam; } };
当管道初始化时,它将调用您提供的回调,并传递对自身的引用。您的其余代码可以从属性中获取。
此技巧取决于提早载入渲染管线,而不管是否使用降价预览窗格。幸运的是。