Skip to content

feat: 文件编辑器支持 vim 键位(设置开关,默认关闭) - #528

Open
CashQian-com wants to merge 1 commit into
omdsh-dev:mainfrom
CashQian-com:feat/editor-vim
Open

feat: 文件编辑器支持 vim 键位(设置开关,默认关闭)#528
CashQian-com wants to merge 1 commit into
omdsh-dev:mainfrom
CashQian-com:feat/editor-vim

Conversation

@CashQian-com

Copy link
Copy Markdown

Summary

为侧边栏的代码 / Markdown 编辑器(CodeMirror 6)接入 @replit/codemirror-vim,在 Side 卡片设置页的「代码」viewer 行下新增「编辑器 vim 键位」开关。默认关闭,开启后已打开的编辑器即时生效(compartment 就地重配置,文档、撤销历史与滚动位置全部保留)。

Motivation

vim 党在 DSH 里快速改文件时非常需要 vim 键位;目前编辑器只有默认键绑定。CodeMirror 6 生态有成熟的 vim 模拟层(@replit/codemirror-vim,CodeMirror 官方推荐的 CM5 vim 移植),接入成本极低、零侵入——不开启开关时行为与现状完全一致。

Changes

  • package.json:新增依赖 @replit/codemirror-vim@^6.4.0(只进 editor chunk,按需懒加载,不增加核心包体积)
  • src/config.ts / src/prefs-shared.ts / src/client/prefs.ts:新 pref editorVim(boolean,默认 false,schema / 类型 / 默认值 / 归一化四处对齐既有模式)
  • src/client/builtins/viewers.tsxcode viewer 声明 settings.toggles,设置页渲染开关行
  • src/client/TextEditor.tsx
    • 新建 Compartment 承载 vim 扩展,置于扩展数组首位(keymap 优先级最高)
    • 仿照既有主题 compartment 的 scheme-flip effect:vimMode 翻转时 view.dispatch({ effects: vimComp.reconfigure(...) }) 就地切换
  • src/client/locales.ts:中英文设置文案(settingsEditorVimTitle/Desc
  • README.md / README_EN.md:文件工作台功能点补一句「设置可选 vim 键位」
  • tests/:全量 prefs 字面量夹具补 editorVim: false

行为细节

  • 关(默认):编辑器行为与 main 完全一致,vim 扩展为空数组,无任何状态字段开销
  • 开:i/Esc 插入/普通模式、hjkl gg G dd yy p / v 等标准 vim 操作与可视模式可用;保存仍走 Ctrl/Cmd+S(vim 的 :w 不联动文件保存,这是上游 vim 扩展的边界)
  • markdown / html viewer 共用 TextEditor,同样生效

Testing

  • pnpm run typecheck
  • pnpm test:与本改动相关的 spec(prefs / builtins / plugin-shape / side-card-section-rows / editor-host / sandbox-views / smoke 的 prefs 部分)全部通过 ✅
  • 本机构建 + 安装实测:开关即时生效、文档与撤销历史在切换时保留 ✅

Screenshots

(待补:设置页开关行 + 编辑器 vim 操作 gif;如维护者需要我再补)

接入 @replit/codemirror-vim:新增 editorVim 设置(默认 false),Side 卡片设置页「代码」viewer 行下渲染开关;编辑器用 Compartment 承载 vim 扩展,翻转开关就地重配置(文档、撤销历史、滚动位置保留)。中英文案 + 全部 19 个第三方语言词典补齐,测试夹具同步。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant