首页/新闻资讯/正文详情

Onivim 2 0.5.5 版本深度解读:Format-on-Save 配置、格式化管线修复与 Windows 体验优化

发布时间:2026/9/27 21:17:55 来源:云帆数科 栏目:资讯中心
Onivim 2 0.5.5 版本深度解读:Format-on-Save 配置、格式化管线修复与 Windows 体验优化
开发工具代码编辑器桌面应用【免费下载链接】oni2Native, lightweight modal code editor项目地址https://gitcode.com/gh_mirrors/on/oni2点击查看免费下载Onivim 2oni2是一款原生、轻量的模态代码编辑器0.5.5 版本2021 年 4 月在延续功能月 缺陷修复月交替节奏的基础上正式落地了社区呼声极高的editor.formatOnSave保存即格式化能力并系统性修复了格式化管线、代码补全与 Windows 平台上的多类痛点问题。本文以官方 0.5.5 发布说明为骨架结合仓库内格式化模块源码与集成测试逐项还原该版本的核心改动、配置方式与底层实现帮助读者理解保存格式化如何工作、补全为何修复后更稳定以及 Windows 用户如何获得与其他平台一致的配置热重载体验。0.5.5 版本总览以缺陷修复为主、小功能为辅官方发布说明2021-04-01-release-0.5.5.md将 0.5.5 定位为一个以缺陷修复为主、同时包含少量新功能的里程碑。作者 Bryan Phelps 在文中说明这种功能月之后跟随缺陷修复月的节奏是为了给关键功能留出修复空间即使它们并未出现在路线图上。对照仓库根目录的 CHANGES.md0.5.5 小节该版本的实际改动与发布说明完全对应涵盖特性#3246 新增editor.formatOnSave配置修复 #2464#3163 为通知栏增加清除按钮。缺陷修复覆盖 Windows 配置/键位热重载#3141、#3160、格式化管线#3233、#3240、#3263、补全#3194、#3273、#3274、#3276、#3279、文件资源管理器#3142、UNC 路径支持#3162、Windows 死键输入#3166等。破坏性变更#3193 移除了reason-language-server可执行文件原生 Reason/OCaml 与 ReScript 用户分别转向对应的语言文档。性能#3148 改进大文件打开性能与崩溃问题、#3139 修复大文件下/搜索卡死、#3260 减少重载文件时的闪烁。其中格式化的相关修复是保存格式化功能落地的必要前置条件本文接下来将以此为主线展开。Format-on-Save保存后自动格式化editor.formatOnSave是 0.5.5 引入的核心新特性其配置定义位于格式化功能模块 src/Feature/LanguageSupport/Formatting.remodule Configuration { open Config.Schema; let defaultFormatter setting(editor.defaultFormatter, nullable(string), ~defaultNone); let formatOnSave setting(editor.formatOnSave, bool, ~defaultfalse); };即editor.formatOnSave是布尔类型默认值为false与之配套的editor.defaultFormatter为可空字符串默认无值用于在存在多个格式化提供方时指定默认选择。推荐用法按文件类型启用官方格式化文档 docs/docs/using-onivim/formatting.md 明确建议该设置按文件类型per-filetype配置而非全局开启以避免对不希望格式化的语言生效[javascript]: { editor.formatOnSave: true }集成测试 integration_test/FormatOnSaveTest.re 展示了该功能的最小可验证配置测试以{editor.formatOnSave: true}作为运行配置打开未格式化文件test.unformatted.js首行为带缩进的console.log执行:w!保存后断言首行变为console.log并最终校验缓冲区文本与预期console.log|console.warn|console.error完全同步。该测试还揭示了保存格式化的完整运行前提——需要等待oni-dev-extension与vscode.typescript-language-features扩展激活因为格式化能力本身由语言扩展提供。底层流程bufferSaved 触发与格式化会话从源码看保存后格式化并非简单地在保存动作后直接调用格式化而是经过一层会话session管理。关键逻辑在 Formatting.re 的 bufferSaved 函数触发条件editor.formatOnSave为真、当前缓冲区存在匹配的格式化提供方、且该缓冲区是活动缓冲区防重复格式化通过lastFormatSaveTick记录每个缓冲区上次格式化的保存 tick只有当Buffer.getSaveTick(buffer) lastSaveTick时才继续避免同一保存动作重复触发大文件保护若缓冲区被判为过大isLargeBuffer则不再自动格式化转而发出AutoFormatOnLargeBufferFailed消息最终向用户提示 Buffer is too large to auto-format并且借助largeBufferAutoFormatShowedWarning集合保证该警告只提示一次进入会话正常路径下发出FormatOnSave消息由update中的FormatOnSave分支以saveWhenCompletetrue调用Internal.formatDocument。会话结构Formatting.re 顶部定义记录bufferId、bufferVersion、sessionId与saveWhenComplete四个字段。之所以需要会话机制是因为格式化编辑是异步返回的编辑器先向扩展宿主请求格式化编辑收到EditsReceived后才通过Service_Vim.Effects.applyEdits应用编辑。会话通过sessionId校验响应是否过期activeSession.sessionId ! sessionId时直接忽略从而避免旧请求覆盖新状态。应用编辑时还设置了shouldAdjustCursorstrue确保光标随格式化编辑落到正确位置。格式化完成后的保存衔接格式化的编辑应用完成后EditCompleted分支读取会话中的saveWhenComplete标记向外发出FormattingApplied({displayName, editCount, needsToSave})。当needsToSave为真时即本次格式化源自保存上层会继续完成保存流程——这正是保存后先格式化、再落盘的实现衔接点。从 Vim 运算符到 Format Document 命令保存格式化之外0.5.5 还完善了手动格式化的入口体系。官方文档 formatting.md 与源码一致Vim 运算符与gq在 Onivim 中两者功能等价都可对文本范围进行格式化。例如gqap由gq格式化运算符与aparound-paragraph 文本对象组合而成即格式化光标所在的整个段落。Format Document 命令命令 ID 为editor.action.formatDocument定义于 Formatting.re 的 Commands 模块并通过 Keybindings 模块 按平台绑定默认快捷键平台快捷键条件WhenExprLinuxControlShiftIC-S-IeditorTextFocus isLinuxmacOSOptionShiftFA-S-FeditorTextFocus isMacWindowsAltShiftFA-S-FeditorTextFocus isWin此外该命令还通过 MenuItems 模块 加入编辑菜单ContextMenu中order200的 Edit 分组对应 CHANGES.md 中的 #3264Add Format Document to menu。范围格式化FormatRange则走provideDocumentRangeFormattingEdits只对选中行生效。多格式化提供方的选择机制当某个文件类型存在多个格式化提供方时Onivim 会弹出快捷菜单让用户选择默认提供方对应 selectFormatterMenu占位文案为 Select a default formatter...。其完整决策链位于runFormatFormatting.re无匹配提供方回退到内置的DefaultFormatter.format基于缩进与语言配置的默认格式化器若范围非法则返回FormatError(Invalid range specified)单个提供方直接发起格式化请求请求中携带从缓冲区缩进推导出的FormattingOptionstabSize与insertSpaces多个提供方优先查editor.defaultFormatter——若已配置且匹配直接使用配置了但未找到对应扩展则报 Formatter %s specified by editor.defaultFormatter was not found.未配置则弹出选择菜单选中后通过ConfigurationTransformer.setFiletypeField将editor.defaultFormatter写回对应文件类型的配置段即自动生成[filetype]: { editor.defaultFormatter: ... }。因此首次遇到多提供方时的交互结果是选择一次、之后持久生效与 VS Code 生态的习惯一致。格式化管线修复为 format-on-save 扫清障碍发布说明强调format-on-save 的前提是修复格式化管线中的多个阻塞问题。CHANGES.md 显示这些修复全部落在 0.5.5#3233 修复缓冲区失同步desync解决了格式化编辑应用后文本重复的问题原问题 #2196、#2820。其原理与上文的会话机制直接相关——格式化响应是异步的若缓冲区版本bufferVersion与请求时不匹配应用编辑就会导致文本错位这正是会话结构记录bufferVersion的原因#3240 修复 Invalid range specified 错误原问题 #3014对应fallBackToDefaultFormatter中基于行号切片Array.sub时的边界校验现在会先检查startLine、stopLine是否落在缓冲区行数范围内越界即安全返回错误而非崩溃#3263 格式化后更新光标位置即applyEdits中的shouldAdjustCursorstrue确保格式化编辑尤其是行数变化时后光标不被抛到错误位置。这三项修复共同保证了保存 → 请求格式化 → 应用编辑 → 重新保存链路在真实文件上的稳定性也解释了为何 format-on-save 直到 0.5.5 才具备落地条件。完整的formatOnSave配置说明同步收录于 docs/docs/using-onivim/formatting.md该文档即为发布说明中提到的新增 Formatting 文档章节。补全Completion缺陷修复与 TabNine 兼容0.5.5 同时集中修复了代码补全的多处缺陷发布说明与 CHANGES.md 一一对应#3194修复闭合成对符号后按回车导致删除文本的问题原 #3191——补全提交与成对符号自动闭合在输入状态机上发生冲突的经典场景#3273扩展提供默认 insert/replace range 时按默认范围执行原 #2388不再一律以光标位置推断替换范围#3274修复补全订阅与缓冲区更新之间的竞态条件避免快速输入时补全结果落到过期缓冲区状态上#3276处理替换范围位于光标之后的情形关联 #2583#3279修复 ReScript 标识符无法补全的问题原 #3258这对以 Reason/ReScript 为第一方语言的 Onivim 尤为重要。发布说明特别提到Vim 社区流行的 TabNine 补全插件在以上修复后于 Onivim 中可正常工作——补全编辑的替换范围处理#3273、#3276与竞态修复#3274正是第三方补全服务稳定工作的关键。Windows 体验修复配置与键位保存即热重载0.5.5 的另一重点是 Windows 平台。发布说明指出Windows 用户此前无法像其他平台那样在保存配置后立即看到效果0.5.5 通过两个 PR 解决#3141 保存后重载键位绑定对应 src/Feature/Input/Feature_Input.re 中的KeybindingsReloaded消息——重载时若解析出错误会以ErrorNotifications形式通知用户无错误则直接以新绑定重建输入状态机#3160 保存后重载配置配置加载基于订阅subscription模型重载后通过UserSettingsChanged合并新配置并将变更同步给扩展宿主acceptConfigurationChanged保证语言扩展也能感知配置变化。除热重载外0.5.5 还修复了一批 Windows 专属问题文件资源管理器目录节点无法展开#3142原 #3092、#2213、支持打开 UNC 路径#3162原 #3151、修复死键输入#3166原 #3157、C# 语言服务器在 Windows 无法启动#3225原 #3204、文档选择器路径规范化问题#3248原 #3238。这些改动共同将 Windows 体验拉齐到与其他平台一致的水平。其他值得关注的改进通知清除按钮#3163通知栏新增清除按钮由社区贡献者 andr3h3nriqu3s11r 实现快捷菜单智能大小写#3259Quickmenu 支持 Smart Case 匹配由 amiralies 实现对大小写混合的模糊搜索体验提升明显快捷菜单重构#3228、#3250、#3280、#3286Quickmenu 进入 Feature 化实现阶段主题菜单迁移到新架构并修复 ControlW 处理延迟、将 ControlTab 限定在可见编辑器大文件性能#3148、#3139大文件打开性能与崩溃问题、/搜索卡死问题得到修复配合 #3161 默认开启软换行CLI#3217新增-v版本号参数。0.5.6 展望Rename 与 Code Actions / Quickfix发布说明末尾预告了 0.5.6 的方向回归功能开发重点实现Rename重命名符号与Code Actions / Quickfix代码操作与快速修复以充分利用语言扩展已提供的语言能力。结合仓库现状src/Feature/LanguageSupport 下的 Formatting、Completion 等模块已成为独立 Feature语言能力通过Service_Exthost.Effects.LanguageFeatures与扩展宿主通信可以推断 Rename 与 Code Actions 将沿用同一套扩展宿主提供能力 → 编辑器会话管理 → 应用到缓冲区的架构模式。完整版本改动明细可查阅 CHANGES.md 的 0.5.5 章节格式化与补全的当前实现可继续深入 Formatting.re 与对应的集成测试 FormatOnSaveTest.re。赞分享开发工具代码编辑器桌面应用【免费下载链接】oni2Native, lightweight modal code editor项目地址https://gitcode.com/gh_mirrors/on/oni2点击查看免费下载相关推荐告别卡顿G-Helper帮你智能解锁华硕笔记本隐藏性能 告别卡顿G Helper帮你智能解锁华硕笔记本隐藏性能 还记得上次打游戏时笔记本突然卡成PPT的尴尬吗或者开会时风扇狂转像要起飞一样让人分心如果你用桌面应用系统编程Prettier Markdown 格式化实战列表项内嵌多行 HTML 的稳定性分析与 format-on-save 缩进漂移修复Prettier Markdown 格式化实战列表项内嵌多行 HTML 的稳定性分析与 format on save 缩进漂移修复 在 Prettier 的开发工具格式化CLIRuboCop 1.65.1 版本解析Naming/PredicateName 配置校验与九项 Bug 修复深度解读RuboCop 1.65.1 版本解析Naming/PredicateName 配置校验与九项 Bug 修复深度解读 RuboCop 1.65.1 是 202代码质量Lint格式化静态分析开发工具上一篇告别卡顿用SmartRefreshLayout打造丝滑阅读APP章节刷新体验下一篇GPSTest支持的全球卫星系统大盘点从GPS到北斗的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

FluentRead 模型用量统计完全指南:看懂 Token、输出速度与请求记录
FluentRead 模型用量统计完全指南:看懂 Token、输出速度与请求记录

前端AI 应用本地部署 【免费下载链接】FluentRead An open-source browser extension for bilingual translation. 一款开源的浏览器双语翻译插件。 项目地址: https://gitcode.com/gh_mirrors/fl/FluentRead 点击查看 免费下载 FluentRead 是一款开源的双语翻译浏… · 2026/9/27 21:17:55

MikroORM 级联操作完全指南:persist、remove、孤儿移除与数据库引用完整性
MikroORM 级联操作完全指南:persist、remove、孤儿移除与数据库引用完整性

后端 【免费下载链接】mikro-orm TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases. 项目地址: https://gitcode.com/gh_mir… · 2026/9/27 21:17:55

GPT-5.6 Sol登顶Arena Frontend、Gemma 4推理提速5倍、Claude Code内置浏览器 | 7月11日 AI日报
GPT-5.6 Sol登顶Arena Frontend、Gemma 4推理提速5倍、Claude Code内置浏览器 | 7月11日 AI日报

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 21:17:48

归一化LC低通滤波器设计与Ltspice仿真(1)--定K型和m推演型
归一化LC低通滤波器设计与Ltspice仿真(1)--定K型和m推演型

一. 本节简介定K型和m推演型为滤波器设计的古典设计法,目前已经很少使用,本节主要介绍基础概念和设计思路以及对应的仿真二. 实验平台1. 硬件① 电脑2. 软件① Ltspice(Version x64:26.0.2)三. 版权声明1. 作者:LLLor 2. 喝水不忘挖井人,转载请注明出处四. 基础知识1. LC低通滤… · 2026/9/27 21:49:53

AI Agent 的“写权限”之问:TaoToken 统一 Key 下,敢开还是不敢开?
AI Agent 的“写权限”之问:TaoToken 统一 Key 下,敢开还是不敢开?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 21:49:53

一个 40 字节的头如何统一各 ZK-Rollup 的 Poseidon 参数:EIP-5988 预编译深度拆解
一个 40 字节的头如何统一各 ZK-Rollup 的 Poseidon 参数:EIP-5988 预编译深度拆解

一个 40 字节的头如何统一各 ZK-Rollup 的 Poseidon 参数:EIP-5988 预编译深度拆解 【免费下载链接】EIPs The Ethereum Improvement Proposal repository 项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs ZK-Rollup 的电路里普遍使用 Poseidon 这类… · 2026/9/27 21:49:53

【Redis】初识 Redis
【Redis】初识 Redis

目录 1、Redis 是什么 2、对比 MySQL 3、单机架构与分布式架构 3.1 引入分布式架构 3.2 引入负载均衡 3.3 数据库读写分离 3.4 引入缓存服务器 3.5 数据库分库分表 3.6 引入微服务 4、Redis 的一些特性 4.1 基于内存 高性能 4.2 可编程性 4.3 可扩展性 4.4 持久化… · 2026/9/27 21:49:53

重点分析如何利用生成器(Generators)、装饰器(Decorators)以及上下文管理器(Context Managers)构建一个高效、低内存占用的数据流处理框架
重点分析如何利用生成器(Generators)、装饰器(Decorators)以及上下文管理器(Context Managers)构建一个高效、低内存占用的数据流处理框架

本报告旨在深入探讨Python编程语言在现代数据处理场景中的高级应用,重点分析如何利用生成器(Generators)、装饰器(Decorators)以及上下文管理器(Context Managers)构建一个高效、低内存占用的数… · 2026/9/27 21:49:46

分享一套 GPT-6 的 SCI 写作方法,科研效率极速提升!
分享一套 GPT-6 的 SCI 写作方法,科研效率极速提升!

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 多数学术同仁都在烦恼同一件事情:好不容易开始写,章节之间怎么衔… · 2026/9/27 21:49:46

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码