跳到主要内容
赞助推荐 Claude Team 合租,少折腾账号
>80aj_
工程实践

我把 40 个 Sublime 标签缩到 12 个,插件开源了

13 分钟阅读阅读()
赞助推荐 团队协作里的 AI 办公工作台

我把 40 个 Sublime 标签缩到 12 个,插件开源了 日报图文

我的 Sublime Text 经常开着一排临时标签。里面有命令、配置片段、会议记录和没想好该放哪里的草稿。它们越积越多,我又不敢随手关,因为未保存标签里可能藏着以后还要用的内容。

赞助推荐 一人公司 · 创业装备库
赞助推荐 一人公司 · 创业装备库

我最后写了 Sublime Auto Archive。首次实测处理了 40 个标签:26 份内容写进 Obsidian Clippings,2 个已经保存且没有修改的文件直接关掉,最后留下 12 个常用标签。迁移错误和哈希错误都是 0。

这个插件已经按 MIT 许可证开源。它不联网、不需要账号,也没有第三方 Python 依赖。

Sublime Auto Archive 的归档与校验流程

为什么标签页一直关不掉

问题通常不在标签数量,而在“我不知道关掉以后还能不能找回来”。已经保存到项目里的文件很好处理,未命名草稿和修改未保存的文件才让人犹豫。

手动整理也很容易半途而废。你要给每个草稿起名、选择目录、保存,再回头关闭原标签。几十个标签摆在一起时,这件事很快就会被拖到下次。

普通的自动关闭又太冒险。只要其中一次写盘失败、路径填错或同步盘状态异常,所谓的“整理”就可能变成数据丢失。

Sublime Auto Archive 的核心价值很简单:只有确认归档内容和原文完全一致,它才关闭原标签。

它具体会做什么

插件在 Sublime Text 启动后等待 15 秒,只执行一次自动检查。它没有周期轮询,也不会每隔几分钟突然动你的标签页。

默认策略会保护当前标签和最近使用的 8 个标签。当文本标签超过 12 个时,它从较旧的标签开始处理;超过设定天数、长期没有活动的标签也可以进入候选列表。

不同标签有不同处理方式:

  • 未命名且内容为空:直接关闭,不生成空笔记;
  • 已保存且没有修改:原文件已经存在,只关闭标签并记录台账;
  • 未命名草稿或有未保存修改:把完整正文写入归档,校验成功后再关闭;
  • 写入或校验失败:保留原标签,并把错误写进本次运行结果。

自动开关关闭后,预览和手动归档命令仍然能用。状态栏会显示 Sublime Archive: ONSublime Archive: OFF

为什么我没有做成定时清理器

文本编辑器不是缓存目录。你正在输入时,后台任务不应该突然开始批量判断和关闭标签。

启动后的单次检查更容易理解。你打开 Sublime,插件等窗口和 Package 加载稳定,再做一次收敛。之后的编辑过程不受打扰。确实想马上整理时,可以先预览,再手动执行。

代码里的启动逻辑只有一次调度:

def plugin_loaded():
    _update_all_statuses()
    _schedule_startup_check()

def _schedule_startup_check():
    # Guarded so one Sublime session schedules only once.
    sublime.set_timeout_async(run_once, delay * 1000)

回调执行后不会再次注册自己。_startup_check_scheduled 防止重复调度,_sweep_running 防止两次归档同时运行。

安装 Sublime Auto Archive

打开 Sublime Text 的 Preferences → Browse Packages…,在 Packages 下创建 SublimeAutoArchive 目录,并把仓库文件放进去。

macOS 用户可以直接运行:

git clone https://github.com/cfrs2005/sublime-auto-archive.git \
  "$HOME/Library/Application Support/Sublime Text/Packages/SublimeAutoArchive"

安装后重启 Sublime Text。插件默认关闭,archive_rootledger_root 也故意留空。没有完成配置时,它不会归档任何正文。

配置归档目录

打开 Command Palette,运行 Sublime Archive: Settings,写入自己的目录:

{
  "enabled": true,
  "archive_root": "~/Documents/Obsidian/MyVault/Clippings",
  "ledger_root": "~/Library/Application Support/SublimeAutoArchive",
  "max_open_tabs": 12,
  "keep_recent_tabs": 8,
  "archive_after_days": 7,
  "startup_delay_seconds": 15
}

archive_root 存正文,适合指向 Obsidian 的 Clippings 或其他笔记目录。ledger_root 存运行台账,建议放在本机应用数据目录,不要和正文混在一起。

归档文件按日期组织:

<archive_root>/
└── 2026-09-07/
    ├── 20260907-091500 - Project decision.md
    └── 20260907-091501 - Untitled note.md

插件保存原始正文,不添加 frontmatter,也不改写格式。文件名会取正文第一行或原标签名,并过滤路径中不能使用的字符。

第一次使用先预览

打开 Command Palette,依次运行:

  1. Sublime Archive: Preview Old Tabs
  2. 检查窗口显示的总标签数、计划处理数和保留数
  3. Sublime Archive: Archive Old Tabs Now
  4. Sublime Archive: Open Last Archive

同样的入口也能在 Tools → Sublime Archive 找到。确认目录和结果都符合预期后,再保持自动开关为 ON,让它在以后启动时做一次检查。

“写完再关”是怎么实现的

未保存正文进入 archive_content() 后,会走完一条固定链路:

create temp file in target directory
  → write exact buffer content
  → flush + fsync
  → chmod 0600
  → atomic os.replace
  → reopen and read back
  → compare SHA-256
  → append manifest.jsonl
  → close original tab

临时文件和目标文件位于同一目录,最终使用 os.replace() 原子替换。写入后,插件重新打开目标文件,读取完整正文并计算 SHA-256。只有读取结果与原始 buffer 的哈希一致,archive_content() 才会返回成功。

关闭标签的动作发生在成功返回之后。任何异常都会进入 errors,源标签继续留在窗口里。目录权限会尽量设置为 0700,归档文件和台账文件为 0600

台账记录了什么

每次落库会在 ledger_root/manifest.jsonl 追加一条记录,包括:

  • 归档时间、字节数和 SHA-256;
  • 原标签的安全化名称与语法类型;
  • 文件是否有未保存修改;
  • 正文在归档目录中的相对路径;
  • 是否检测到疑似 Token、密码或私钥内容。

台账只保留安全化元数据。正则检测到敏感内容时,标题和来源字段会脱敏,不会把密钥抄进 JSONL。

归档正文会原样保存。插件不会替你删除草稿里的密码、Token 或私钥。如果 archive_root 位于 iCloud、Dropbox、Git 仓库或团队同步盘,原文也会进入那个同步范围。请按自己的隐私要求选择目录。

实际运行结果

第一次整理时,Sublime 会话有 40 个 buffer,大约 23 万字符。插件归档了 26 份有内容的旧标签,关闭 2 个已保存文件,保留当前与最近标签,最终剩下 12 个。

后续一次自动运行从 18 个标签收敛到 12 个,归档 6 份正文,错误列表为空。当前本机台账累计 32 条记录。这个数字不代表性能跑分,只说明插件在真实日常会话里持续按同一套规则工作。

源码验证

项目是纯 Python 插件,可以在没有 Sublime API 的环境测试归档核心和启动策略:

python3 -m unittest discover -s tests -v
python3 -m py_compile archive_core.py sublime_auto_archive.py

发文前我重新运行了这两条命令。4 个测试全部通过,两个 Python 文件也能正常编译。GitHub Actions 在 Python 3.8 和 Python 3.12 下均为成功状态。

测试覆盖原文写入与哈希、敏感元数据脱敏、Bearer/JWT/查询参数检测,以及“启动后只调度一次”。它没有假装能覆盖真实 Sublime 窗口行为,因此第一次安装仍应执行人工预览。

这个小插件适合谁

如果你把 Sublime 当作随手记录和临时编辑器,长期留着一排 untitled 标签,Sublime Auto Archive 会很合适。它也适合已经用 Obsidian,希望旧草稿自然进入 Clippings 的人。

如果你的所有内容都严格保存在项目文件里,标签也不多,Sublime 自带的会话恢复已经足够。需要自动分类、加标签、生成摘要或跨设备知识整理的人,也应在归档完成后交给 Obsidian 或其他工具处理。

这个项目的范围很窄。源码不长,规则能读懂,默认状态不会碰用户内容。它只给关闭旧标签这件事增加一份可以检查的确定性。

查看 Sublime Auto Archive 源码 · v0.1.0 Release

赞助推荐 一键部署 AI 大模型
赞助推荐 一键部署 AI 大模型
赞(0)
未经允许不得转载:80aj » 我把 40 个 Sublime 标签缩到 12 个,插件开源了
赞助推荐 低成本上手 Claude Code 的中转选择
赞助推荐 低成本上手 Claude Code 的中转选择

相关推荐

  • 暂无文章
赞助推荐 一键部署 AI 大模型
赞助推荐 一键部署 AI 大模型