如何使嵌套的markdown项目符号列表在vscode中具有不同的项目符号样式

sli*_*kts 9 markdown ligature visual-studio-code vscode-extensions monaco-editor

我想在markdown中使用子弹点而不是星号(*)字符来创建vscode渲染列表,以便顶级使用•,下一个将使用◦等.

我的第一种方法是使用FontForge创建一个连字字体,用◦替换*,用◦替换空格加*,用▪替换两个空格加*,依此类推,但是使用连字有明显的问题,它不是上下文敏感的,所以所有星号将被替换,而不仅仅是那些领先一行的星号.

查看vscode文本修饰API,它似乎仅限于更改字体样式和颜色,而不是字体系列.有没有办法在视觉上替换vscode中的字符?它们仍应在源代码中保存为星号,以便有效降价.

Mat*_*ner 4

从 VS Code 1.27 开始,最好的选择是编写一个扩展,在*角色上添加装饰器来执行此操作。查看装饰器示例扩展以开始使用

\n\n

我认为当前的 vscode API 不允许您覆盖*文本本身,但您可以尝试通过使*字符透明并在其后添加自定义项目符号点来模拟这一点:

\n\n
const level1DecorationType = vscode.window.createTextEditorDecorationType({\n    color: \'transparent\',\n    after: {\n        contentText: "\xe2\x97\xa6"\n    }\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后您的扩展只需将此样式应用于文档中的项目符号即可。

\n\n

非官方地,您还可以使用此装饰器 hack 来完全替换*角色:

\n\n
const level1DecorationType = vscode.window.createTextEditorDecorationType({\n    color: \'transparent\',\n    textDecoration: `none; display: inline-block; width: 0;`,\n    after: {\n        contentText: "\xe2\x97\xa6"\n    }\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,这并不能保证能够正常工作或在将来继续工作。

\n\n

考虑打开一个功能请求以获得更好的装饰器支持

\n