为什么现在才做多标签?
mdview 从第一天起就是「双击打开、Esc 离开」:一次只看一份文档,窗口轻、启动快、任务栏干净。这个理念我们坚持了很久,也拒绝过不少多标签的请求。
但真实的使用方式变了。看一份需求文档时,手边往往还摊着接口文档、测试说明和上一版方案;写笔记时,左边是素材,右边是成稿;用 AI 改稿时,原稿和改写稿得来回对照。窗口越开越多,Alt+Tab 切到眼花,任务栏最后只剩一排分不清谁是谁的图标。
所以 2.0 我们认真做了这件事。但我们不想用「虚拟标签」糊弄:切过去重新渲染、滚动位置归零、编辑到一半的状态被清掉——那不叫标签页,那只是给「换文档」套了个壳。mdview 的选择是每个标签一个独立的 WebView,用一点内存,换真正的原地切换。
先把它打开
多标签是一个模式,默认关闭。打开路径:设置 → 通用 → 多标签预览。也可以在欢迎页的「打开方式」卡片里直接选「多标签模式」。
设置对新窗口生效。当前已经打开的窗口会保持原来的单文档形态,不会被硬塞进标签条里。改完设置后,重新双击一个 .md 文件,新窗口就是多标签模式了。
单文件模式没有被改掉:双击一份文档开一个独立窗口,Esc 退出,和以前一模一样。两种模式共用同一套阅读、编辑、导出能力,区别只在「文档怎么打开」。
打开文件的规则,和浏览器一样
- 已经开着 → 直接激活:在资源管理器里双击一个已经在 mdview 里打开的 .md,不会再开第二个窗口,而是切到对应的标签;
- 没开着 → 新标签:侧栏文件列表、Ctrl+O、拖进窗口、文档里的 md 链接,只要目标文件还不在标签条里,就在当前窗口新开一个标签;
- 最右侧的「+」是新建文件,不是新标签页。新建的 .md 会直接落在当前标签里,省掉「先建空文件再打开」这一步。
还有一个很容易被忽略的细节:每个标签有自己的页面状态。你在 A 文档里滚到第 300 行,切到 B 回一封消息,再切回来,A 还停在原地;F2 就地编辑、F3 分屏编辑到一半,切走再切回也不会被重置。大文档第一次打开仍然要花时间渲染,但之后的切换不会重新解析文档。
标签条上的操作
常用的交互都按桌面用户的手感来,快捷键和浏览器基本一致(macOS 上把 Ctrl 换成 ⌘):
| 想做的事 | 操作 |
|---|---|
| 切换标签 | Ctrl+Tab / Ctrl+Shift+Tab,循环轮换 |
| 跳到第 N 个标签 | Alt+1 … Alt+9 |
| 关闭当前标签 | Ctrl+W / Ctrl+F4 / 阅读状态下按 Esc |
| 关闭指定标签 | 标签上的 ×,或鼠标中键 |
| 调整顺序 | 按住标签左右拖动 |
| 关闭其他 / 关闭右侧 | 标签右键菜单 |
| 锁定标签 | 标签右键 →「锁定标签页」,锁定后标签左侧出现 * |
| 复制文件 / 路径 / 文件名 | 标签右键 →「复制」二级菜单 |
| 打开所在文件夹 | 标签右键 →「在资源管理器中打开」(macOS 打开 Finder) |
锁定是给「这份文档不能关」准备的:锁上之后,✕、中键、Ctrl+W、Esc、关闭其他、关闭右侧都动不了它。它同时也不会被就地换文档——在锁定标签里点一个 md 链接,会另开一个新标签,而不是把当前这份替换掉。想换内容,先解锁。
关闭最后一个标签不会退出程序,而是回到欢迎页。欢迎页现在是主窗口里的一层浮层,不占标签位置;想随时回访,右键标签条 →「打开欢迎页」。用到一半发现别的文档要看,直接开新标签,不必先关掉手上这份。
侧栏只留一条,正文更宽一点
多标签模式下,侧栏仍然是大纲、文件、历史、收藏四个标签,但只有一条。早期版本曾在左右各放一条侧栏,结果正文被夹在中间,显得很挤;现在统一成单侧栏,正文只在有侧栏的那一侧让位。喜欢把侧栏放右边,设置里勾「侧边栏靠右显示」即可,当窗立即生效。
侧栏停在哪个标签是窗口级的:你在 A 文档里切到大纲,切到 B 文档还是大纲,不会每换一份文档就跳回文件列表。大纲本身仍然跟着各自文档走,每份文档有自己的标题树和折叠状态。想让正文占满整个窗口,点标题栏的 ⛶ 进入内容全屏——它藏起标题栏、标签条和侧栏,但只作用于当前标签,切到另一个标签会回到正常阅读形态。
关掉再开,标签还在
多标签模式下,直接双击 exe 启动(不带文件参数),mdview 会恢复上次的标签列表、顺序、锁定状态和激活位置。会话是变更即写,不是退出时才保存——进程被意外结束、电脑断电,重新打开后标签列表和激活位置通常还在。
恢复不会傻乎乎地把所有文档都重新渲染一遍:启动时只物化当前激活的那个标签,后台标签保持「登记但未加载」,第一次点过去才真正建页面。标签再多,冷启动也不会被拖成「打开 N 份大文档」。如果某个文件已经被删除或所在磁盘离线,恢复时会静默跳过它,而不是弹一串错误。
和 Sublime Text / VS Code 插件配合
如果你用 mdview 的编辑器插件做实时预览,多标签也不会抢错页面:插件把内容推给 mdview 时,如果那份文件在后台标签里,mdview 会先激活对应标签再应用更新,而不是把内容刷到你正在看的另一份文档上。开着多个标签写东西,预览仍然跟着正确的文件走。
几个刻意保留的边界
- 默认关闭,单文档模式零变化:不是所有人都需要标签,原来的「双击即看、Esc 即走」完整保留;
- 内存会随标签数增长:每个标签是独立 WebView,这是「切换不重渲染、编辑状态不丢」的代价。同时开十几份超大文档时,任务管理器里的占用会诚实地涨;
- 只恢复文件,不恢复浏览现场:标签列表、顺序、锁定和激活位会回来,滚动位置、前进后退栈、内容全屏状态不保存——它们属于「这一次阅读」,不属于「这份工作」;
- 暂时不做标签分组、颜色、垂直标签:先把打开、切换、关闭、恢复这几件基础事做扎实,复杂工作流等真实反馈再说。
三步上手:① 更新到 mdview 2.0.1(1.0.196 直接覆盖安装即可,配置与收藏保留);② 设置 → 通用,打开「多标签预览」;③ 重新双击几个 .md 文件,它们就会在同一个窗口里排成标签。先试试 Ctrl+Tab 轮换、Alt+1 直达和拖动排序。
多标签解决的是「同时看几份」;2.0 的另一件大事,是解决「改错了怎么回去」——mdview 现在自带历史版本和差异对比。可以接着看下一篇:《改错了也能找回:mdview 2.0 内建「历史版本」》。