前言¶
在 DeepSeek Harness(DSH)里长时间用鼠标滚会话、点侧栏、抢输入框焦点,很容易打断编写提示词和阅读回复的节奏。浏览器里虽有 Vimium 一类扩展,但无法完整接管 Harness 的工作区列表、会话搜索、内置 Browser 面板,也难避免宿主在打开新会话时自动把焦点塞进 composer。下面介绍的 dsh-vim-nav 是 Endermy 维护的客户端类 Cordis 插件(当前 GitHub 星标为 0),在 DSH Web UI 内实现 Normal / Insert 两套模式与一套对齐 Vim 习惯的快捷键,并针对 Harness 的 DOM 与快捷键服务做了绑定。
这是什么¶
一句话:Vim-style keyboard navigation for the DeepSeek Harness Web UI(与仓库简介一致)。
插件在界面侧提供模式徽章、滚动驱动和键盘控制器,依赖 Harness 客户端模块加载 client.js,通过 data-conversation-scroll、data-composer-input 等宿主钩子与会话布局协同。包名为 @local/dsh-vim-nav(package.json 版本 1.4.0,许可证 MIT),安装后在插件列表中显示为 Vim Navigation。DeepSeek Harness 生态奉行「一切皆插件」;社区目录站 skillhub.cn 与 DeepSeek / 幻方无官方从属关系,本文安装与行为均以 GitHub 仓库 README 为准。
核心功能¶
滚动与会话历史¶
j/k:Normal 模式下按住线性滚动,松键下一帧即停,无排队平滑滚动、加速或松键惯性。kk:在会话顶部连按k,触发宿主自带的「加载更早历史」,并在下一次滚动键时释放宿主的分页位置锁定。
面板焦点与工作区¶
h/l:在工作区、会话区、内置 Browser 之间左右切换焦点;Browser 激活时徽章显示NORMAL · Browser。Space/Enter:工作区列表获得焦点时,选择光标所在行;切换会话时保持模式(见下文「模式保持」)。
Composer(Insert)¶
i:进入 Insert 写消息。- 快速
jk或Escape:退出 Insert。 dd:清空草稿。
消息级跳转¶
Ctrl+J/Ctrl+K:在当前会话内跳到下一条 / 上一条顶层 user 或 assistant-step 消息(跳过 tool call、进程行等),带短线性滑动;首尾消息处停止。gg/G:跳到会话顶 / 底。
链接提示(Vimium 风格)¶
f:为可见会话链接打标签,输入标签打开链接;Escape取消,Backspace改前缀,无匹配前缀则退出提示模式。
工作区归档¶
工作区面板聚焦且光标在某会话行上时,c 再 x 调用该行归档(与行 UI 按钮相同);运行中的会话走宿主停止并归档确认;行消失后光标移到相邻行。
内置 Browser 的 Vim 层¶
桌面端右侧 Sidebar Browser 的 Electron <webview> 会注入页面级 Vim 层:j/k 线性滚动(约视口 35%)、gg/G、f 链接提示等;可编辑字段不拦截。跨域 iframe 仅在同源或可脚本化场景生效。离开 Browser 内容焦点时,Linux/Windows 用 Alt+H、macOS 用 Ctrl+H 聚焦会话面板(仅在 Browser 聚焦时注册,可在 Settings → Shortcuts 中改绑)。
会话搜索与快捷键整理¶
Ctrl+F:打开宿主会话搜索;插件会把宿主原Ctrl+K绑定迁移到Ctrl+F(在 Settings → Shortcuts 可见且可改);若无法应用则回退为点击侧栏搜索按钮。
其它行为¶
- 模式保持:打开或切换会话不会把 Normal 误切成 Insert;切换前若在 Insert(例如边写边
Ctrl+J跳消息),新 composer 仍保持 Insert。 Ctrl+W:在应用主体中屏蔽关闭窗口;仅在内置 Browser(webview、iframe、工具栏或地址栏有焦点时)按宿主逻辑关闭当前 Browser 页。- 无 Visual 模式;不占用 Win / Super / Meta 组合键,留给系统或合成器。
完整键位表见仓库 README 的 Keymap 一节,此处不重复罗列每一行。
安装与启用¶
前提:已有可用的 DSH profile,且桌面/Web 运行时支持本地 Cordis bundle。
资料中的步骤是获取源码目录后,在 profile 里把该目录注册为本地 bundle,而非凭名称拼接 dsh plugin add github:...。
- 按 README 将仓库克隆到本机(命令见下)。
- 在 Harness 插件管理器中使用「install local bundle」/
install_bundle,目标为包目录的绝对路径;profile 会记录为@local/dsh-vim-nav。 - 安装后重建或重载 Web UI 一次;桌面端可重载页面,若快捷键仅在启动时同步则需重启应用。
git clone https://github.com/Endermy/dsh-vim-nav.git
该包为本地 bundle,非 npm 发布产物;无构建步骤,client.js 由 DSH 客户端模块加载器直接加载。
典型用法¶
下面按常见操作顺序说明,均可对照 README 复现。
- 读长会话:保持 Normal,
j/k按住滚动;到顶需要更早记录时kk;gg/G快速顶底;Ctrl+J/Ctrl+K在顶层消息间跳转。 - 写回复:
i进入 Insert,写完快速jk或Escape回 Normal;误输入草稿用dd清空。 - 换面板:
h/l在工作区、对话、Browser 间移动;Browser 内用页面层滚动与f点链,再用Alt+H(Linux/Windows)或Ctrl+H(macOS)回到会话。 - 找会话:
Ctrl+F打开会话搜索(注意与消息跳转的Ctrl+K区分)。 - 整理工作区:焦点在工作区列表时用方向逻辑定位行,
Space/Enter打开;归档则cx。
适用场景与注意¶
适合谁:日常在 DSH Desktop 或支持本地 bundle 的 Web 运行时里大量使用键盘、习惯 Vim / Vimium 的开发者。
权限与信任:客户端插件在当前 DSH 进程权限下运行,会接管键盘与部分快捷键绑定;安装前应阅读 client.js、index.js 与 MIT 许可证,确认来源为 Endermy/dsh-vim-nav。
兼容性:实现绑定了 Harness 特有 DOM 与 slots / locale / layout / shortcuts 等服务;宿主 UI 变更可能需要插件同步更新。README 注明在 DSH Desktop(Linux)等环境测试,截断部分未在此复述。
开发自检(维护者或自改代码时):
node --check client.js
node --check index.js
python3 -m json.tool package.json >/dev/null
修改 client.js 后需在 profile 中重装/重载 bundle;UI 由 shell.overlay 槽渲染,无独立 dev server。
结尾¶
dsh-vim-nav 把 Vim 式 Normal/Insert、面板焦点、消息跳转和内置 Browser 页内操作收到同一套习惯里,并处理 composer autofocus 与 Ctrl+W 等宿主冲突点。需要键位细节或 Browser 层说明时,以仓库 README 为准。