Skip to main content
Nathan Brown

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:

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!


  1. Vim is incredibly performant. ā†©ļøŽ

  2. With the help of ChatGPT to write all the matplotlib boilerplate. ā†©ļøŽ

  3. <CMD> <SPACE> <t><e><r><m> <ENTER> <e><d><j> <ENTER> ā†©ļøŽ

  4. link: Sylvan Franklin: Replacing google docs with vim ā†©ļøŽ