TITLE: Todo lists in Vim, syntax highlighting DATE: 2022-06-20 AUTHOR: John L. Godlee ==================================================================== 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. [Markdown]: https://daringfireball.net/projects/markdown/ 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. [todo.txt]: http://todotxt.org/ 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: [neovim]: https://neovim.io/ 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: ![Screenshot of todo.md showing syntax highlighting](https://johngodlee.xyz/img_full/todo/scrot.png)