todo.txt 简明教程

todo.txt 是一种使用纯文本形式来表示 TODO 清单的一个格式,考虑对其进行一些了解。然后也学习一下 todo.txt-cli 的使用,它是一个使用 shell 去实现的,控制台的 todo.txt 文件管理脚本。

并考虑再之后研究之后能否用 Scala 对todo.txt-cli的接口进行一个实现,并使用 OSS 作为存储以符合我的同步需求;用 Scala 的原因既是因为它足够好用,能让我去实践一下 FP,也是因为它能够编译成 js——我希望能在浏览器等平台上去运行它。

todo.txt

todo.txt 使用纯文本形式来保存 TODO 清单,其最重要的规则是,一行一个 TODO,它的语法如下。

x (A) 2022-05-16 2022-05-01 learn SpringMVC +chapelShelving @chapel due:2016-05-30 可选 — 标识完成(必须为小写 x) 可选 -- 标识优先级(A-Z) 可选 -- 完成日期 可选 -- 创建日期 如果只出现一个日期,则认为是创建日期 描述和 tag(可选) tags 可以出现在任何地方, 名称由非空字符串组成 项目 tag 上下文 tag KV tag

todo.txt的格式是十分自由的,其设计初衷之一就是要求人类和机器均可读。对每一个 TODO,其有三个维度:

  1. 优先级:最重要的 TODO 要能够先出现,其通过(A-Z)的语法表示。
  2. 项目:TODO 应该能够从属于特定项目——人类解决复杂问题的方式就是将其分解为一个个更容易解决的子问题并着手解决。
  3. 上下文:一个 TODO 要在哪里,在怎样的情况下去完成,换句话说,TODO 的上下文,是需要能够表示的,这样就能让人去关注在当前能够去做的事情。(这似乎是某种称为 GTD,Getting Things Done 的哲学,之后去了解一番)

项目使用+语法去表示,上下文通过@语法去表示,两者都接受非空字符串作为名称,两者都可以出现任意次数。

比如,下面指定一个最高优先级的,处在学习项目的,上下文为下班后的 TODO:

1
(A) @下班后 +学习 Spring MVC

我感觉这并非是一个最佳实践——这个 TODO 太大了:学习?学哪个部分?使用还是原理?我认为,项目应当是“+learnSpringMVC”,描述应该是 “中的 blablala”,即:

1
(A) @下班后 +learnSpringMVC RestController

然后是 KV tag,这是供开发者去使用的 metadata,语法是key:value

todo.txt就这些东西…简单,但优雅。

todo.txt-cli

todo.txt-cli是官方提供的命令行下管理todo.txt的脚本,这里介绍它的使用。

安装

MacOS 和 Linux 可直接使用,Win 用户可使用 Git For Bash 等终端。

官方仓库 下载todo.shtodo.cfg,其中将todo.sh放置到 PATH 中(下面的示例将其改名为todo),将todo.cfg重命名为~/.todo.cfg,然后编辑.todo.cfg,将TODO_DIR变量修改为更合适的位置,比如export TODO_DIR=${HOME:-$USERPROFILE}/.todo(原配置放到用户目录,简直了!)

然后进行测试,输入todo add 'Hello, Happy World!',并检查~/.todo/todo.txt是否有数据。

示例

先创建测试“数据”,直接编辑todo.txt或者通过todo add命令:

1
2
3
4
5
(A) +健身 @早晨 @晚上 @楼下 各跳绳 500 个
(C) +英语 @晚上 完成扇贝阅读一篇文章
(A) +吉他 yousician 30 分钟
(B) +吉他 +辨识 200 个 note
+吉他 完成练习二
  • 列出所有 TODO:
    todo list(或者todo ls

  • 添加新 TODO:
    todo add '+吉他 爬格子'

  • 完成特定 TODO,其中 TODO 通过行号指定(在 list 时会显示):
    todo done 1(或者todo do 1

  • 删除特定 TODO:
    todo rm 1

  • 列出所有带字符串“完成”的 TODO:
    todo ls 完成

  • 列出所有带“完成”的 TODO:
    todo ls -完成

  • 列出所有项目或上下文:
    todo lsprj
    todo lsc

  • 列出所有带吉他项目的 TODO 中出现的项目:
    todo lsprj 吉他

先就这些。更多的不如去翻它的 文档