SiYuan v3.1.2 版本更新详解:网页剪藏、数据库能力与引用导出的全面增强
【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间,让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan
v3.1.2 是 SiYuan(思源笔记)在 3.1.x 系列中的一次质量型版本迭代,核心方向是改进网页剪藏、修复缺陷并优化细节。本指南以该版本的官方更新日志(v3.1.2_zh_CN.md)为骨架,结合仓库源码逐项拆解 11 项功能改进、4 项缺陷修复与 1 项开发重构,帮助你理解这些变更背后的实现机制,并掌握对应的使用与排查方法。
版本概览与定位
该版本的主要变化集中在三个领域:
- 网页剪藏:HTML 代码、代码块、
kbd标签的剪藏质量得到系统化改进,覆盖了浏览器剪藏插件到编辑器粘贴链路的多个环节; - 数据库(属性视图):复制绑定块自动入库、模板字段导出、网络资源转本地、日期字段排序等能力增强,让基于数据库的内容组织更加顺滑;
- 引用与导出:块引用锚文本导出、嵌入标题块导出行为得到修正。
此外还包括大纲面板渲染、块引用搜索、表情字符集等细节优化,以及 Electron 运行时的升级。
网页剪藏改进:从 HTML 到块级内容的链路优化
此版本对剪藏相关的改进多达三项,均围绕"HTML 内容进入编辑器"这条核心链路展开:
- 改进 HTML 代码剪藏(issue #11924):粘贴或剪藏包含行内代码(
<code>)的 HTML 时,转换结果更贴近原始语义; - 改进 HTML 代码块剪藏(issue #12014):针对
<pre>/代码块结构的识别与块级转换进行增强; - 改进 HTML kbd 剪藏(issue #12027):
<kbd>键盘按键标签在剪藏后的渲染与转义行为得到修正。
从源码结构看,这条链路在前端主要由 paste.ts 承载——它负责将剪贴板中的 HTML 转换为 SiYuan 的块级 DOM 结构,并处理行级元素(如行内代码、kbd)与块级元素(如代码块)的分流。而在内核侧,clipboard.go 提供了与系统剪贴板交互的 API(如readFilePaths/writeFilePath),其中明确注释了Linux 端不再支持"粘贴为纯文本"时处理文件绝对路径(对应 issue #5825),这说明不同平台下剪藏/粘贴的行为存在差异,跨平台使用剪藏功能时需要留意系统剪贴板能力的边界。
对使用者而言,改进后最直观的收益是:从网页复制包含代码段、键盘按键说明的内容时,粘贴到思源后能获得更干净、更少多余标签的块级结果,减少手工清理成本。
数据库(属性视图)能力增强
数据库是 SiYuan 组织结构化内容的核心能力,此版本围绕它做了四项改进,内核侧的对应实现位于 kernel/av 模块(av.go、filter.go、sort.go、value.go、relation.go等)。
数据库绑定块复制后自动加入数据库(issue #11959)
此前,将一个已绑定数据库的行块复制为副本后,副本不会自动进入数据库,容易造成数据视图与内容不同步。此版本改进了复制行为:绑定块被复制为副本后会自动添加到数据库,保证副本同样参与该数据库的行管理与属性维护,降低了手工补录的成本。
改进数据库模板字段导出(issue #11988)
模板字段(Template 字段)在导出时此前可能存在占位符未被解析或解析不完整的问题。此版本改进后,模板字段的导出结果与编辑态保持一致。从实现角度看,字段值的导出涉及 kernel/av/value.go 中对不同类型字段值的序列化处理,模板类字段属于其中需要特殊展开的类型。
支持将数据库中的网络资源转换为本地(issue #12096)
此前数据库单元格中的图片等资源若以网络 URL 形式存在,会依赖外链可用性,离线或外链失效时无法正常展示。此版本新增能力:可将数据库中的网络资源一键转换为本地资源,转换后资源被纳入仓库的资产管理,受备份与同步机制保护。
改进数据库日期字段排序(issue #12127)
日期字段的排序此前可能在特定格式或边界情况下出现顺序异常。此版本修正了日期字段的排序逻辑,相关实现可参考 kernel/av/sort.go 中对属性视图排序规则的底层支持,确保按日期升序/降序排列的结果符合直觉。
引用与导出:锚文本与嵌入块行为修正
改进块引用锚文本导出(issue #11995)
块引用在导出(如导出 Markdown)时,锚文本(即引用的显示文字)此前可能出现丢失或与引用目标不一致的情况。此版本改进了块引用锚文本的导出行为,使导出的引用内容更忠实于编辑器中的呈现。导出相关流程的核心实现在 kernel/model/export.go 与 export_merge.go,它们负责将块树转换为目标格式并处理引用关系的文本还原。
修复:导出嵌入的标题块时缺少其下方内容(issue #12075)
修复了"导出嵌入的标题块时没有下面的块"的问题。此前在文档中嵌入({{引用嵌入)一个标题块并导出时,标题块下方的所属内容不会被一并导出,导致导出结果残缺。此版本修正后,导出嵌入的标题块会连带其后的从属块一并输出,保证导出文档的结构完整性。
大纲面板与块引用搜索的细节优化
改进大纲面板转义渲染(issue #12001)
大纲面板中,标题文本若包含特殊字符(如*、`等 Markdown 标记或 HTML 转义字符),此前可能被错误解析导致显示异常。此版本改进了大纲面板的转义渲染,确保标题在面板中按字面内容显示,而不是被当作格式语法处理。
改进块引用搜索(issue #12010)
块引用在插入时需要通过搜索定位目标块。此版本改进了块引用搜索的匹配体验,搜索结果的命中与排序更准确。内核侧的搜索实现可参考 kernel/search/find.go 与 mark.go,前端搜索界面位于 app/src/search 目录。
表情字符集与视觉细节
改进表情字符集(PR #12051)更新了内置的表情字符集数据,使表情选择面板覆盖的 Unicode 表情范围更完整。仓库中与表情资源加载相关的实现包括前端 app/src/emoji 与内核侧的 emojis_watcher.go(负责监听表情资源目录变化)。
缺陷修复:四项关键问题
标题块更新时间异常(issue #11996)
修复了标题块在特定编辑操作下更新时间(updated 属性)不刷新或异常变动的问题。标题块是文档结构的骨架,其元数据(如更新时间)的准确性直接影响排序、索引与历史记录,相关块元数据维护逻辑位于 kernel/treenode 与 kernel/model/block.go 中。
设置搜索后"关于"消失(issue #12013)
修复了在设置界面执行搜索后,"关于"(About)设置项消失的界面缺陷。该面板的前端实现位于 aboutTab.ts,此修复确保搜索过滤不会误隐藏关于面板的入口。
超级块中拖动嵌入块导致重复(issue #12077)
修复了在超级块(Super Block)中拖动嵌入块时,嵌入块被重复复制的问题。此前拖拽过程中可能产生多余的嵌入副本,干扰文档内容;修复后拖拽仅改变块的位置而不产生冗余副本。
开发重构:Electron 运行时升级
此版本将桌面端运行时Electron 升级至 v31.3.1(issue #12134),以获取 Chromium 与 Node.js 底层的安全修复与稳定性改进。
需要说明的是,当前仓库的 app/package.json 中应用版本为 3.7.2、Electron 依赖已演进至 42.6.1,即仓库已历经后续多个版本的迭代。因此 v3.1.2 中记录的 Electron v31.3.1 属于该版本发布时的依赖快照,如需复现当时的构建环境,应以该版本的 tag 与 lockfile 为准。
如何获取该版本
v3.1.2 属于稳定版发布,可通过以下渠道获取:
- 桌面端安装包:覆盖 Windows(含 NSIS 安装程序,相关配置见 installer.nsh)、macOS(见 electron-builder-darwin.yml)、Linux 各发行版;
- 内核源码构建:内核为 Go 语言实现,入口在 kernel/main.go,可通过 Go 工具链编译运行;
- 官方下载渠道:思源官网下载页与 GitHub Releases 均提供各平台安装包。
如果你是开发者,想了解构建与打包的完整配置,可参考 app/electron-builder.yml 及各平台的 builder 配置文件。
小结
v3.1.2 虽是小版本,却覆盖了"内容进入(剪藏)— 内容组织(数据库/大纲)— 内容输出(导出)"的完整内容工作流。理解这些变更背后的源码实现,不仅能帮助你更好地使用这些功能,也能在遇到类似问题时快速定位到对应的代码路径——例如剪藏问题查 paste.ts 与 clipboard.go,数据库问题查 kernel/av,导出问题查 kernel/model/export.go。
【免费下载链接】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),仅供参考