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

问题描述 投票:8回答:1

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

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

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

visual-studio-code markdown vscode-extensions monaco-editor ligature
1个回答
2
投票

从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来获得更好的装饰器支持

© www.soinside.com 2019 - 2024. All rights reserved.