#9 拆完之后做的一次盘点。每条写清现在是什么、IDEA / VS Code 是什么、建议、估摸的代价。
判据只有一条:用户说过「要像 IDEA 一样」。挑的时候按「天天碰到的先做」。
(先盘点不动手,挑好了再一条条来。)
一、状态栏 / 编辑器 —— 天天碰到的缺口
| # |
现在 |
IDEA / VS Code |
建议 |
代价 |
| 1 |
状态栏右边没有行:列 |
IDEA 12:34,VS Code Ln 12, Col 34,两家都有,点了能跳行 |
加一格,点了弹「跳到行」输入 —— 编辑器已经往上报光标行了(onCursor),只差列 |
小 |
| 2 |
没有跳到行(⌘L) |
IDEA ⌘L,VS Code ⌃G |
nav.goto 已经在了,只差一个输入浮层和键位 |
小 |
| 3 |
状态栏没有缩进 / 换行符(4 spaces / LF) |
两家都有,点了能改 |
显示先做(Rust 侧 read_text 探一次就有),改留后面 |
小 |
| 4 |
编辑器改动标记(缩略图 / gutter)反映的是磁盘那份,打字不动 |
两家都是实时的(拿 HEAD 版本在前端 diff) |
git show HEAD:path 一次,前端 changedLines(live, head);git/diff.ts 已经有算法 |
中 |
二、文件树
| # |
现在 |
IDEA / VS Code |
建议 |
代价 |
| 5 |
切标签时文件树不跟着定位,只有面包屑 / 标签右键「在文件树中显示」 |
IDEA「Always Select Opened File」(默认关)、VS Code autoReveal(默认开) |
树头加一个「跟随」开关,默认开;revealPath 那条路已经在了 |
小 |
| 6 |
树头只有一个 PROJ |
IDEA:定位 / 折叠全部 / 设置;VS Code hover 出:新建文件 / 新建文件夹 / 刷新 / 折叠全部 |
加「折叠全部」和「定位」两个(hover 才显,ui.md 第三条) |
小 |
| 7 |
树里不能多选 |
两家都能 ⇧ / ⌘ 多选,一次删一批 |
多选 + 批量废纸篓;closeTabsUnder 已经按路径批处理了 |
中 |
| 8 |
没有打字定位(speed search) |
IDEA 在树上直接打字就跳;VS Code 打字出过滤框 |
照 IDEA:焦点在树上打字 → 高亮 + 跳到第一个匹配,Esc 清 |
中 |
| 9 |
不能拖拽移动文件 |
两家都能 |
后面再说,误操作代价高(要确认条) |
中 |
三、Git 展示
| # |
现在 |
IDEA / VS Code |
建议 |
代价 |
| 10 |
提交只有「提交」 |
IDEA「Commit and Push…」;VS Code 提交按钮旁的 ▾ 里有 |
「提交」右边加 ▾:提交并推送。git.commit + remote.askPush 串起来 |
小 |
| 11 |
没有 stash |
IDEA Shelve / Stash,VS Code Stash |
分支浮层被本地改动挡住时多一条出路「暂存到 stash 再切」;改动列表 ⋯ 里加 stash / pop |
中 |
| 12 |
差异视图不能按块暂存 |
两家都能按 hunk 甚至按行暂存 / 撤销 |
git apply --cached 一段 patch;DiffView 已经按 hunk 分了 |
中偏大 |
| 13 |
提交历史右侧详情只列文件 |
IDEA:点文件看那次提交的差异(有了);右键:cherry-pick / 检出到这个提交 / 复制哈希 / 和本地比较 |
先加「复制哈希」「复制提交信息」「检出到此提交(游离)」三条 |
小 |
| 14 |
没有 blame / annotate |
两家都有(gutter 里显示作者 + 时间) |
git blame --porcelain 一次,gutter 加一列,⌘Click 跳到那次提交 |
中 |
| 15 |
改动列表是平的(按目录名一段) |
IDEA 可切树形 / 平铺;VS Code 默认平铺可切树 |
文件超过 ~20 个时平铺看不过来;加一个树形 / 平铺开关 |
中 |
四、标签栏 / 面板
| # |
现在 |
IDEA / VS Code |
建议 |
代价 |
| 16 |
没有预览标签(单击打开的标签永久占位) |
VS Code 单击 = 预览(斜体,下一次单击顶掉),双击 / 编辑才固定;IDEA 有「Open in Preview Tab」 |
照 VS Code;tabs store 加一个 preview 标记 |
中 |
| 17 |
标签不能钉、不能拖拽排序 |
两家都能 |
钉小、拖拽中;钉先做 |
小 / 中 |
| 18 |
终端没有搜索、不能分栏 |
IDEA 终端 ⌘F,VS Code 终端搜索 + 分栏 |
xterm 的 search addon 现成;分栏后面 |
小 / 中 |
| 19 |
没有分屏编辑器 |
两家都有 |
大,{#key active.id} 那套要改成多编辑器实例;先不做 |
大 |
五、底层
| # |
现在 |
IDEA / VS Code |
建议 |
代价 |
| 20 |
没有文件系统监听:外部改动靠「切回窗口」+ 10 秒轮询已打开文件;文件树、git 状态在窗口不失焦时不更新(终端里 git checkout 完要切出去再切回来才刷) |
两家都用 FSEvents / inotify,改了当场就变 |
Rust 侧 notify crate(FSEvents),防抖 200ms 发一个 fs-changed 事件,前端调 worktree.changed() + git.refresh()。这是底层里最值的一条:终端就在应用里,「在终端里 git 一下再回到文件树」是每天的动作 |
中 |
| 21 |
本地 git 查询在主线程(#12) |
— |
已有 issue,量完再动 |
— |
| 22 |
git 信任模型逐项堵(#24) |
— |
已有 issue |
— |
| 23 |
会话快照只有一份,切项目就覆盖 |
IDEA 每个项目一份 .idea/workspace.xml;VS Code 每个 workspace 一份 |
按 root 分 key 存(lite-ide.session:<root>),最近列表里的每个项目回来时各有各的标签 |
小 |
建议的先后
天天碰到、代价小的先做:#1 行列 → #2 跳到行 → #20 文件监听 → #5 树跟随 → #10 提交并推送 → #6 树头按钮 → #23 按项目存快照。
然后是中等的:#16 预览标签、#4 实时改动标记、#11 stash、#8 打字定位。
大的(#12 按块暂存、#19 分屏)等前面做完再评估。
#9 拆完之后做的一次盘点。每条写清现在是什么、IDEA / VS Code 是什么、建议、估摸的代价。
判据只有一条:用户说过「要像 IDEA 一样」。挑的时候按「天天碰到的先做」。
(先盘点不动手,挑好了再一条条来。)
一、状态栏 / 编辑器 —— 天天碰到的缺口
12:34,VS CodeLn 12, Col 34,两家都有,点了能跳行onCursor),只差列nav.goto已经在了,只差一个输入浮层和键位4 spaces/LF)read_text探一次就有),改留后面git show HEAD:path一次,前端changedLines(live, head);git/diff.ts已经有算法二、文件树
autoReveal(默认开)revealPath那条路已经在了PROJcloseTabsUnder已经按路径批处理了三、Git 展示
git.commit+remote.askPush串起来git apply --cached一段 patch;DiffView 已经按 hunk 分了git blame --porcelain一次,gutter 加一列,⌘Click 跳到那次提交四、标签栏 / 面板
tabsstore 加一个preview标记{#key active.id}那套要改成多编辑器实例;先不做五、底层
git checkout完要切出去再切回来才刷)notifycrate(FSEvents),防抖 200ms 发一个fs-changed事件,前端调worktree.changed()+git.refresh()。这是底层里最值的一条:终端就在应用里,「在终端里 git 一下再回到文件树」是每天的动作.idea/workspace.xml;VS Code 每个 workspace 一份lite-ide.session:<root>),最近列表里的每个项目回来时各有各的标签建议的先后
天天碰到、代价小的先做:#1 行列 → #2 跳到行 → #20 文件监听 → #5 树跟随 → #10 提交并推送 → #6 树头按钮 → #23 按项目存快照。
然后是中等的:#16 预览标签、#4 实时改动标记、#11 stash、#8 打字定位。
大的(#12 按块暂存、#19 分屏)等前面做完再评估。