先引
- 为什么需要?
-
- 如果平时有使用将笔记上传到 VuePress/VitePress/其他可以使用md-it的博客平台,那么很可能会比较希望Obsidian和博客的上浏览体验保持高一致性。
-
- ob实现
:::
语法,有助于快速加载大量的mdit插件(只需略微修改就能拿过来直接用,而不用重复开发)
- ob实现
-
- 技术上可行吗?
- 技术上,Markdown-it-container 的一些功能我也可以迁移过来,并且能保持原有的语法(ob的api默认建议使用代码块,现有插件中哪怕有些仿md-it功能的大多也是借助代码块,但如果你要将笔记发布到博客平台,依然建议使用
:::
来选择一段文本,而:::
选择器我以前其实也做过出来了(就是实时模式生效,但在阅读模式下失效,但感觉可以解决)。
- 技术上,Markdown-it-container 的一些功能我也可以迁移过来,并且能保持原有的语法(ob的api默认建议使用代码块,现有插件中哪怕有些仿md-it功能的大多也是借助代码块,但如果你要将笔记发布到博客平台,依然建议使用
- 能写那你就去写啊,BB什么
- 调研下看需要的人多不多先,看看大家的做法,开发前需要惯例调研。而且目前个人没那么需要了。已经实现一个ob和mdit的通用插件 “Any Block”,感觉够我自己平时用的了
Markdown-it-container 语法
就是用两段 :::
包括住一段范围,并且你可以增加 :
的数量达到嵌套选择的效果。
这种选择方式有很多优点:
- 与代码块相比能嵌套
- 其更适用于在内部嵌套md内容,若
:::
选择器失效,显示效果也不差(因为一般也是包含的md内容) - 引用块虽然也能嵌套,也能嵌套md内容,但其前面要增加很多个
>
符号,并不方便
常用的基于 md-it-container 的插件
ob的callout、mdit的默认container、mdit的 plugin-alert
他们的效果是一模一样的,只是语法不同,场景不同。
- 第一个ob生效,是
> [!info]
触发 - 第二个mdit生效,是
::: info
触发 - 第三个mdit生效,是
> [!info]
触发
那有没有在ob生效,并使用 ::: info
触发的呢?—— 没有,但技术上可以写插件
一般本地使用ob,并有发布博客习惯的。通常作法是放弃使用 :::
语法,使用callout语法,并在安装mdit插件alert。以实现两者样式上的统一。当然也有人寻求让 :::
语法能在ob上生效,以实现两端效果一致,我还是说:可行,但目前没有这个插件。
plugin-demo/plugin-tab、质疑不可替代性
就普通的info/warn/error块来说。其实我更支持使用callout语法,在语法不被支持的环境下,可读性要更强。
甚至于一些 mdit 语法,也能够在callout的基础上去实现,例如:plugin align (left/right/center/justify) 或者分栏(这点可以见BT示例库)
但是对与其他的容器规则来说,我依然认为 :::
语法有不可替代性,详见后面的插件介绍:
::: tabs#fruit
@tab apple#apple
Apple
@tab banana#banana
Banana
:::
当然,有没有可能在 callout 的基础上,赋予 callout 块里面的Heading特殊含义,也达成类似的语法效果呢?可以,但难度差不多。ob本身并没有提供callout块的选择器,也得自己写。并且我感觉没有必要增添新语法了,不然你发布博客的话,博客那边又得写个新插件……麻烦
待补充
懒得写了,有空再补充。或者自己去了解