差异与预览
阅读一份差异
| 开关 | 作用 |
|---|---|
| 统一 ↔ 分栏 | 想比较时用并排,想通读时用上下堆叠 |
| 词级高亮 | 只高亮被编辑行内真正改动的词元——旧的标红,新的标绿 |
| 忽略空白 | 隐藏重新缩进,让真正的变更浮出水面 |
| 换行(仅分栏视图) | 长行在所在列内换行,而不是横向滚动 |
| 联动(分栏视图、关闭换行时) | 两侧纵向和横向一起滚动 — 关闭后每栏各自滚动 |
| ⌘F | 在差异内查找,可逐个跳到上一个/下一个 |
换行默认关闭:一行始终占一行,两侧可以逐行对照,每一栏各有自己的横向滚动条。想读完 整长行而不是追着它滚动时再打开——代价是折成三行的一行不再与对面那行齐平。每个开关 都会在文件和会话之间记住状态。
关闭换行时,两侧默认联动滚动——纵向联动让两侧的行彼此相对,横向联动让左边第 90 列正好对着右边第 90 列。当两侧已经错开时——缩进的块对着未缩进的块,或者一次改名挪动 了每一行——或者想比较同一文件中相距很远的两处内容时,就解除联动,把每一半停在各自内 容所在的位置。

每份差异的上方都有一条语义摘要——按符号而不是按行告诉你改了什么。
图片差异
被修改的图片会得到一次真正的比较:并排放置,或者拖动一个滑动手柄在改动前后之间切换。

更改标尺与缩略图
工作树文件的文件视图——无论是否已暂存、是否被跟踪、还是全新文件——都会在自 HEAD(暂存文件则为索引)以来发生变化的每一行旁显示一条彩色条:绿色表示新增,蓝色表示修改,未被替换而直接删除的地方会出现一个小红色楔形。点击条形即可在不离开文件的情况下查看该更改——弹出框会显示被删除和新增的行,并提供上一个/下一个按钮,用于逐一查看文件中的所有更改。

缩略图默认关闭,会在右侧边缘添加整个文件的缩放概览——点击或拖动即可跳转,就像滚动条要是还能显示文件形状一样。这两项都是按机器设置的开关,位于设置 → 通用 → 文件查看器。
两者都不会读取历史记录:切换到 Diff、Blame 或更早的提交时标尺就会消失——因为那些视图本来就直接显示每一处更改。
什么都能预览
预览模式渲染文件本身,而不是显示它的源码:Markdown、Word(.docx)、Excel(.xlsx)、PDF、视频、音频、图片,其余一切则以语法高亮的代码呈现。

Apple 属性列表
Info.plist 和 *.entitlements 是 XML,而没人是想读 XML 的。预览转而显示
键值大纲——Xcode 自带的 plist 编辑器展示的那种形态——嵌套原样保留,每个值的类型
就在旁边。

两个限制。二进制 plist(bplist00)会被识别并指明,但不解码——想在这里看就先
用 plutil -convert xml1 转一下,不过仓库里的二进制 plist 多半是本就不该提交的
构建产物。另外 <data> 的值显示为字节数而不是 base64:一段 blob 什么也告诉不了
你,而渲染在你可能正在共享的面板里的描述文件,会告诉别人太多。
Xcode 项目
project.pbxproj 是一个扁平的对象字典,对象之间靠 id 互相指向,所以按顺序读几乎
说明不了这个项目。预览会顺着这些引用,把你真正想看的三样东西重建出来:带构建阶段
的目标、Xcode 导航器画出来的那种分组树,以及按配置分的构建设置。

它只读,不编辑——这里没有任何东西会写回项目。两个分支同时改动同一个文件会怎样, 见解决冲突。
超大文件
预览和文件视图会将文件完整加载到内存中,因此两者都会拒绝超过大小上限的文件 (预览为 32 MB,文本为 16 MB),并转而告诉你文件有多大。仍然加载会为该 文件解除上限 — 没有什么是打不开的,只是大文件的加载改为自愿选择。超过几千行 的文件和 diff 仍会完整渲染,但滚动到视野之外的行不再进行布局和绘制,因此巨大 的 lockfile diff 不会再耗尽整台笔记本的内存。

文件标签页
左侧边栏的文件标签页浏览的是工作区本身,文件夹上带有状态徽标(新增/修改/删除),汇总其内部的情况。

