查看文件
Peach Commander 内置一个查看器,让你无需打开其他应用或更改文件即可查看文件内部。在光标下的项目上按 F3,查看器会立即打开,即使是非常大的文件也是如此。它会自动选择最佳的内容显示方式:可读文本、语法着色的代码、原始十六进制转储,或原尺寸图像。你也可以用 Quick View 在窗口内直接预览文件,或交给 macOS Quick Look。
查看文件¶
- 将光标移到活动面板中的某个文件。
- 按 F3(或从“文件”菜单选择“查看”)。查看器在自己的窗口中打开。
- 用工具栏切换内容的显示方式:文本、代码、十六进制、图像或渲染。保持在自动设置可让 Peach Commander 自行决定。
- 用箭头键、Page Up/Page Down 和滚动条滚动。对于长文本,打开缩略图(minimap)按钮以一目了然地查看和跳转整个文件。
- 按 N 跳到下一个所选文件,或用 Esc 关闭窗口。
(图:查看文本文件,工具栏中带有表示形式选择器和缩略图。)
查找文本并更改编码¶
- 按 Ctrl+F 在文件内搜索。按 F3 跳到下一个匹配,Shift+F3 跳到上一个。
- 在查找框中勾选正则表达式,即可用模式而非纯文本搜索——
ERROR \d+,或用^Warning匹配以该词开头的行。^和$表示行首和行尾。无法编译的模式会被明确报告,而不是悄悄地什么也找不到。 - 非常大的文件按重叠的窗口搜索,因此单个长度超过约 64 KB 的匹配,若恰好跨在窗口边界上,可能会被漏掉。纯文本搜索没有这个限制,匹配较短内容的模式也没有。
- 如果文本看起来乱码,点按工具栏中的“编码”(或按 E),循环切换文本编码直到正确显示;自动设置通常能正确判断。
- 按 W 切换长行的自动换行。
- 按 Ctrl+G 跳到某一行,在十六进制模式下跳到某个字节偏移量。可以跨进制做算术:
0x1000 + 15 + 1会跳到 4112 —— 十六进制用0x、$或末尾的h,二进制用0b,八进制用0o,并支持带括号的+ - * /。 - 若从填写了 查找文本 的查找文件结果中打开一个文件,查看器会以该搜索开始:文本已在查找栏里,第一处匹配也在屏幕上,因此你落在匹配处而不是文件开头。你在那里修改或清除它后,保留的是你的版本。若希望每个文件都从开头打开,可在设置 ▸ 编辑/查看中关闭该行为。
读取二进制文件中的字符串¶
在十六进制表示中,工具栏提供字符串:一个面板,列出文件中每一段可读的文本,连同它所在的偏移以及它是按哪种方式解读的。点击某一行,十六进制视图便跳到那些字节并将其选中,于是接下来的动作——将选中内容复制为…,或者只是读一读它周围的内容——都作用于你点击的那个字符串。
- 四种解读同时进行:ASCII、UTF-8、UTF-16 小端和 UTF-16 大端。这样,一个 Windows 可执行文件的宽字符串和它的普通字符串会出现在同一个列表里,而不必各跑一遍。编码菜单下也提供 Latin-1,但一开始是关闭的,因为所有字节值中有四分之三是可打印的 Latin-1,编译后的代码会大量通过那种解读。
- 同样的字节常常可以按不止一种编码读出来。当两种解读争夺同一段范围时,最像文本的那一种胜出——所以
Hello只列出一次,而不会又作为那些字节两两读出时拼成的一对表意文字再出现。 - 最小长度决定一段文本要多短才不再算数。四个字符是通常的起点;在大型二进制文件上把它调高,可以让列表稀疏一些。
- 筛选框只缩小显示范围,并不重新读取文件,因此即便在非常大的文件上也是即时的。改动长度或编码则会重新读取,因为它们改变了什么才算一个字符串。
- 编码菜单下的同时显示不太可能的字符串会把仅仅可打印的内容全部加进来——包括并非以拉丁字母为主的 UTF-16 文本,普通列表把它略去,是因为字节本身无法把它和两字节读出的普通文本区分开。
缩放图片¶
在图像表示下,查看器会把图片按窗口大小打开,而小图片保持自身尺寸,不会被强行放大。
| 操作 | 菜单 | 按键 |
|---|---|---|
| 放大 | 显示 ▸ 放大 | Cmd++ / + |
| 缩小 | 显示 ▸ 缩小 | Cmd+- / - |
| 实际大小(100%) | 显示 ▸ 实际大小 | Cmd+0 / 0 |
| 适合窗口 | 显示 ▸ 适合窗口 | Cmd+9 / F |
你也可以在触控板上捏合,或按住 Cmd 滚动。缩放级别显示在状态栏中,实际大小表示一个图像像素对应一个屏幕点 —— 而不只是“撤销我的缩放”。适合窗口会跟随窗口:改变窗口大小,图片仍然保持适配。
行的备注¶
如果安装了备注插件,一条备注可以针对文件中的某一行,而不是整个文件。
- 把光标放在该行上,选择显示 ▸ 为此行添加备注…(Cmd+Shift+N)。备注编辑器会打开,标题里带着文件名和行号。
- 已有备注的行会作为备注分组出现在窗口下方的标记面板中,与搜索标记并列。按 Cmd+Ctrl+M 打开面板;双击条目即可跳到该行。
- 备注本身与其他所有备注放在一起,因此备注总览和“查找文件”都能照常找到它们。删除在备注编辑器中进行——面板上的关闭按钮只是隐藏该分组。
Quick View 与 Quick Look¶
Quick View 在你未使用的面板中显示实时预览,因此你可以在一侧继续浏览,同时在另一侧预览。
- 按 Ctrl+Q。非活动面板变为预览区域。
- 在活动面板中将光标移到不同文件上,逐一预览。
- 再次按 Ctrl+Q,或按 Esc,让面板恢复为普通文件列表。
快速查看中的图片带有与侧栏预览相同的缩放按钮 —— 位于它所接管的那个面板的角上。
要获得由 macOS 本身处理的快速全屏预览,按 Cmd+Y(Quick Look)。再次按 Cmd+Y 或 Space 将其关闭。
侧栏中的信息页¶
侧栏(显示 > 预览面板,或 Cmd+Shift+P)有一个 信息 页,像访达的信息侧栏那样显示光标所在的项目。
- 预览会填满侧栏宽度:把侧栏拉宽,预览也随之变大。 拖动侧栏左边缘可加宽或收窄,宽度会被记住。
- 这是真正的 macOS 预览,而不是小缩略图:快速查看能显示的所有格式在这里都能用,多页文档还可以在预览中逐页翻阅。
- 图片在预览的角上带有自己的缩放按钮 —— 缩小、放大、实际大小和适合窗口 —— 旁边是当前级别;捏合与 Cmd+滚动在那里同样有效。预览绘制的其他内容,例如 PDF 或视频,行为与以往一致。
- 下方依次是名称、种类和大小,然后是创建时间、修改时间以及所在文件夹。
移动光标时,名称和信息会立即更新;预览稍后跟上,因此按住方向键快速穿过长目录时,不会为经过的每一行都启动一次预览。
侧栏提供哪些页面¶
侧栏起初只显示信息页。活动(仍在进行的传输)和日志(已完成的传输)是关闭的,因为大多数工作从不需要它们,否则一条三个标签的条带会整天占在预览上方。
- 在设置 > 布局的侧边面板页面中打开它们,或右键点击标签条,或从显示 > 侧边面板:信息 / 活动 / 日志打开。
- 只剩一个页面时,面板会完全去掉标签条:只有信息的面板就是预览和详细信息,上方别无他物。
- 每个页面都可以关闭,信息页也一样——当你在这里改放终端或插件视图时很有用。什么都不剩的面板会把这一点说出来,而不是打开一片空白。
- 插件提供的页面不受影响:它们随插件一起出现和消失,要关掉它们请用插件页。
- 显示 > 重置布局会把页面恢复为仅信息,连同窗口其余的陈设一起。
显示菜单里的这几项比看起来重要。所有页面都关掉之后,就没有标签条可供右键点击了——它们就是回来的路。
反编译 Java class 文件¶
启用 Java Decompiler 插件后,对 .class 文件按 F3 会显示可读代码而不是二进制数据 —— 包括 JAR 或 ZIP 里的 class 文件,你可以进入压缩包直接查看,无需解压。
插件本身不含任何反编译器。它只是驱动你自己安装的引擎,而且引擎随时可换:
- CFR(MIT 许可)与 Vineflower(Apache 2.0)生成 Java 源代码。把
cfr.jar或vineflower.jar放进引擎文件夹即可。 - Procyon(Apache 2.0)是第三个生成源代码的反编译器。
- javap 完全不需要下载 —— 它随任何 JDK 一起提供,显示的是字节码而非 Java 源代码。
不会替你下载任何东西:这些是第三方程序,各有自己的许可,Peach Commander 既不获取也不更新它们。查看器中的 引擎文件夹… 按钮会打开它们应放置的文件夹,并在其中留下一份说明,列出每个引擎及其下载地址。除 javap 外都需要已安装 Java。
用查看器顶部的菜单切换引擎;所选引擎立即生效,结果会被保留,因此在同一文件上比较两个引擎没有等待。
源代码带语法高亮,另有两个按钮继续处理:存储为… 写入文件,在编辑器中打开 交给 Mac 上打开 .java 的程序。结果非常大时会不加高亮直接显示,以便立即出现而不是等上一会儿;状态行会说明。
结果会缓存到磁盘,因此再次打开看过的文件是即时的;缓存键包含文件的大小与日期以及引擎的参数,所以重新编译过的类或改动过的选项会重新反编译。所选引擎按文件类型记住。配置项可用 extends = cfr 继承内置引擎,只覆盖参数 —— 想为同一引擎保留两套预设时很方便。
打开 对比 会开出第二个窗格,带自己的引擎菜单。两个反编译器出错的位置不同,因此并排查看往往比纠结该信哪一个更快;在一侧选 javap,字节码就会挨着源代码。两个窗格共用缓存,所以在已经跑过的引擎之间切换是即时的。
对整个 .jar、.apk 或 .dex 按 F3 会一次全部反编译,并在源代码旁边给出包树。树上方的搜索框搜遍每个类——这正是单个类回答不了的问题:还不知道在哪个类里时,某个字符串、调用或常量究竟出现在何处。命中会收窄这棵树,第一个命中直接停在它那一行。用 Enter 打开 JAR 仍然是当作压缩包浏览,两个动作依然分开。
还有第二条更直接的路:把光标放在 .class 文件或整个压缩包上,选 反编译为源代码(命令菜单、右键菜单,或 ⌘⇧J)。类会被反编译,结果作为普通的 .java 文件在另一个文件面板中打开。从那里起整个文件管理器都用得上——F3 用 Peach Commander 自己的 Java 高亮显示它们,Alt+F7 跨文件搜索,F5 把它们复制出去,比较和打标签也跟别的文件一样。多数工作里这比一个自带窗口更好用,所以插件自己的树可以在 设置 ▸ 反编译器 里关掉。
第二个插件为 .NET 做同样的事:对托管的 .dll、.exe 或 .winmd 按 F3 会把其中的类型显示为 C#,将程序集反编译为源代码(⌘⇧N)把它们放进文件面板,搜索也能同样地看进程序集内部。它驱动 ILSpy(MIT,dotnet tool install -g ilspycmd)产出源代码,或用 Mono 的 monodis 产出 IL——相当于 .NET 版的 javap。原生 .dll 扩展名相同却没有源代码可显示,所以插件在打开前先检查,把它留给内置查看器。
设置页里有一个 检查引擎 按钮,值得按一下:别处的“已安装”只表示文件在那里,而没有 JDK 的 Mac 上的 Java 引擎虽然存在却跑不起来。这个检查会向每个引擎询问版本,并说明哪些确实能用。
Android 同样支持:对 .dex 文件按 F3 会使用 jadx(Apache 2.0,brew install jadx),把 Dalvik 字节码还原成 Java。为此只需一份引擎描述 —— 同一套机制,不同格式。
插件默认关闭,直到你打开它(设置 ▸ 插件)—— 多数人从不打开 .class 文件,而且没有引擎它也没有用处。
要添加自己的引擎,在引擎文件夹中新建 decompilers.ini:
[myengine]
name = My Decompiler
kinds = class
tool = java
args = -jar {engine} {input}
engine = my-decompiler.jar ; a bare name is looked up in this folder
output = stdout
timeout = 30 ; seconds before the engine is stopped
{input}、{engine} 和 {outdir} 会在运行时替换。你自己的条目优先于内置条目;重用内置名称(cfr、vineflower、procyon、javap)会替换它,而不是新增一条。
快捷键¶
| 操作 | 快捷键 |
|---|---|
| 查看光标下的文件 | F3 |
| 仅查看光标下的文件(忽略已标记文件) | Shift+F3 |
| 在外部查看器中打开 | Option+F3 |
| 在查看器内查找 | Ctrl+F |
| 为光标所在行添加备注 | Cmd+Shift+N |
| 显示或隐藏标记面板 | Cmd+Ctrl+M |
| 下一个 / 上一个匹配 | F3 / Shift+F3 |
| 在另一面板中 Quick View | Ctrl+Q |
| Quick Look(macOS 预览) | Cmd+Y |
| 关闭查看器或 Quick View | Esc |
备注¶
- 查看器是只读的。要更改文件,请改用编辑器(参阅“编辑文件”)。
- 非常大的文件也会毫无延迟地打开:文本以快速、可滚动的视图打开,十六进制视图无论多大都直接从磁盘流式读取。
- 在文件夹上按 F3 会看到其内容和总大小的摘要,而非文件字节。
- 渲染模式显示网页等带格式的内容;十六进制模式将原始字节与其字符并排显示,便于检查二进制文件。
- 在渲染模式下也可以选择并复制文本,查找会在渲染后的页面中搜索。对渲染页面无法适用的按钮 —— 格式化、编码、全选、选择项和跳转 —— 会变灰,而不是按了没反应。
- 格式化按钮会重新缩进结构化文件(JSON、XML、HTML、INI、YAML,若安装了相应的命令行工具还支持更多)。完整说明见编辑文件,在这里的用法相同。