news 2026/9/10 19:32:28

思源笔记 v2.11.3 深度解读:按元素类型精准搜索替换、模板函数扩展与新内核 API

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
思源笔记 v2.11.3 深度解读:按元素类型精准搜索替换、模板函数扩展与新内核 API

思源笔记 v2.11.3 深度解读:按元素类型精准搜索替换、模板函数扩展与新内核 API

【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间,让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan

导读

本文以思源笔记(SiYuan)v2.11.3 版本发布说明(v2.11.3_zh_CN.md)为骨架,系统梳理该版本的核心改进与修复内容,并逐条对照当前仓库源码给出实现层面的佐证。读完本文,你将掌握该版本"搜索替换按元素类型精准控制"这一标志性能力的完整使用方式、四种新模板函数的计算语义,以及getTailChildBlocksaddVirtualBlockRefInclude/Exclude等新内核 API 的入参与调用约定,可直接用于日常笔记维护与插件开发。

版本总览与亮点

v2.11.3 处于思源笔记 2.8.4~2.12.8 版本演进区间内,属于该区间接近收尾的维护版本,重点围绕编辑器体验、搜索替换精度、知识库数据一致性与开发接口补齐展开。依据发布说明内"功能特性早鸟价将于 2024 年 1 月初结束"的提示可以推断,该版本发布于 2023 年末前后。

整体改进可归纳为四条主线:

  1. 搜索替换精细化:新增"替换类型"选择能力,可把替换范围精确限定到普通文本、行级公式、链接锚文本等特定元素;
  2. 内容管理与呈现:文档题头图可显示链接地址、CSS/JS 代码片段支持一键全部启用或禁用;
  3. 数据一致性与稳定性:删除文档时同步清理数据库 attributes 表数据,并修复多处解析、拖拽与滚动问题;
  4. 开发者能力开放:新增/api/block/getTailChildBlocks、虚拟引用管理 API、WebSocketsetConf推送事件,并大幅增强数据库表格视图的编辑与排序能力。

核心亮点:搜索替换支持按元素类型精准控制

发布说明中明确把该版本的第一卖点描述为"搜索替换支持选择元素类型,比如可以仅替换纯文本中的内容而不替换公式内容",对应社区工单 搜索替换支持选择元素类型 #9895。

从"整块替换"到"按元素替换"

在早期版本中,全局搜索替换的粒度通常是"块"一级,勾选的是搜索范围(如是否命中段落、标题、代码块等);而像"正文中的一个加粗词"这类行内元素级内容,替换时容易被连带误伤——例如把公式中的某个变量也一并改掉。v2.11.3 引入的替换类型机制,把目标细化到了 Markdown 行内语法层级。

从当前前端源码 app/src/search/menu.ts 可以看到,替换面板通过replaceFilterMenu渲染一组独立开关,并把勾选结果写入搜索配置的replaceTypes字段;而zh-CN.json语言文件中完整的键定义则给出了这套"元素类型"清单:

类型键中文含义类型键中文含义
text普通文本blockRef引用锚文本
imgText图片提示文本fileAnnotationRefPDF 标注锚文本
imgTitle图片标题kbd键盘
imgSrc图片链接mark高亮
aText链接锚文本s删除
aTitle链接标题sub下标
aHref链接地址sup上标
code行级代码tag标签
em斜体u下划线
strong粗体docTitle文档标题
inlineMath行级公式codeBlock代码块
inlineMemo行级备注mathBlock公式块
htmlBlockHTML 块

(完整定义见 app/appearance/langs/zh-CN.json。)

典型操作场景

发布说明举例的场景即可用上述开关直观复现:

  • 只想改正文文字、不碰公式:执行替换前,在"替换类型"弹层中仅保留"普通文本",取消勾选"行级公式""公式块",替换操作便不会波及$...$数学公式内容;
  • 只想批量修正失效链接:仅勾选"链接地址"(aHref),即可在不动锚文本的情况下统一替换 URL 前缀;
  • 精确替换特定格式:例如把全文所有斜体的某个词改为普通文本,可只勾选"斜体"(em)。

该机制与搜索面板原本的"搜索类型"过滤配合使用:前者决定"搜到哪些块",后者决定"块内具体改哪些元素"。搜索类型菜单在 app/src/search/menu.ts 中还以parentSubtypes建立了父子层级联动(父类型勾选时同步影响其子类型)。两者共同存放在页签搜索配置的replaceTypes/types字段中,切换页签或重新打开面板时可保持一致。

文档题头图支持显示链接地址

发布说明中另一项呈现层改进是"文档题头图支持显示链接地址"(工单 #9850)。在文档设置中为文档配置题头图(封面)后,现在可以直接看到题头图所引用的资源链接,便于确认图片来源、排查失效图片或在多个文档间复用同一张封面,而无需再到资源文件中逐一核对。

CSS / JS 代码片段:一键全部启用或禁用

此前用户只能逐条开关代码片段,当启用了几十条第三方外观 / JS 片段导致界面异常时,排查成本较高。v2.11.3 起(工单 #9860)支持对全部 CSS 与 JS 代码片段一键启用或禁用,方便快速定位问题片段:

  1. 进入设置 → 外观 → 代码片段
  2. 在"自定义 CSS"或"自定义 JS"分组中使用顶部的全局开关,一键放行或屏蔽该分组内所有片段;
  3. 片段变更会立即重新推送生效,无需重启内核。

从内核实现看,片段配置对象由conf.Snpt承载,设置接口在写入model.Conf.Snippet并调用model.Conf.Save()持久化后,会通过model.PushReloadSnippet(snippet)将新配置热推送给编辑器渲染层,相关逻辑见 kernel/api/setting.go。因此"一键启用/禁用"本质上是批量改写配置后触发的一次全局重载,响应即时且不会中断内核服务。

删除文档后清理数据库 attributes 记录

为保持属性(Attribute)数据一致性,该版本修复了文档删除后其关联的属性残留问题(工单 #9875):删除文档时,数据库中该文档对应的 attributes 表记录会同步清除。这一改动避免了在数据库视图中出现指向已删除文档的"孤儿"属性,降低数据表体积并防止属性视图关联异常。

闪卡间隔重复:支持Space/Enter快捷评分

闪卡(间隔重复)模块新增键盘操作支持:在复习答题并完成自我评分前的确认环节,可直接按SpaceEnter选择"良好"评分(工单 #9878)。相比在按钮上点击鼠标,双手不离键盘的评分流程更适合快速刷卡场景;同时保持原有评分选项不变,习惯鼠标操作的用户不受影响。

网页剪藏与代码块转换改进

该版本改进了网页剪藏的代码块转换逻辑(工单 #9896)。剪藏工具在前端抓取网页时,对于以<pre><code>等结构呈现的代码区域,现在能更可靠地转换为思源的原生代码块,减少转换后代码换行丢失、语言标注缺失或误转为普通段落的情况。配合剪藏后进入编辑器校对,可显著降低手动整理成本。

模板函数扩展:powpowfloglogf

v2.11.3 为模板引擎新增四个数学运算函数(工单 #9911 的BuiltInTemplateFuncs内:

ret["pow"] = pow ret["powf"] = powf ret["log"] = log ret["logf"] = logf

其具体计算语义见同文件 kernel/filesys/template.go:

func pow(a, b any) int64 { return int64(math.Pow(cast.ToFloat64(a), cast.ToFloat64(b))) } func powf(a, b any) float64 { return math.Pow(cast.ToFloat64(a), cast.ToFloat64(b)) } func log(a, b any) int64 { return int64(math.Log(cast.ToFloat64(a)) / math.Log(cast.ToFloat64(b))) } func logf(a, b any) float64 { return math.Log(cast.ToFloat64(a)) / math.Log(cast.ToFloat64(b)) }

使用要点:

  • pow(a, b)返回ab次幂,结果按整数返回(int64,会截断小数);powf返回浮点结果,适合需要精确保留小数的场景;
  • log(a, b)logf(a, b)实现的是ln(a)/ln(b),即以 b 为底求 a 的对数log(8, 2)将返回 3;logf保留浮点精度;
  • 参数类型在 Go 侧通过cast.ToFloat64统一转换,因此模板中传入字符串形式的数值(如从配置或文档属性读取的值)也能参与运算;
  • 模板函数整体基于 sprig 函数库构建,这四个新函数可直接与原有函数(如addmulround等)组合嵌套使用。

模板代码示例(作用在某文档模板中输出换底对数与幂结果):

计算前,base={{ .HPath }} 无关 {{/* 仅作演示:求 2 的 10 次幂 */}} 结果1 = {{ pow 2 10 }} {{/* 以 2 为底求 1024 的对数 */}} 结果2 = {{ log 1024 2 }}

面向开发者的能力升级

新内核 API:/api/block/getTailChildBlocks

为满足"获取某块末尾若干子块"的高频需求(常用于面板联动与自动化脚本),该版本新增内部内核 API/api/block/getTailChildBlocks(工单 #9884,请求与返回结构为:

{ "id": "20230405172236-pg3l9eu", "n": 7 }
  • id:文档或块的 ID,格式须通过util.InvalidIDPattern校验;
  • n:需要取回的末尾子块数量,可选;当缺省或小于 1 时,服务端默认按7处理;
  • 返回:model.GetTailChildBlocks(id, n)的计算结果,即按文档树顺序截取的最后nChildBlock对象。

具体数据层实现见 kernel/model/block.go 的GetTailChildBlocks,它在子块列表就绪的前提下直接切片取尾部,因此开销较小,适合在页签加载、浮窗预览等场景中快速取得"最近几个子块"。

虚拟引用白名单 / 黑名单 API

对应工单 #9909,新增两个成对的管理接口,用于控制虚拟引用(Virtual Block Reference)的候选生成范围:

  • /api/setting/addVirtualBlockRefInclude:把关键词加入白名单,虚拟引用只对命中白名单的内容生效;
  • /api/setting/addVirtualBlockRefExclude:把关键词加入黑名单,命中黑名单的内容不再生成虚拟引用。

两个接口的请求体一致,均以数组形式提交关键词:

{ "keywords": ["Python", "Golang"] }

处理器实现见 kernel/api/setting.go:解析keywords数组后分别调用model.AddVirtualBlockRefInclude(keywords)/model.AddVirtualBlockRefExclude(keywords),随后通过util.BroadcastByType("main", "setConf", 0, "", model.Conf)向所有客户端广播最新的setConf事件。数据层在 kernel/model/virutalref.go 中维护黑白名单,并统一调用ResetVirtualBlockRefCache()使已生成的虚拟引用缓存失效、随后由内核任务队列异步重建(kernel/model/virutalref.go)。

WebSocketmain通道推送setConf事件

配合上述 API,v2.11.3 明确将setConf定义为 WebSocketmain通道的标准推送事件(工单 #9910)等接口复用。

数据库表格视图能力增强

开发者条目中对数据库表格视图(Attribute View / 表视图)投入了明显资源,包括:

  • 降低编辑延迟(#9306):优化单元格编辑的渲染链路,减少输入时的卡顿与同步等待;
  • 单元格级剪贴板操作(#9886):单元格选中后支持复制、剪切、粘贴与删除,批量整理数据不再依赖逐格手工编辑;
  • 模板列引用日期列(#9887):模板列(模板函数列)内可引用同行的日期类型列参与计算与格式化输出;
  • 主键列可修改绑定块(#9892):允许重新指定主键列绑定的文档块,修复了主键一旦绑定便难以调整的限制;
  • 新增行自动带入过滤值(#9905):在表格视图处于过滤状态下新增行时,新行会自动填充当前过滤条件对应的取值,减少重复录入;
  • 模板列排序改进(#9914):修正模板列参与排序时的取值与稳定性问题。

其他开发向改进

  • 改进布局保存机制(#9866):优化工作区布局(页签、停靠面板等)的持久化与恢复策略,减少异常退出导致的布局丢失。

缺陷修复一览

本节汇总 v2.11.3 中修复的主要问题,供遇到同类现象的读者对照验证:

问题描述工单
"启动时关闭所有页签"设置在 APP 伺服桌面端浏览器访问时失效#9855
段落包含空白行时回车解析异常#9868
在非 Windows 端创建文档异常#9890
删除或添加块导致编辑器滚动位置跳动#9891
从超级块拖拽出内容后再次拖拽时内容消失#9900

其中"段落包含空白行时回车解析异常"属于编辑器解析层问题,涉及块级解析对空白行的容忍度;"删除或添加块导致编辑器滚动"则直接关系到长文档编辑体验,二者修复后可显著降低日常写作中的异常打断概率。另外两项体验类修复为:移动端补全了缺失的"上移"按钮(#9882),以及修复 Windows 下面包屑无法显示下划线字符_的问题(#9893);iPhone 端文档树展开时高亮错位亦一并修复(#9904)。

升级与验证建议

  • 核对版本:升级到 v2.11.3 后,可在"设置 → 关于"中确认版本号,并建议先用测试工作区验证关键流程;
  • 验证替换精度:新建包含行内公式、加粗、链接与普通文本的测试文档,用"替换类型"仅勾选"普通文本"执行一次替换,确认公式与链接锚文本未被误改后再应用到真实笔记库;
  • 开发者联调:插件或脚本若需读取文档末尾子块或调整虚拟引用范围,可先以本仓库源码为参照,用上述请求样例在开发环境直接调用getTailChildBlocks与两个虚拟引用管理接口,观察返回结构与setConf推送是否符合预期。

本版本完整变更清单可查阅仓库内原始发布说明 v2.11.3_zh_CN.md;各功能的实现与配置入口则集中在 kernel/api、kernel/model、kernel/filesys/template.go 与 app/src/search/menu.ts 等文件中,可作为继续深入阅读的起点。

【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间,让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 19:31:43

压电式雨量传感器与边缘计算在暴雨监测中的应用

1. 项目背景与核心价值暴雨灾害是全球范围内最常见的自然灾害之一&#xff0c;传统雨量监测站通常采用翻斗式或称重式传感器&#xff0c;存在机械磨损、维护成本高、数据传输延迟等问题。而压电式雨量传感器通过雨滴冲击产生的压电效应进行测量&#xff0c;具有无机械部件、响应…

作者头像 李华
网站建设 2026/9/10 19:31:10

尼采悲剧哲学:日神与酒神的艺术辩证法

1. 尼采的酒神与日神&#xff1a;理解《悲剧的诞生》的核心框架1886年尼采在《自我批判的尝试》中坦言&#xff0c;这本处女作"本该用歌德和莎士比亚都还完全陌生的希腊精神来说话"。这种精神分裂式的双重性恰恰构成了全书的思想底色——阿波罗&#xff08;日神&…

作者头像 李华
网站建设 2026/9/10 19:30:55

Netty单元测试利器:EmbeddedChannel实战指南

1. 为什么需要EmbeddedChannel测试在Netty应用开发中&#xff0c;网络通信的测试一直是个痛点。传统方式需要启动真实服务端和客户端&#xff0c;不仅测试执行慢&#xff0c;还容易受网络环境影响。我在金融支付网关开发中就遇到过这种困境——每次跑测试用例都要等十几秒的TCP…

作者头像 李华
网站建设 2026/9/10 19:29:32

GE图引擎ES接口文档

ES接口 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友…

作者头像 李华
网站建设 2026/9/10 19:29:32

10米精度土地利用数据处理全链路指南

简介&#xff1a;本资源为2017年江西省全域10米精度土地利用遥感分类数据集&#xff0c;面向地理信息、遥感、国土规划及生态环境研究领域的高校师生、科研人员与GIS工程师&#xff0c;用于区域土地覆盖分析、变化监测、空间建模等基础研究与应用实践。数据基于Sentinel-2影像与…

作者头像 李华