我想在markdown中使用子弹点而不是星号(*)字符来创建vscode渲染列表,以便顶级使用•,下一个将使用◦等。
我的第一种方法是使用FontForge创建一个连字字体,用◦替换*,用◦替换空格加*,用▪替换两个空格加*,依此类推,但是使用连字有明显的问题,它不是上下文敏感的,所以所有星号将被替换,而不仅仅是那些领先一行的星号。
看看vscode text decoration API,它似乎仅限于改变字体样式和颜色,而不是字体系列。有没有办法在视觉上替换vscode中的字符?它们仍应在源代码中保存为星号,以便有效降价。
从VS Code 1.27开始,最好的办法是编写一个扩展,在*
字符上添加装饰器来执行此操作。看看decorator example extension开始吧
我不认为当前的vscode API允许您覆盖*
文本本身,但您可以尝试通过使*
字符透明并在其后添加自定义项目符号来模拟这个:
const level1DecorationType = vscode.window.createTextEditorDecorationType({
color: 'transparent',
after: {
contentText: "◦"
}
});
然后,您的扩展只需将此样式应用于文档中的项目符号。
非正式地,你也可以使用这个装饰黑客来完全取代*
角色:
const level1DecorationType = vscode.window.createTextEditorDecorationType({
color: 'transparent',
textDecoration: `none; display: inline-block; width: 0;`,
after: {
contentText: "◦"
}
});
但是,这不能保证正常工作或将来继续工作。
考虑使用opening a feature request来获得更好的装饰器支持