给编辑器补拖拽:标签挪过去,状态也得跟过去
分栏能用了以后,紧接着就想用鼠标摆一摆:这个文件放右边,那个标签提前一点,文档那一列再宽一点。
这些需求很自然,做的时候却不能只盯着拖动动画。标签换了位置,光标、选区和滚动位置都得跟过去。这轮从 alpha.7 之后开始做,后来随 alpha.8 发布。
先给长文件加一条位置提示
编辑区右边加了一条全文概览,标出 Git 改动、查找匹配、光标和当前能看到的区域。点一下或者拖动,就能跳到文件里的对应位置。
我没有把整份代码缩小重画,而是先放这些标记。读长文件时,知道修改集中在哪一段,比看一片缩小的文字更直接。
绘制时,相邻的同类改动合成区间,查找匹配按最多 1000 个桶去重,免得几千个匹配全挤在细条里。这只是在控制标记密度,搜索本身还是照常做。
缓存还要考虑一种情况:文件一个字没改,HEAD 却变了。这时哪些行算改动,可能已经不同。于是除了文档版本,还得记录 Git 标记的变化,否则侧边的颜色会停在上一次。
移动标签,别重新打开一遍文件
标签现在可以在栏内排序,也能拖到其他列。拖动时显示落点线,原来那列搬空了就关掉。
如果实现成"关掉旧标签,再按路径打开一个",文件名倒是一样,刚才看到哪里却容易丢。diff 和提交标签更不能这么处理,它们本来就不是普通磁盘文件。
所以这次移动的是原标签,连同光标、选区和滚动状态一起挪。后面终端也要进编辑区,这个选择就更重要了:正在跑的 shell 没法靠重新打开路径找回来。
右键菜单也补上了关闭其他、关闭全部、向右拆分、移到相邻列、复制路径和在文件管理器中显示。批量关闭会留下有未保存修改的标签,整理界面时不用担心顺手把还没保存的文件关掉。
列宽存比例
列之间和侧边栏边缘都能拖动调整宽度。新开一列时,从原列分走一半权重;拖动两列的边界时,在相邻列之间分配宽度,并保留最小宽度。
恢复文件夹会话时,列宽按保存的权重还原。上次窗口大、这次窗口小,也能保住大致比例。
这还会影响刚做完的并排 diff:外面的列变窄了,里面也要重新决定排成一栏还是两栏。只把外框缩小,文本不会自己变得好读。
换行可以只管眼前这个文件
长段文档适合折行,旁边的源码可能还是想横着看。这轮把 Alt/Option+Z 改成只切换当前标签的换行状态,并跟随文件夹会话保存。
它实际需要三种状态:跟随整体设置、明确开、明确关。只存一个布尔值,就分不清"我专门关了"和"我没改过"。
从菜单或命令面板修改整体 Word Wrap 设置时,会清掉当前编辑器各标签的覆盖值,让它们重新跟随整体设置。
文件也能拖到标签栏的指定位置;文件、标签或面板终端拖到列边缘,可以直接开一列。到这里,布局终于可以按正在做的事情随手调整了。
这批测试主要盯住移动前后是否还是同一个标签、落点顺序、列宽和换行状态。视觉上摆得对只是第一步,换个位置以后能接着刚才的工作,才算把拖拽补完。
下载试用
本文这批布局和终端功能后来进入 alpha.8。下面提供后续公开版本的安装包。
2026-10-19 补充:公开安装包为 v0.1.0-alpha.14 ,适用于 macOS 13+、Apple Silicon(M 系列芯片)。
安装包目前尚未经过 Apple 公证,首次打开的说明见发布页。
仓库留档
- 发布补记:这批功能已随 alpha.8 发布,发布时间为 2026-10-16 02:44:51 UTC;该历史页面位于私有源码仓库。
- 实现:overview.go、tabs.go、wrap.go、settings.go、panedrop.go。
- 测试入口:overview_test.go、tabs_test.go、wrap_test.go、filecopy_test.go。
- 本轮未重新运行产品测试;历史验证范围见 MAYOI 的布局与终端批次。