看起来有一个MarkdownEngine类,根据配置来管理插件的加载,虽然似乎没有办法引用MarkdownIt实例,但是这里定义了一个渲染方法。
https://github.com/Microsoft/vscode/blob/fa5306d67bb934c42d206fb3c7e028dff00d530f/extensions/markdown-language-features/src/markdownEngine.ts#L96
所以从表面上看,你只需要导入MarkdownEngine并使用该方法。然而,目前不支持此操作。我已经
记录了一个功能请求。
作者不想公开MarkdownEngine,但他们提出了提供一个渲染方法的建议。
那是最终答案,但现在没有任何帮助。在此期间,可以获得对Visual Studio Code的
markdownIt
实例的引用。
将您的扩展更改为伪装成Markdown插件。请注意,在添加插件的文档中指出:
Then, in the extension's main activation function, return an object with a function named extendMarkdownIt. This function takes the current MarkdownIt instance and must return a new MarkdownIt instance:
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;
然后,在您的激活方法末尾添加以下内容以捕获引用。
return { extendMarkdownIt(mdparam: any) { return md = mdparam; } };
当管道初始化时,它将调用您提供的回调函数并传递对自身的引用。您的其余代码可以从该属性中获取它。
这个技巧取决于渲染管道早期加载,无论您是否使用Markdown预览窗格。幸运的是,它确实如此。