全新NVDA剪贴板即将发布,期待你的体验与赞助
Windows 的剪贴板(Clipboard),可以简单理解成电脑里的一个临时“中转站”,用于保存用户刚刚复制或剪切的内容,并在不同应用之间方便地交换数据。
但对于屏幕阅读器用户来说,尤其是国内的屏幕阅读器用户,围绕剪贴板进行的开发和再利用一直都比较丰富。
我们通常希望:
- 能随时查看、修改剪贴板中的内容。例如,对于文本,可以逐行、逐字查看,也可以进行汇总和摘要。
- 当剪贴板内容发生变化时,能够及时给出反馈。
- 能够只粘贴剪贴板中的部分内容。
- 能够管理剪贴板历史记录。这也意味着,对于屏幕阅读器用户而言,剪贴板仅仅作为一个“临时中转站”是不够的。
- 能够与屏幕阅读器深度融合,例如将屏幕阅读器朗读过的或当前可浏览的特定内容复制到剪贴板。
- 除此以外,可能还有更多玩法,例如跨端粘贴。
其实,抛开屏幕阅读器用户,非屏幕阅读器用户同样对剪贴板有着更多需求。市面上也已经有 Ditto 这样的剪贴板管理工具。
对于 NVDA 而言,也一直不乏剪贴板相关的插件。比如早期的“星光小板”,以及现在的“剪贴板朗读增强”,都体现了国内 NVDA 用户和开发者对剪贴板使用场景的探索与实践。
为了让剪贴板相关需求更加清晰、功能更加集中、代码更加易于维护,并在此基础上惠及更多用户,NVDA 中文社区计划开发一款全新的剪贴板插件。
以往的插件有哪些可改进的点
- 功能较为繁多,定位不够清晰。例如,虽然名称为“剪贴板增强”,但功能层面还混合了词典查询、公农历信息播报等特性。
- 部分代码实现尚未遵循 NVDA 的编码规范,本地化难度较高。
- 部分功能实现相对脆弱。例如使用 monkey patching 而不是 Extension Point,容易产生功能冲突。
- 模块之间职责耦合度较高,增加了维护成本。
我们计划怎么做
开发一款全新的剪贴板插件,在解决上述问题的基础上,进一步加入一些新的功能。
- 重新梳理功能定位。将与剪贴板无关的功能拆分到独立的插件中,便于分别维护。
- 遵循 NVDA 最新的编码规范。尤其重视 i18n,以便惠及更多地区的 NVDA 用户。
- 遵循 NVDA 插件开发最佳实践。例如优先使用 NVDA 的内置实现,使用 Extension Point 代替 monkey patching 等。
- 加入更多新功能。探索并创新地实现一些同类产品中尚未出现的功能特性。
我们已经做了什么
- 开发了一个功能原型,并向参与 Polyglot(翻译插件)众筹的赞助成员开放优先试用。
- 已将其中一些功能拆分为独立插件,并将个别功能迁移到与其定位更加匹配的插件中。
- 实现了一些有用的新功能。
新版剪贴板插件功能盘点
- 支持与手机版天坦读屏进行跨平台复制粘贴。
- 历史记录支持使用 OneDrive 进行云同步。
- 新增了剪贴板管理器:支持分类、浏览、搜索、新建和编辑剪贴板历史等操作。
- 除纯文本外,剪贴板历史还支持保存更多类型的数据,包括格式化文本、图像、文本和图像以及文件组。
- 剪贴板的导航单位可调,例如按 Windows 分词边界或按照标点符号拆分。
- 剪贴板摘要更准确,也更有用。例如,对于文件,将提供大小、数量,以及是复制还是剪切;对于图片,将提供方向、分辨率,近似纯色的图像还将提供占比最高的像素颜色;对于文本,将提供当前行数、总行数、字符数、是否含空白、汉字数、标点数等。
- 可以在浏览模式下显示剪贴板内容,支持渲染 Markdown 包括数学公式和 html 语法。
你需要适应的点
我们从新版插件中移除了一些功能,其中多数功能给出了等效替代方案,你需要了解这些变化。
- 最后一次朗读文本的逐字、逐词、逐句导航功能已完全移除。可使用 2026.2 中新增的
NVDA+X(重复最后朗读的内容;连按两次可在浏览模式下显示该信息)代替。 - 公农历信息播报功能已完全移除,可使用“简易万年历”代替。
- 本地英汉词典解释功能已完全移除,可使用“Polyglot”代替。
- 拷贝最后一次朗读的文本功能已完全移除,可使用 2026.3 中新增的等效功能(
NVDA+Ctrl+X)代替。 - 用较慢的语速重复最后一次朗读的文本功能已完全移除,暂无替代方案。
- 打开剪贴板中或刚听到的文本内的网址功能已完全移除,可使用“打开链接(OpenLinkWith)”代替。
- 剪贴板编辑器功能已合并到剪贴板管理器。
- 其他手势变化请以插件帮助文档为准。
作为开发者,我有哪些考量
作为视障用户的重要基础设施——屏幕阅读器,它承担的任务不只是读出文字这么简单,它在很大程度上决定了我们如何与计算机交互。
因此,移除或迁移某些功能,亦或是改变某些按键和手势,确实可能打破一些用户已经形成的使用习惯。但如果从更长远的角度来看,我们认为有一些原则应当优先于过往习惯。
-
有替代方案,就不重复造轮子。
如果一个功能已经有成熟、稳定且定位明确的替代方案,就没有必要为了保留原有使用方式,而在新的插件中继续维护一套重复实现。
例如,对于最后一次朗读文本的相关功能,我们推荐优先使用 NVDA 新版本已经提供的原生能力。该方案需要连按两次
NVDA+X,才能在浏览模式下对最后朗读的内容进行文本导航,确实改变了原有的使用习惯。但从操作成本来看,新的方案所需手势更少;配合句子导航、单词导航,也能够提供更加灵活、统一的精细化查看方式。 -
职责边界清晰,优先于功能大而全。
一个插件拥有更多功能,并不意味着它更有价值。功能不断增加之后,插件之间的定位会越来越模糊,内部实现的耦合也会越来越高,最终会增加开发、调试、维护和本地化的成本。
对于与剪贴板关系不大的功能,与其继续堆砌在同一个插件中,不如将它们拆分为更加合适的独立插件。
这样并不是简单地减少功能,而是将功能放到更加合适的位置,同时让每个插件的定位更加清晰。对于用户来说,可以根据自己的需求选择和组合插件;对于开发者来说,则可以更加独立地开发、测试和维护各个项目。
例如,本次我们将本地英汉词典功能迁移到 Polyglot,将公农历信息播报开发为独立的“简易万年历”,对于打开网址,我们推荐使用社区已有的 OpenLinkWith。这些功能本身并没有什么问题,也不是因为它们“不好用”才被移除,而是因为它们已经有了更合适的归属。
因此,我们更希望让剪贴板插件专注于剪贴板本身:如何保存、浏览、搜索、编辑和管理剪贴板内容,以及围绕这些内容提供更好的辅助能力。
-
上游贡献优先于插件覆盖。
NVDA 本身一直在不断发展。如果 NVDA 缺失了某个功能,那么我们不如进行上游贡献,而不是把一个具有普遍需求的功能长期保留在独立的插件中。
这样做的好处有两点:
一是通过 Feature Request、ADR 等方式,让更大的社区参与需求讨论和方案评估,验证功能是否具有普遍性,并探索是否存在更好的实现方式;
二是如果功能最终进入 NVDA,就能够由整个项目共同维护,避免一个具有普遍需求的功能长期依赖于某个个人插件,从而面临无人维护的风险。
例如,我们曾经希望 NVDA 能够支持中文文本的分词能力,也有用户希望将其作为剪贴板插件的一部分。但我们认为,中文分词本质上属于屏幕阅读器的通用文本处理能力,并不应该绑定在剪贴板插件中。因此,我们在 2026.3 为 NVDA 添加了原生的中文分词功能。
随后,贡献者 @LeonarddeR 进一步完善了 NVDA 对文本导航的支持,使其除了中文之外,还覆盖日文和韩文。新版剪贴板在文本摘要方面也受益于此。
我们希望插件更多地建立在 NVDA 提供的基础能力之上,与 NVDA 形成互补: 对于 NVDA 已经具备或适合由 NVDA 提供的能力,我们推动其进入上游;对于 NVDA 尚未覆盖的需求,则通过插件进行探索和补充。
发布和赞助
由于该插件使用了 NVDA 2026.3 中的新特性,同时也希望让社区能够在早期适应这些变化,我们计划随 NVDA 2026.3 正式版一同发布该插件。 该插件完全免费且开源。我们开放了本文的打赏入口,您可以在微信中打开如下链接,通过文末的“喜欢作者”的方式赞助本插件,赞助所得将全部用于插件的日常维护。 https://mp.weixin.qq.com/s/-ZGCm_5EsDjGMBna0MdZtg