epe
21
这样写对吧?(上下顺序没写错吧?)
"alias_user": [
{
"regex": "python",
"replacement": "code(python)"
}
],
替换后, 原先这个code(python)指令还能用吗? (好像还是能渲染为代码块, 但是代码全部为灰色, 之前代码能渲染出几个)
另外, 通过设置中的"添加新的注册命令"自定义别名的话目前是没效果的对吧? 我试了添加了下, 当下是能看到效果, 但是重启ob后就没效果了又恢复原样了. data.json能看到文件的"修改日期"有在变, 但是点进去看后里面的内容并没有变化
能用,注意不要冲突就行。你这里是因为冲突了:
code(python)
被替换成了 code(code(python))
最好像我给的案例那样两侧加上 |
,那样他就只匹配整个单词而不是一部分,[code(python)]
就不会被替换,只会替换 [python]
epe
23
epe
24
@LincZero
有几点比较好奇:
(1) 用anyblock生成的"代码块"是真正的代码块吗? 还是说它其实仍然是一般文本呢?
- 因为它可被代码运行插件execute code运行出结果来, 所以我觉得它可能是真正的代码块
- 但它渲染的结果又与ob渲染代码块的结果不一样, 且其它代码渲染插件(比如Codeblock Customizer)对它也没效果, 所以我又觉得它可能不是真正的代码块
- 但如果它不是真正的代码块, 只是一般文本的话, 按道理内链[[abc]]是可以被渲染出来的才对(也就是渲染成abc, 看不到双方括号), 但实际上并没有
(2) anyblock渲染它生成的"代码块", 与ob渲染原生代码块, 似乎所用的方法不同. 无意间在修改css时发现:
- 修改ob原生代码块样式时, 是在 .cm-s-obsidian .HyperMD-codeblock {…} 里修改的
- 修改anyblock生成的"代码块"的样式时, 是在 .markdown-rendered code {…} 里修改的
我不太懂啥是"HyperMD", 于是查了下:
HyperMD的核心技术基于CodeMirror,这是一个广泛使用的浏览器内代码编辑器库。通过集成CodeMirror,HyperMD继承了其强大的语法高亮、可配置的键绑定、差异和合并等功能。此外,HyperMD还通过模块化的方式,集成了众多第三方库和服务,如MathJax、KaTeX等,进一步增强了其功能性。
HyperMD的独特之处在于其以下几个特点:
实时预览:HyperMD打破了写作与预览的壁垒,用户可以在写作的同时实时看到预览效果,大大提高了写作效率。
强大的CodeMirror集成:通过集成CodeMirror,HyperMD继承了其强大的代码编辑功能,如语法高亮、键绑定、差异和合并等。
…
(来源: https://blog.csdn.net/gitblog_00796/article/details/141626097)
也就是说, ob原生代码块的渲染方式是实时渲染的方式, 而anyblock渲染它生成的"代码块"是渲染完后再嵌入的方式. 所以一个直观的感觉是, ob原生代码块渲染后像无缝衔接一样, 与页面完美地融合, 编辑时就像编辑普通文本一样, 毫无违和感. 但是anyblock生成的"代码块"就会有上面回帖里说的上下出现空行, 以及编辑时会先跳回渲染前的样子, 像下面这样:

上面只是我的推测, 不知推测是否正确?
(3) 如果第2点推测正确, anyblock能否也用HyperMD的渲染方式呢?
(4) 不管是怎么渲染, anyblock能否把代码块里标[[abc]]的内链渲染成跟在普通文本里标[[abc]]时一样的效果呢(也就是渲染成abc, 看不到双方括号)?
是真正的代码块
CodeMirror那边你可以理解成元素替换,某一段文字在js的作用下被删除,然后再插入一个HTML元素。完成替换
有的插件可以但有的插件不行?
看插件的实现方式
- 大多数和代码块相关的插件是通过ob的registerCodeBlock接口实现的,这类插件基本都可以和anyblock完成配合,都能在anyblock渲染出代码块后在此基础上进行继续进一步加工。例如
code(mermaid)
、code(markmap)
、code(ad-note)
等都能和各自对应的插件完成配合 (分别对应ob自带的mermaid、markmap nextGen插件、admonition插件)。
- 少部分插件,为了更强的功能性,可能去做一些自定义的东西(例如纯文本的方式去检测文章中有没有 ``` 标志)。Codeblock Customizer 就属于这一类,如 ```cpp hl:1,3,4-6 。因为他的语法要求 ``` 的后面需要动态检测,而不是写死某一个定值,所以他的处理方式更类似于md文本的处理,而不能单纯把他看成是一个只作用于代码块的插件,实际上他的上下文检测范围不止代码块。不过这个原因其实和AnyBlock无关,只是提一嘴可能的发生的情况。和AnyBlock的冲突不属于这种
- 另外anyblock要求能配合的插件需要在阅读模式下且的有嵌套的情况下也能生效。这个是AnyBlock不能与某些插件配合的原因,但 Codeblock Customizer 的问题同样与本项无关
- 真实原因放在最后一点了。AnyBlock渲染出来的其实是html形式的块,本质上和你在md里直接用
<div><pre><code>
来写html代码没有区别。其实和 Codeblock Customizer 还是能配合的,但只在阅读模式。在实时模式不生效是因为这个插件在实时模式下不检测html的部分……(简单来说就是如果你在md里用html来写代码块,这种情况下,他在实时模式下不会理会。这个应该是问题所在了)
样式问题
这个前面说了,anyBlock渲染出来的是html形式的块,和阅读模式下的代码块效果是一样的,如下
事实情况是,阅读模式对于实时模式有样式缺失,这点应该反馈至Obsidian官方
2 个赞
epe
27
(1) 所以可以理解为anyBlock其实是把转成的"代码块"渲染成了阅读模式的样式, 然后再嵌入到编辑模式对吧? 但又听你说过, 新的 ::: 写法目前在阅读模式无效, 既然都渲染成了阅读模式的样式, 为什么在阅读模式会无效呢?
(2) 不能直接在编辑模式里用HyperMD的方式直接渲染吗?(可能我表达的不专业啊, 或者这个东西根本不存在, 我只是按照自己的理解问的
). 这样可能高亮就没问题了, 感觉也与ob原生的编辑模式下的代码块渲染方式一致, 编辑时会更加的无违和感 (ob编辑模式的渲染肯定不是把阅读模式渲染好的东西直接嵌过来用吧
)
(3)我之前也试过在编辑模式里用html的方式写代码块, 但写的内链在反链里显示不出来. anyblock渲染出来的也是html形式的块, 为什么它写的内链就能在反链里显示出来呢?
(4) anyblock能否对转成的"代码块"也像Codeblock Customizer那样对内链和链接也做下渲染呢(如下图那样)? 如果这个可行的话, 那么anyblock可以算是第一个在代码块里实现真正意义上的"双链"效果了(即: 既可以链接出去, 又可以在反链里显示出来). 论坛里(特别是英文论坛里)太多人需要这个功能了
(5) 你的截图里的第3段代码效果, 我这边是跟你不一样的, 中间那个实时的效果一直不会显示出来, 左边那个阅读的效果, 偶尔可以, 绝大时候不可以, 像下图这样:
第(5)点不关键啊, 只是供你参考, 最关键的是第(4)点啊, 次之是第(2)点啊 
新版本有效,之前是不能在阅读模式下进行解析,但能才实时模式下进行解析
你让ob修,这是ob的问题。
和HyperMD无关,这个东西只能做一些很低级的所见即所得操作。例如像在表格单元格内直接编辑、例如想在思维导图中直接双击节点来编辑节点内的文字,这种都无法做到,所以ob也是拖了非常久才去内置支持table的可视化编辑。
如果想要非常丝滑地编辑,更好的做法是渲染后的html里的某个节点,可以在编辑时将里面换成一个文本框元素(例如表格的单元格td元素换成文本框),等你输入完后他再将文本框换回td元素并修改源md内容。像 AnyBlock 这种后期可以扩展支持几十个不同的处理器,如果要做成这种得为每钟处理器单独做一套这种操作逻辑,代码量巨大……
内链的识别看的是源代码,和渲染出来的结果无关。你源代码里就是有链接,哪怕你不把页面渲染出来,或者把页面渲染成什么样子,也都无法改变源代码里有链接这个事实。你写在代码块里的话,相当于你的源代码里本来就没有链接,哪怕渲染出来链接你的源代码本身依旧不包含链接
大写 X
,这个处理器可以用于去除下面的代码块或引用块
epe
30
最关键的第(4)点啊, 可以实现吗?
我甚至试着到Codeblock Customizer代码里把```全部替换成了:::, 结果当然是失败的
所以想就不需要考虑其它插件的依赖, Codeblock Customizer能实现的, AnyBlock应该也能实现, 而且这个确实是很多人需要的很实用的功能. 当然, 如果工程量真的很大的话, 也不能勉为其难 
用的就是anyblock最新版本的(3.1.2), 阅读模式下无效啊:

而且很奇怪有时候会渲染成下面这样的:

epe
31
大写的其实也试过了, 不过我阅读模式用的很少, 供你参考:

引用块规范用法应该:>
+ 空格
+ 内容
,你这紧挨着按理说不应该给你渲染出引用块来的,ob还是太不严格了
而且我插件的主要功能本来也不是这样用
不要因为插件灵活性高可以用于其他用途就擅自修改插件的用途啊喂
你去找他那边的插件进行功能请求,可能还简单些……
修了,下版本应该就正常了
epe
34
你的眼睛可真敏锐, 没加空格都被你看出来 
好的, 我正用我跛脚的英文给 Codeblock Customizer 和 Code Styler 这两个插件的作者提issue, 希望能跟你的插件联动一下, 兼容一下:::的代码语法. 主要是跟你中文交流舒服, 英文要写半天可能还表达不清楚
不过话说回来, 这个功能如果成的话就是首创的, 而且是很多人需要的, 这么好的机会你不抓住 
阅读模式奇怪的渲染现象还是蛮多的, 还有像下面这样的, 我也不知道啥原因. 阅读模式我很少用, 供你参考啊


绵羊猫
37
阅读模式竟然也有问题吗?
我发现引用块里放代码或标题实时模式就没法正确渲染了,那两种渲染看来都有缺陷。