OH11: Vim / 键位 OpenHarness · 对标 S11
与 S11 同主题:终端 TUI 需要可选的 Vim 键位;实现上分为模式位与按键解析层,与课内「normal/insert」叙事对应但代码更薄。
上游:HKUDS/OpenHarness · 本仓库快照:reference/rererence_harness/OpenHarness/ · 路径亦见 专题映射表。
course-s11)。🎯 关键路径(读什么)
在 src/openharness/ 下优先打开:
vim/transitions.py:toggle_vim_mode(最小实现)。keybindings/default_bindings.py:默认表。keybindings/loader.py、resolver.py、parser.py:读配置、解析按键、绑定动作。
🔍 源码导读
薄层现实
OpenHarness 的 Vim 层刻意保持小;重逻辑在 prompt_toolkit 与 TUI 主循环。阅读重点放在「配置从哪加载、如何覆盖默认」而非期待完整 Vim 兼容表。
与 S11 对照
课内可能展开 text object;此处优先保证可扩展绑定表与模式切换钩子。若做二次开发,通常在 resolver 层加映射。
⚖️ 与课内叙事对照
| 维度 | 课内 S11 | OpenHarness |
|---|---|---|
| 模式状态 | Normal/Insert | 布尔或枚举由 TUI 持有,vim 包仅辅助 |
| 绑定来源 | 用户配置 | loader 路径与合并规则 |
| 与 slash | 命令抢占 | 冒号/斜杠输入优先级在 TUI 层处理 |
🤔 思考题
- 为何不把 Vim 模式状态放进
QueryEngine? - 若默认绑定与系统快捷键冲突,推荐改文件是哪一处?
toggle_vim_mode仅取反布尔,若需 tri-state(off/vi/emacs)应改哪里?
📎 延伸阅读
OH01–12 目录 · OH10 · OH12 · S11 · D11