- 开发工具
- 代码编辑器
- 桌面应用
【免费下载链接】oni2
Native, lightweight modal code editor
本篇指南聚焦 Onivim 2(oni2)编辑器的文件工作流:如何用:cd切换工作目录并联动文件资源管理器、用 QuickOpen 模糊查找器(基于 ripgrep)快速打开文件、用 Vim Ex 命令(:edit/:write/:save)读写文件,以及用<C-TAB>在已打开的窗口间导航。读完本文,你将掌握 Onivim 2 中一套完整的"打开—编辑—保存—切换"文件操作闭环,并能理解其背后的命令注册、快捷键绑定与 ripgrep 集成实现。
导航文件资源管理器:用:cd改变工作目录
Onivim 2 的文件资源管理器(Explorer)根目录与当前工作目录(Current Working Directory)保持一致。要切换工作目录并同时更新资源管理器的根节点,直接使用 Vim 风格的:cd命令即可:
:cd ~/my/project执行后,文件资源管理器会以~/my/project为根重新加载。该目录状态同时也会影响 QuickOpen 的文件检索范围(见下文),因为文件索引基于当前工作区。
从源码结构看,Explorer 功能模块位于 src/Feature/Explorer/,其中 Feature_Explorer.re 在实现:cd相关的目录切换界面提示时明确使用了text=":cd",印证了该命令与 Explorer 根目录更新之间的绑定关系。切换后,资源管理器会展示新目录下的文件树,方便继续通过鼠标或键盘浏览。
提示:
~会被展开为用户主目录,与 Vim 行为一致;也支持绝对路径或相对路径。
打开文件
Onivim 2 提供了两条打开文件的路径:图形化的 QuickOpen 模糊查找器,以及继承自 Vim 的 Ex 模式:edit命令。两者可以按使用场景自由切换。
QuickOpen:基于 ripgrep 的模糊查找器
QuickOpen 是 Onivim 2 内置的模糊查找器(fuzzy-finder),开箱即用,其检索能力由 ripgrep 提供。ripgrep 是高性能的正则检索引擎,Onivim 2 将其封装在 src/Core/Ripgrep.re 中,并在 src/Core/Oni_Core.re 中作为核心模块导出(module Ripgrep = Ripgrep),同时通过Service_Ripgrep以订阅方式异步分发匹配结果(见 src/Feature/Search/Feature_Search.re)。
调用方式:
- Windows / Linux:
Control+P - macOS:
Command+P
在 src/Model/State.re 中可以看到这两个快捷键的真实绑定定义:<C-P>与<D-P>均映射到workbench.action.quickOpen命令,生效条件(when)为editorTextFocus || terminalFocus,即编辑器或终端获得焦点时按下即可呼出。
打开 QuickOpen 后,直接输入文件名片段即可进行模糊匹配并实时筛选,回车选中即可打开文件。
从源码层面看,QuickOpen 的完整调用链为:
- 快捷键
<C-P>/<D-P>触发 src/Model/GlobalCommands.re 中注册的workbench.action.quickOpen(标题为 "Go to File...")命令,该命令派发QuickmenuShow(FilesPicker); - src/Store/QuickmenuStoreConnector.re 处理该动作:若当前已打开文件夹(
Feature_Workspace.openedFolder(workspace)有值),则以FilesPicker变体进入带ripgrepProgress: Loading、filterProgress: Loading的检索状态;若尚未打开任何文件夹,则自动回退为已打开缓冲区(buffer)列表,保证 QuickOpen 始终可用; - 输入过滤与候选呈现由 src/Feature/Quickmenu/ 模块完成,其 View.re 会综合
filterProgress与ripgrepProgress两个进度状态决定 UI 呈现。
值得留意的是,src/Feature/Input/Keybindings.re 中还保留了quickOpen.open→workbench.action.quickOpen的兼容映射,说明旧式命令别名仍可用。
在 QuickOpen 内的键位导航(同样定义于 src/Model/State.re):
<C-N>/<C-P>或<TAB>/<S-TAB>:在候选项列表内上下移动焦点(条件listFocus);<ESC>:关闭 QuickOpen(条件!commandLineFocus && inQuickOpen,避免与 Vim 命令行模式的<ESC>冲突);- 松开
<release>或回车:选中当前项并打开。
此外,菜单栏的 "Go to File" 菜单项(见 src/Feature/MenuBar/Global.re)同样指向workbench.action.quickOpen,与快捷键殊途同归。
:e命令(Ex 模式编辑)
除了 QuickOpen,你还可以用 Vim 的 Ex 模式edit命令按路径精确打开文件:
:edit ~/my/project/README.md注意:
:edit可缩写为:e。
:e之后如果只跟相对路径,将相对于当前工作目录解析。由于 Onivim 2 内嵌了完整的 Vim 运行时(通过 src/reason-libvim/ 与 Vim 交互),该命令的补全、路径展开与缓冲区分组行为均与 Vim 原生一致,适合在已经知道完整路径的场景下快速打开,也适合在命令行模式下配合<TAB>使用通配补全。
保存文件
保存改动使用 Vim 的:write命令:
:write注意:
:write可缩写为:w。
Onivim 2 底层通过Vim.command与内嵌 Vim 交互来执行写入,例如 src/Feature/Vim/Feature_Vim.re 中处理保存相关逻辑时即调用了Vim.command(~context, "w!")(w!为强制写入),可见保存操作最终落到 Vim 的文件写入管线,包括编码处理、文件类型判断与行尾处理。
如果需要将当前缓冲区另存为另一个文件,使用:save命令:
:save ~/my/project/another-file.txt:save(可缩写为:sav)在写入新路径的同时,会把当前缓冲区重命名到新文件,之后继续编辑和:w都作用于新路径——这不同于"先:w再:e新文件"的多步操作。另存为操作同样支持绝对路径与~展开。
提示:如果对只读文件执行保存遇到权限问题,可参考源码中使用
w!的强制写入方式,但请谨慎使用,它会忽略文件只读标记。
在已打开的窗口间导航
当编辑器中有多个已打开的窗口(window / 编辑器组)时,可以通过<C-TAB>在它们之间快速循环切换:
<C-TAB>按一次Control+TAB即可唤起"最近使用的编辑器"选择,继续按Control+TAB可在所有已打开窗口中逐个导航,松开按键后选中当前高亮项。
该行为的源码依据在 src/Model/State.re 与 src/Model/GlobalCommands.re:
- 编辑器或终端聚焦时(
editorTextFocus || terminalFocus),<C-TAB>触发workbench.action.openNextRecentlyUsedEditorInGroup命令,其标题为 "Open Next Recently Used Editor In Group",派发QuickmenuShow(EditorsPicker)——即打开"已打开编辑器"选择器; - 在选择器内部(条件
inEditorsPicker),<C-TAB>被重新绑定为quickOpenNavigateNextInEditorPicker(下一个),<S-C-TAB>绑定为quickOpenNavigatePreviousInEditorPicker(上一个),见 src/Model/State.re; - 松开按键(
<release>,条件inEditorsPicker)即触发Commands.List.select.id完成选中切换。
另外,workbench.action.quickOpenBuffer命令(标题 "Go to Buffer...",见 src/Model/GlobalCommands.re)可让你直接在已打开的缓冲区(buffer)列表中模糊选择,是<C-TAB>之外另一种"在已打开文件间跳转"的途径;菜单栏的对应菜单项定义在 src/Feature/MenuBar/Global.re。
附:本指南涉及的文件操作速查表
| 操作 | 命令 / 快捷键 | 说明 |
|---|---|---|
| 切换工作目录 | :cd <path> | 同步更新文件资源管理器根目录与 QuickOpen 检索范围 |
| 打开文件(模糊查找) | Control+P(Win/Linux)、Command+P(macOS) | 基于 ripgrep 的 QuickOpen 模糊查找器 |
| 打开文件(精确路径) | :e[dit] <path> | Vim Ex 模式打开指定路径 |
| 保存当前文件 | :w[rite] | 写入当前缓冲区 |
| 另存为 | :sav[e] <path> | 写入新路径并将缓冲区重命名到新文件 |
| 在已打开窗口间切换 | <C-TAB> | 打开最近使用的编辑器选择器并逐个导航 |
| 在缓冲区列表间跳转 | workbench.action.quickOpenBuffer | 从已打开缓冲区中模糊选择 |
以上命令与快捷键的行为均可通过前述源码路径逐一验证:快捷键绑定集中在 src/Model/State.re、命令注册集中在 src/Model/GlobalCommands.re、QuickOpen 状态机位于 src/Feature/QuickOpen/Feature_QuickOpen.re、文件检索进度由 src/Store/QuickmenuStoreConnector.re 与 src/Core/Ripgrep.re 协同完成。掌握了这套文件工作流,你就能在 Onivim 2 中像使用 Vim 一样高效地组织、打开、保存与切换文件。
- 开发工具
- 代码编辑器
- 桌面应用
【免费下载链接】oni2
Native, lightweight modal code editor
相关推荐
SumatraPDF 文档文本查找完全指南:查找栏、浮动窗口、快捷键与命令行搜索
SumatraPDF 文档文本查找完全指南:查找栏、浮动窗口、快捷键与命令行搜索 本文围绕 SumatraPDF 的文本查找功能展开,系统讲解查找栏(Find
桌面应用文档Onivim 2 文本编辑与删除操作完全指南
Onivim 2 文本编辑与删除操作完全指南 前言 Onivim 2 是一款融合了现代编辑器体验与 Vim 高效编辑模式的创新编辑器。对于习惯传统编辑器的用户来
开发工具代码编辑器桌面应用Onivim 2 配置完全指南:从 `configuration.json` 到按文件类型定制
Onivim 2 配置完全指南:从 configuration.json 到按文件类型定制 Onivim 2(本项目仓库即 oni2,一个 Native、轻量的
开发工具代码编辑器桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考