为什么要在查看器里做历史版本?
Git 很好,但它不是为「改一份笔记」准备的。为了找回一段删掉的文字,要先 git init、git add、git commit,对大多数 Markdown 使用者来说太重了。网盘的历史版本又常常绑在同步客户端上,离线、换目录、换工具都可能断档。
而真实的需求其实很朴素:刚刚那段话还在不在?昨天那版是不是更好?把上周的版本和现在并排看一眼。老用户可能记得,mdview 早先的历史版本要另装一个外部工具;从 2.0 开始,存储、时间线、对比、还原整条链路都并进了 mdview.exe,右键菜单里点「历史版本」就能用。
它不是 Git 的替代品:没有分支、没有合并、没有远端仓库。它更像给单个文件准备的一台时光机——你只管正常写,回头的时候有路可走。
入口:右键 →「历史版本」
在阅读页面任意位置右键,菜单里点「历史版本」,会打开版本时间线。每条记录带四类信息:
- 时间:今天只显示时分,更早的显示日期;
- 来源:这次是保存、外部修改,还是还原前自动留的一份;
- ± 行数:相对上一版增加了多少行、删掉了多少行;
- 命名标记:你给这一版起的名字,比如「发给客户前」「AI 改写前」。
行内可以直接查看(纯文本抽屉,看的是 Markdown 源码)、命名、隐藏、还原。隐藏只是让这一行变淡、从视线里收起来,并不会删除内容;对比时仍然可以选到隐藏版本。
什么时候自动记录?
你不需要记得点「存一版」。日常写作里的几个关键节点,mdview 都会自动入库:
| 时机 | 会发生什么 |
|---|---|
| 保存 | F2 就地编辑、F3 分屏编辑的自动保存,以及 Ctrl+S 手动保存 |
| 进入 / 退出编辑 | 进入时补一条基线(盘上内容与历史最新版不同才补),退出时把本次会话的最终内容收尾留一版(有变化才记) |
| 外部修改 | 用别的编辑器、脚本或同步盘改了磁盘上的文件,检测到变化后记录 |
| 打开文件 | mdview 没开着的期间文件被改过,打开时发现盘上内容和历史最新版不一致就补录(同样受自动记录间隔约束) |
| 关闭窗口 | 正常关闭前再检查一次,盘上还有未入库的内容就兜底留一版 |
如果每次自动保存都留一版,历史很快会被「打两个字」的版本刷满。所以自动记录默认有一个3 分钟合并窗口:距离上一版不足 3 分钟的自动保存会合并,过了窗口再留新的一版。
但有些动作不受这个窗口限制:Ctrl+S 手动保存、进入 / 退出编辑时的补录、正常关闭窗口都会立即检查并记录(内容没变自然不会再记一版)。手动保存是明确的「我要存档」意图,退出编辑和关闭则是「本次会话到此为止」,都不该被静默吞掉。
觉得 3 分钟太粗或太细,可以在设置 → 通用 → 历史版本间隔里改,单位是分钟;填 0 表示不限制,每次保存都检查记录(内容有变才产生新版本)。改完当前窗口立即生效,不用重启。
还原:两步确认,先留退路
点某一版的「还原」,按钮会先变成「确认还原?」,在 3 秒内再点一次才真正执行——这是为了防止手滑。执行时 mdview 会做两件事:
- 先把当前磁盘上的内容留一份,标记为「还原前自动」,万一这次还原选错了,还能再退回来;
- 再把所选版本的内容写回文件。写盘之后,预览会通过文件监听自动刷新,不需要手动重新打开。
还原是把内容写回原文件,不是打开一个只读快照。所以用其他编辑器、同步盘、构建脚本看到的是同一份新内容——这一点和 Git 的 checkout 类似,操作前心里要有数。
对比:任意两个版本,放在一起看
只看单版内容往往判断不了「哪版更好」。历史面板里每一行都有「左」「右」两个按钮:把一版选为左边,另一版选为右边,两侧都选齐后会自动打开全屏对比窗口。
- 并排 / 内联:并排看左右两栏,或切成内联模式,在原位看增删;
- ⇄ 换端:左右方向反了,一键交换;
- 任选两端:左右下拉里可以选「当前文件」,也可以选任意历史版本,包括被隐藏的版本;
- 只读:对比窗口不会改文件,看完关掉即可,想采用某一版再回去点「还原」。
这个功能最舒服的场景,是改完一大段之后心里没底:把「改之前」放左边、「改之后」放右边,哪句被删了、哪段是新加的,一眼就能看出来。用 AI 改稿尤其合适——AI 往往会把你的原话润色掉,好不好另说,至少得先看清楚它动了哪里。
命令行也能比两个文件
如果要比的不是同一份文件的两个历史版本,而是两份不同的 Markdown,可以用命令行打开一个独立的对比窗口:
mdview --diff 旧方案.md 新方案.md
同样支持并排 / 内联和 ⇄ 换端,Esc 关窗。这个入口是 Pro 功能,目前支持 Windows 和 Linux;macOS 的单进程架构暂时还没接,后续再补。
数据存在哪?会不会上传?
历史库是一个本地 SQLite 文件:Windows 在 %LOCALAPPDATA%\mdview\history.db,macOS / Linux 在各自的用户缓存目录。它只存在本机,不上传云端,也不依赖网络。
库里的文件内容按哈希去重——同一份内容只存一次,所以「没改动的重复保存」不会把库撑大。历史是权威数据,不是缓存:mdview 不会因为升级或清理缓存就把它删掉。反过来说,删掉这个文件,本机的历史版本也就没了,重要文档仍然建议保留常规备份。
几个需要知道的边界
- 这是正式版 Pro 的功能:社区版右键菜单里不会出现「历史版本」,Pro 前 100 次免费试用,满意再付 ¥19.9 设备买断;
- 「查看」是纯文本:看的是 Markdown 源码,不是渲染后的页面。想确认排版效果,可以先还原到临时副本,或用对比窗口看内容变化;
- 历史跟着文件路径走:把文件移到别的目录或改名,会被当成一份新文件,新路径从零开始记录。重要节点建议用「命名」做标记,长期归档仍然交给 Git 或备份盘;
- 它不是 Git:没有分支、合并、远端同步,也不解决多人协作冲突。它解决的是「我一个人改一份文件,想回头」。
三步上手:① 用 mdview Pro 打开一份正在改的文档,按 Ctrl+S 存一版;② 再改几处,右键 →「历史版本」,看看时间线;③ 选两版点「左」「右」,在对比窗口里确认改动。想回到某一版,点「还原」两次即可。
历史版本负责「回得去」,多标签负责「装得下」。如果你还没试过 2.0 的多标签模式,可以接着看:《一个窗口装下所有 Markdown:mdview 2.0 多标签模式》。