并排 diff、提交标签:砚的 Git 阅读体验又补了一轮
上一轮把所有改动放进了一页,这轮继续补怎么读。
窗口够宽时,我想把修改前后的代码摆在两边;点历史提交时,我想先看内容;文件一多,又希望侧边栏能按目录收起来。这几个需求一起进了 alpha.7,交互仍然借鉴 Mayoi,再适配到砚的共享内核里。
两边摆不下,就回到单栏
并排 diff 很直观,但它有一个前提:窗口得够宽。窄栏里硬塞两份代码,每行只能看见一小截,比较起来反而费劲。
砚提供自动、始终并排和单栏三种模式。自动模式下,两边各能放下约 80 个显示格才并排;拖窄了编辑栏,就重新判断。切换入口在 diff 面包屑末尾,命令面板里也有。
这里用的是显示格。中文、Tab 和普通英文字母占的宽度不同,拿字符串长度补空格,英文例子对齐了,中文注释可能还是歪的。
实际排版时要先展开 Tab,再按显示宽度裁切、补齐,词级差异的颜色范围也要跟着换算。替换前后的行尽量对着放,旧侧红底、新侧绿底,具体改动的词再加深,语法高亮继续保留。行号采用新侧的行号语义。
做完这一圈才发现,"左右各画一份"只是表面,麻烦都在字符和屏幕位置之间。
点提交,直接打开内容
历史列表原来偏重操作:点一下提交,先选要对它做什么。我把顺序调了一下,单击先打开预览标签。
标签前面放提交说明、作者、日期、哈希和分支信息,后面接这一提交的文件改动。它沿用总览页的结构,也能用同一套键位翻阅。读到一半切出去看源码,回来还能接着读。
检出、合并、变基、重置、还原、拣选、建分支和标签等操作,放到提交行的右键菜单里;终端前端用空格打开菜单。
有个范围需要交代:有父提交时,这里和第一个父提交比较。看普通提交够直接,遇到合并提交,要记得自己看到的是相对哪一边的变化。
目录树负责找,总览页负责读
源代码管理新增树形视图,把改动文件按目录放好。只有一个子文件夹的目录链会压成一行,比如 internal/git,不用为了找到文件连点好几层。
目录也能暂存、取消暂存或丢弃,范围限于当前分组。即使同一个目录同时出现在"已暂存"和"更改"里,操作也不会跨组带上另一份内容。
这样侧边栏可以用来挑一块范围,总览页用来慢慢读。两边不用挤着承担所有事情。
几个顺手的小入口
提交完成后,状态栏会显示「撤销」。撤回提交以后,改动留在暂存区,提交说明回到输入框。想补一个文件、改一下说明时,不用重新找刚才输入的那段话。
历史列表底部也加了「显示更多提交」,每次把读取上限增加 200。前面文章里的"最近 200 条"终于不再是固定上限,不过这里做的是扩大读取范围,大仓库的历史读取性能还得另看。
还有「初始化仓库」。打开一个普通文件夹时,源代码管理总算能告诉人下一步怎么开始,而不是空在那里。
这一轮没有什么特别抢眼的新页面,但从找文件、看 diff 到翻历史,原来几处会打断阅读的地方接上了。对一个每天要用的编辑器来说,这些小改动值得单独记一篇。
下载试用
本文记录的是 alpha.7 阶段。下面补的是后续公开版本的下载入口,方便直接试用。
2026-10-19 补充:公开安装包为 v0.1.0-alpha.14 ,适用于 macOS 13+、Apple Silicon(M 系列芯片)。
安装包目前尚未经过 Apple 公证,首次打开的说明见发布页。
仓库留档
- 当时版本:alpha.7 发布页(位于私有源码仓库,需要访问权限);公开试用请用正文中的安装包。
- 实现:diff.go、changes.go、history.go、scm.go。
- 测试入口:split_test.go、git_test.go、changes_test.go。
- 遗留:提交说明折叠、点提交号复制,以及「显示所有分支」持久化仍见 MAYOI 的未完成列表。