The workflow behind my 637-day journaling streak
I'm addicted to text files and Vim.
I've written a journal entry every single day since January 1, 2024, and I'm still going in the "big 2025" (or whatever the kids say). They are all .txt
files, which is pretty wonderful, because I can do a lot of cool hacker-type things with text files:
Reading through them
To read through all of my journal entries, I cd into ~/Documents/journalEntries/
and run vim *
. My journal entries have the format yyyy.mm.dd.txt
, which is nice because the default alphabetical sort also sorts the files in chronological order.
In my case, vim *
instantly readies every one of the 637 journal entries I've written so far.[1] Then I run the following in command mode:
:nnoremap n :n<CR>
:nnoremap N :N<CR>
Now my life is wonderful. Once I'm done reading 2024.01.01
's entry, I can just press n
to read 2024.01.02
's entry. Then I can hold n
until I find another entry that I want to read. If I find myself at 2024.05.21
's entry and want to read an earlier entry, I can press N
until I get to the one I want.
The n
and N
keys even support prepended numbers. If I want to jump 50 days ahead, I can press 50n
. If I just want to read about my Mondays, I can keep pressing 7n
. Jump to the first/last journal entry? :first/:last
.
Isn't that so efficient?
Searching through them
I have this handy command in my .zshrc
:
search() {
grep -rni --color=always "$*" ~/Documents/journalEntries \
| sed "s|$HOME/Documents/journalEntries/||" \
| less -R
}
So when I want to find the last time I got a haircut, hung out with friend John Doe, or listened to Dua Lipa, I can run:
search haircut
search John Doe
search Dua Lipa
and get highlighted results instantly. I bet your journaling app can't do that! But there are cooler thingsāfor example, I've written a Python script[2] that lets me visualize how often I mention a certain search term over time. I can specify a search term and get this cool graph as output:
-
Query:
minecraft
. I quit Minecraft in early July 2025. -
Query:
london
. Can you guess when I went on a family trip to London? -
Query:
pickleball
. I should play moreāI haven't since March!
It's so cool that I can make graphs like that.
Quickly editing them
The main reason I've been able to keep a 637-day journaling streak is not because of my willpower. It's because the friction is almost zero: I can edit my journal within 2s any time I'm on my computer[3], and I can write my journal entries using Vim.
I've used Vim so much now that if I try to write in a Google Doc like a normal, sane human, I end up writing gibberish all over the page trying to use Vim keybinds. I am addicted to using Vim, and that's not necessarily a bad thing, because I feel that I'm much more productive. But now I can't not use Vim. Sylvan Franklin said it best:
When you learn Vim, it's kind of the same thing as getting married or having a kid. It's really awesome and life-changing, but once it happens, you can't really go back to how it was before. So if you try to switch to something elseālike, say, not having a kidāyou just can't do it.[4]
I guess I'm stuck with plaintext files for journaling. No fancy apps for me. But I'm very happy with my setup. Only 363 more days and then I can celebrate 1000 consecutive days: a four-digit streak milestone!
Vim is incredibly performant. ā©ļø
With the help of ChatGPT to write all the matplotlib boilerplate. ā©ļø
<CMD> <SPACE> <t><e><r><m> <ENTER> <e><d><j> <ENTER>
ā©ļølink: Sylvan Franklin: Replacing google docs with vim ā©ļø