sublime text 原生不支持复选框交互,需依赖 plaintasks 插件实现状态切换;其要求文件后缀为 .todo/.tasks/todo、语法设为 plain tasks、任务顶格书写,快捷键 ctrl+d 切换状态,ctrl+shift+a 归档。

Sublime Text 默认不支持复选框交互,必须靠插件解析
Sublime Text 自带的 Markdown 渲染器(比如通过 Markdown Preview)只做静态展示:- [ ] 和 - [x] 能显示成方框和勾,但点不动、切不了状态。这不是你配置错了,是它根本没这个能力。真要“打勾”,得让插件把文本行当任务项来识别、绑定点击逻辑——而原生 Markdown 插件(MarkdownEditing、Markdown Preview)都不干这事。
PlainTasks 是 Sublime 里唯一能真正切换复选框状态的插件
别被名字误导:PlainTasks 不只是高亮 or 预览,它专为纯文本待办设计,能响应快捷键并实时改符号。但它对格式极其敏感,踩坑点集中在这几处:
- 文件后缀必须是
.todo、.tasks或全大写TODO;用.md就直接失效 - 新建文件后,必须手动设语法:按
Ctrl+Shift+P→ 输入Set Syntax: Plain tasks→ 回车;右下角显示 “Plain tasks” 才算生效 - 任务行必须顶格写,前面不能有空格或 Tab;缩进过的
- [ ] 买咖啡会被完全忽略 - 完成任务用
Ctrl+D(Mac 是Cmd+D),它会把[ ]替换成[x],不是加个 ✅ 符号 - 归档用
Ctrl+Shift+A,所有已勾选项会被移到文档底部Archive:下,不是删除
为什么装了 Markdown Preview 还是点不了复选框?
Markdown Preview 只负责把 .md 文件转成 HTML 并在浏览器里渲染,它不修改源文件、也不监听点击事件。即使你配了自动刷新("enable_autoreload": true),它也只响应保存后的变更,不会帮你把鼠标点击变成 [x] 写入磁盘。
常见错觉来源:
- 以为预览页里的方框是可交互控件 → 实际只是 img 或 CSS 伪元素,没绑定 JS
- 点了预览页的框,回头发现源文件没变 → 正常,它根本不往文件里写
- 导出 HTML 后复选框变回普通文字 → 因为导出时没启用 checklist 渲染器(
Markdown Preview默认关掉该功能)
别指望 GitHub/GitLab 同步勾选状态
你在 Sublime 里用 PlainTasks 打完勾,保存后推送到远程,GitHub 页面上确实会显示 - [x] 已完成 —— 但它永远不可点击。GitLab 更老的版本甚至可能把 [x] 当普通字符渲染成文字。
关键逻辑就一条:所有状态变更 = 修改文本 = 提交新 commit。没有后台服务、没有实时同步、没有跨编辑器状态共享。协作时容易出问题的点:
- 多人同时编辑同一份
TODO文件,各自勾选 → 合并冲突概率极高 - 误把
.todo提交到公开仓库 → 里面可能含个人进度、时间戳等敏感信息 - 用
@due(2024-06-15)但手输成@due(15/06/2024)→PlainTasks直接无视该行,不报错也不提示
最易被忽略的是:PlainTasks 的快捷键只在当前语法模式下生效。切换到其他文件或不小心切回 Plain Text 模式,Ctrl+D 就变成插入字母 d —— 看似没反应,其实是模式错了。











