news 2026/9/9 22:15:27

思源笔记 SiYuan v2.9.6 版本更新详解:快捷键扩展、属性视图升级与细节缺陷修复

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
思源笔记 SiYuan v2.9.6 版本更新详解:快捷键扩展、属性视图升级与细节缺陷修复

思源笔记 SiYuan v2.9.6 版本更新详解:快捷键扩展、属性视图升级与细节缺陷修复

【免费下载链接】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.9.6.md 编写。v2.9.6 是一个以“细节打磨 + 开发者能力升级”为主题的版本:它在编辑器快捷键体系上补齐了「复制文本 *」「优化排版」两个可配置入口,并围绕属性视图(Attribute View)集中交付了列过滤器、多选列类型、列计算与行列操作等一系列数据库能力,同时为插件系统新增了input-search事件总线。阅读本文后,你将完整了解该版本的 8 项改进、7 项缺陷修复与 6 项开发特性,并能结合仓库源码定位到每项能力背后的实现文件与调用链。

该变更记录位于仓库app/changelogs目录下,与 v2.8.4~v2.12.8 其它版本保持一致的多语言发布结构(英文 v2.9.6.md、简体中文 v2.9.6_zh_CN.md、繁体中文 v2.9.6_zh_CHT.md)。

一、版本总览

官方对该版本的定位是一句简洁的描述:"This version fixes some detail defects, it is recommended to upgrade."(本版本修复了一些细节缺陷,建议升级)。这意味着 v2.9.6 属于维护性质的小版本,侧重于修复影响日常使用的交互问题与打磨体验细节,而非引入颠覆性的大功能。

从变更内容看,v2.9.6 的价值点集中在三条线上:

  1. 编辑器与快捷键复制文本 *优化排版从“只能通过菜单/按钮触发”变为“支持自定义快捷键”;
  2. 属性视图(Attribute View):作为思源在结构化数据管理上的核心能力,一次性收获列过滤器、行浮窗打开、多选列、列计算、行列操作五类增强;
  3. 插件生态:新增input-search事件总线,让插件可以感知用户在搜索面板中的输入行为。

二、改进功能详解(Enhancement)

v2.9.6 共包含 8 项改进,可从源码与交互两个层面逐一解读。

2.1 快捷键配置:复制文本 *优化排版(#8742、#8767)

这两项改进本质上是把原本固化的命令接入思源的快捷键(Keymap)体系。在编辑器快捷键处理模块 commonHotkey.ts 中可以看到完整的使用方式:

import {copyTextByType} from "../toolbar/util"; // ... if (matchHotKey(window.siyuan.config.keymap.editor.general.optimizeTypography.custom, event)) { // 触发“优化排版” } // ... copyTextByType(selectElements.map(item => item.getAttribute("data-node-id")), "protocolMd"); copyTextByType([protyle.block.rootID], "protocolMd"); copyTextByType(selectElements.map(item => item.getAttribute("data-node-id")), "id"); copyTextByType([protyle.block.rootID], "protocol"); copyTextByType(selectElements.map(item => item.getAttribute("data-node-id")), "blockEmbed");

从这段代码可以读出几个实现事实:

  • 配置路径:快捷键统一读取window.siyuan.config.keymap.editor.general下的自定义键位(.custom字段),即对应“设置 → 快捷键 → 编辑器 → 通用”分组;
  • 复制文本 *的多目标语义*表示不止一种复制格式。代码通过 toolbar/util.ts 导出的copyTextByType函数,以不同的“复制类型”参数(protocolMdidprotocolblockEmbed)对选中的块执行复制,分别对应协议化 Markdown 链接、块 ID、思源协议链接、嵌入引用等复制形式;
  • 类型定义copyTextoptimizeTypography均已作为快捷键配置项写入配置类型 config.d.ts(分别位于第 1026 行与第 1048 行的editor.general结构下),并在按键映射默认值 constants.ts 中登记(copyText: {default: "", custom: ""},默认空键位、由用户自行绑定)。

实战建议:更新到 v2.9.6 后,可在「设置 → 快捷键 → 编辑器」中为「复制文本 *」与「优化排版」分别指定顺手的热键,例如将「优化排版」绑定为Ctrl+Shift+O,将「复制为协议链接」绑定到Ctrl+Shift+C一类的组合,替代原先的右键菜单操作。

2.2 KaTeX 宏定义设置不再检查拼写(PR #8763)

数学公式宏(Macro)在思源中通过editor.katexMacros配置项维护,其类型定义位于 config.d.ts,配置入口出现在编辑器设置页 editorTab.ts 中,而宏的实际展开渲染由 mathRender.ts 负责。

该 PR 的诉求是:宏定义输入框中的自定义宏名称(往往形如\foo这类非标准单词)不应再被浏览器的拼写检查红线标记。v2.9.6 通过在宏定义设置区域关闭拼写检查,消除了编辑宏时的视觉干扰。如果你使用大量自定义 LaTeX 宏,这一改动会直接改善书写体验。

2.3 引用计数与其它按钮的防重叠(#8715)

在行内公式、引用等行级内容上,思源会叠加显示引用计数等操作按钮。此前当多个按钮空间不足时会出现相互重叠,影响点击。本版本对按钮的排布逻辑做了收敛,避免引用计数与其邻近操作按钮交叠。

2.4 文档树文档悬浮提示改进(#8722)

文档树(File Tree)上的文档悬浮层此前与编辑器内的其它悬浮层(tip 层)在视觉与行为上不统一。此次将文档树悬浮提示统一为与其它提示层一致的交互样式,属于界面一致性打磨。

2.5 标签面板按钮顺序调整(#8741)

标签(Tag)面板工具栏中的「排序」图标被移动到「刷新」图标之后,减少高频刷新操作与排序入口之间的误触,属于按钮布局的细节优化。

2.6 官方同步:删除云端目录性能优化(#8759)

当用户通过官方云同步删除一个包含大量文件的目录时,云端需要递归清理该目录下的所有对象。v2.9.6 对这条删除链路进行了性能改进,缩短大批量目录删除的等待时间。该能力与内核层的数据同步模块相关,对应仓库中负责同步与云端目录维护的实现(参考 api/sync.go 与 model/cloud_service.go 所在的同步代码域)。

2.7 界面细节打磨(#8732)

一项综合性 UI 改进,涵盖多个窗口与面板的细节表现,属于没有单独展开的通用界面打磨项,可在实际使用中感知(例如间距、hover 态、滚动条与按钮反馈等)。

三、修复缺陷详解(Bugfix)

v2.9.6 共修复 7 个缺陷,按模块归类如下:

编号问题影响场景与修复含义
#8727右键菜单选择以后不关闭在编辑器中通过右键菜单触发某项操作后,菜单应当自动收起;此前某些操作路径下菜单残留,本版修复
#8731无法编辑第一个嵌入块当一个嵌入块(Embed Block)恰好是文档的第一个块时无法进入编辑;修复后文档首块为嵌入块时也可正常编辑
#8739移动端移动面板被搜索遮挡移动端拖动文档或面板时,移动浮层会被搜索界面遮挡而无法操作,属于移动端手势/浮层层级问题
#8746浮窗中的备注弹出后无法移动在引用浮窗等浮动层内查看块备注时,备注弹层无法被拖动,影响多显示器/分屏场景
#8748导出 .sy.zip 文档题头图未导出以 .sy.zip 格式导出文档时,文档题头图(封面图)缺失;修复后导出包会正确携带题头图资源
#8749「定位打开的文档」在创建文档后失效「定位打开的文档」(Always Select Opened Doc)开关在新建文档后不再生效,无法自动定位到新文档
#8758「分享到社区」流云资源文件 URL 不正确通过流云(LiuYun)托管资源时,「分享到社区」生成的资源文件 URL 不正确,导致外链失效

其中与导出相关的修复,对应 model/export.go 所在的内核导出实现域;「定位打开的文档」属于文件树交互,相关实现可追溯至前端文件树与文档切换逻辑。整体上这批修复覆盖了桌面端、移动端与导出流程,符合“建议升级”的版本定性。

四、开发者相关变更(Development)

这是 v2.9.6 中技术含量最高的一组变更,其中 5 项都指向**属性视图(Attribute View)**这一思源的结构化数据基础设施,另外 1 项面向插件系统。

4.1 属性视图:列过滤器(#8664)

属性视图的每个视图(View)可以定义一组过滤条件(Filter)。v2.9.6 为列级过滤补充了能力支撑。在内核层,过滤条件以树形结构存储在视图中,拷贝视图时需要对过滤树中叶子节点引用的列 ID 做重映射——这一逻辑实现在 filter.go 的remapFilterColumns函数(其单元测试见 filter_test.go 的TestRemapFilterColumns)。前端侧,视图渲染时读取并应用过滤条件,相关渲染路径集中在 api/av.go(视图渲染入口RenderAttributeView等,见第 931 行附近)与属性视图列渲染模块。

使用方式:在表格视图的表头筛选器或视图工具栏中打开过滤器配置,选择列、比较运算符与取值即可按列筛选行,多个条件可组合为条件组。

4.2 属性视图:行支持浮窗打开(#8667)

此前属性视图中的行只能原地编辑;v2.9.6 支持在浮动窗口中打开某一行,使你可以把行作为独立的编辑浮层拖到屏幕任意位置,便于对照多条记录进行编辑。这项能力与思源既有的浮窗(floating window)框架打通,行的字段在浮窗中保持可编辑。

4.3 属性视图:多选列类型(#8695)

新增MultiSelect(多选)列类型,允许一条记录在该列同时保存多个选项值。前端列类型注册代码位于 col.ts:

id: "multiSelect", // ... label: window.siyuan.languages.multiSelect,

可以看到该类型在渲染层以multiSelect作为内部类型 ID,并在列设置中以国际化文案multiSelect展示。相应地,过滤交互在 filter.ts 中做了分支处理(第 537、884 行分别处理单选与多选场景下的占位提示),即单列类型使用单选控件,而多选列在过滤时支持多值选择,例如“选项包含 A 或 B”。

4.4 属性视图:列计算(#8699)

列计算允许对数值型等列执行聚合运算(求和、均值、计数、最值等),并将结果显示在视图底部或对应位置。后端写路径实现在 attribute_view.go:

// setAttributeViewColumnCalc 处理列计算相关的操作 func setAttributeViewColumnCalc(operation *Operation) (err error) {

即前端发起列计算配置的写操作后,由该函数完成校验与落盘,随后视图重新渲染展示计算结果。

4.5 属性视图:行列操作(#8769)

在以上单项能力之上,v2.9.6 还完善了行列层面的整体操作能力(新增/删除行、插入/移动/删除列、列宽与字段调整等在视图内的组合操作),使属性视图从“能看能改字段”进一步走向“能灵活组织行列结构”,为表格/看板/画廊等布局共享同一套数据结构打好基础。

4.6 插件事件总线:input-search(#8725)

这是对插件开发者最直接的一项 API 增强:思源在搜索面板的输入事件中新增了input-search事件,插件可以订阅它感知用户搜索行为。

事件的实际派发点位于 util.ts 的inputEvent函数中(第 1332~1339 行)。当用户在搜索面板输入关键词、触发防抖计时后,搜索模块在发起搜索请求前会遍历所有已加载插件并广播事件:

edit.protyle?.app.plugins.forEach(item => { item.eventBus.emit("input-search", { protyle: edit, config, searchElement: searchInputElement, }); });

从派发代码可以看出,事件负载(payload)包含三个字段:

字段含义
protyle当前编辑器实例(edit),可据此访问当前打开的文档上下文
config搜索面板配置(Config.IUILayoutTabSearchConfig),包含query等当前状态
searchElement搜索输入框 DOM 元素,便于插件读取最新输入值或注入 UI

在插件侧,只需在启动逻辑里注册监听即可使用:

this.eventBus.on("input-search", (payload) => { const {config, searchElement} = payload; // 例如:记录搜索词、统计搜索频率或联动其它面板 console.log("用户正在搜索:", config.query, searchElement.value); });

这个事件让第三方插件第一次可以在不改动内核的前提下旁路感知全局搜索的输入流,是本次版本对插件生态最有价值的扩展点,非常适合用来做搜索词统计、搜索建议增强或与外部服务联动的插件。

五、升级建议与验证方式

该版本建议升级,尤其推荐以下用户升级:

  • 重度使用快捷键的键盘流用户(可解锁复制文本 *优化排版的热键);
  • 使用属性视图组织任务、阅读笔记或资产清单的用户(获得过滤、多选、计算与行列操作);
  • 正在开发或使用搜索增强类插件的开发者(可接入input-search事件)。

如需从源码层面核对本文结论,可沿以下文件路径继续深入:

  • 快捷键键位默认值:constants.ts
  • 快捷键配置类型:config.d.ts(copyText第 1026 行、optimizeTypography第 1048 行)
  • 快捷键触发与复制实现:commonHotkey.ts、toolbar/util.ts
  • input-search事件派发:util.ts
  • 属性视图多选列注册:col.ts
  • 属性视图过滤实现与测试:filter.go、filter_test.go
  • 列计算写路径:attribute_view.go(setAttributeViewColumnCalc
  • 视图渲染 API:api/av.go

总体而言,v2.9.6 延续了思源“高频小步快跑”的迭代节奏:对普通用户而言是一次低风险的体验优化升级;对属性视图用户和插件开发者而言,则值得重点关注其中新落地的结构化数据操作能力与input-search事件接口。

【免费下载链接】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/9 22:10:34

阿里云大数据产品体系全景梳理:从数据采集到实时分析

这两个月我把阿里云的大数据产品体系从头到尾梳理了一遍,趁着记忆还热,把这份学习记录整理出来。如果你正在走大数据学习路线,或者准备搞大数据毕业设计、项目选型,希望这篇能帮你省掉一些自己摸索的时间。说实话,大数…

作者头像 李华
网站建设 2026/9/9 22:10:17

开源工具Factory-translator:工厂体系文件翻译的版式与术语难题

前两年我一直在帮制造企业做供应链转移项目,从华东搬到中西部,从国内体系搬到海外工厂,最头疼的往往不是设备搬运、不是产线调试,而是那一摞摞的体系文件。质量手册、程序文件、作业指导书、FMEA、控制计划,统统要跟着…

作者头像 李华
网站建设 2026/9/9 22:10:13

平衡谱特征选择:解决高维数据冗余特征问题的新思路

做特征选择这件事,很多人刚上手时都是跑一遍方差过滤、卡方检验或者互信息排名,然后直接把top k特征丢给模型。这套流程对付几百维的数据还凑合,一旦上了基因表达谱、文本TF-IDF或者图像特征这种动辄上万维的场景,就会遇到一个很现…

作者头像 李华
网站建设 2026/9/9 22:08:55

ERP里明明有库存管理,为什么还要花钱上WMS?

仓库最让人头疼的,不是没有系统,而是明明已经上了ERP,库存还是管不好。 系统里显示还有500件,仓库人员却找不到;采购问货到了没有,ERP显示已经入库,现场却说还没上架;销售催着发货&a…

作者头像 李华
网站建设 2026/9/9 22:07:07

FastAPI内网部署docs白屏?离线化Swagger UI资源一劳永逸

在实际的后端开发里,明明本地开发环境跑得好好的 FastAPI 项目,一旦部署到内网服务器,打开/docs页面就只剩一片空白,控制台里刷满了红色报错。这个问题的概率非常高,而且几乎每个进入内网环境的团队都会踩上一次。这篇…

作者头像 李华