I keep a todo list on my computer, which contains tasks for work and home. It also contains items where I’m waiting for someone to do something, and I use it as a scratchpad for bits of pertinent information that might be useful in the near future. The file is written in Markdown . Items in the list are written as bullet points (-), and sometimes I group items together under headers (#). Sometimes I have headers for each day of the week, and sometimes for a particular project I’m working on. The bullet point list of tasks is sometimes nested to include extra information about each task, or to add subtasks below a main task.
I’ve known about the todo.txt
file format for a long time, and I see the logic in it. todo.txt is very flexible and has a number of optional features. You can specify due dates and creation dates (2022-05-05
, due:2022-05-05
), prioritise tasks using a letter system ((A)
, (B)
), group tasks by project (@project
) or context (+context
), mark tasks as done ([ ]
, [x]
) and optionally move completed tasks to a separate done.txt
file. In my current system I already move tasks to “done” files, one per day, and I often add creation dates and due dates, especially on tasks where I’m waiting for someone to do something.
The thing that has always put me off using todo.txt is the inability to add longer descriptions or subtasks to a task. Each task must occupy a single line. I also like having the ability to group tasks under headers as this allows me to plan my time, but todo.txt requires each line to be a task. Whenever I’ve dabbled with todo.txt in the past, it’s always given me tunnel vision, making it so I can only focus on the next few short tasks ahead of me, at the expense of understanding the wider context of my work. That being said, I would like to start making use of the context and project tags from todo.txt to organise tasks in my todo.md
file.
I do most of my task management in neovim
. I wrote some syntax highlighting rules to extend the basic Markdown syntax highlighting in vim, by placing a file at ~/.config/nvim/after/syntax/mardown.vim
. The file contains:
syntax match TodoDate '\d\{2,4\}-\d\{2\}-\d\{2\}'
syntax match TodoDue 'due:\d\{2,4\}-\d\{2\}-\d\{2\}'
syntax match TodoProject '\(^\|\W\)+[^[:blank:]]\+'
syntax match TodoContext '\(^\|\W\)@[^[:blank:]]\+'
highlight default link TodoDate Type
highlight default link TodoDue Constant
highlight default link TodoProject Comment
highlight default link TodoContext Statement
So when I open my todo.md
it looks like this: