<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tim's blog (Posts about vim)</title><link>https://blog.thechases.com</link><description></description><atom:link href="https://blog.thechases.com/categories/vim.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:blog@tim.thechases.com"&gt;Tim Chase&lt;/a&gt; </copyright><lastBuildDate>Tue, 16 Jun 2026 00:45:50 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Vim Knowledge Management</title><link>https://blog.thechases.com/posts/vi/vim-knowledge-management/</link><dc:creator>Tim Chase</dc:creator><description>&lt;p&gt;
Another installment of 
&lt;a href="https://lazybear.social/@hyde"&gt;@hyde&lt;/a&gt;'s
&lt;a href="https://lazybea.rs/carnivals"&gt;"Vim Carnival"&lt;/a&gt;,
this time asking,
"How do you use Neovim/Vim to build your knowledge management?"
&lt;/p&gt;

&lt;h2 title="Unstructured"&gt;Unstructured Data&lt;/h2&gt;

&lt;p&gt;
While boring,
I dump all my unstructured "knowledge" data in a simple
&lt;code&gt;notes.txt&lt;/code&gt;
file within my
"personal data/text files"
repo stored in
&lt;code&gt;git&lt;/code&gt;
for syncing between machines.
&lt;/p&gt;

&lt;p&gt;
This file contains a host
of random thoughts and web-clippings.
Disambiguations between words/spellings,
URLs to interesting things with minor annotations,
notes about VPS specs/pricing,
book recommendations,
some favorite jokes,
short poetry-snippets I've composed,
whatever…all tossed together
with timestamps.
&lt;/p&gt;

&lt;p&gt;
Typically I'll either
&lt;code&gt;grep -3&lt;/code&gt;
for things in the file
(including 3 lines of context)
or I'll open it in any
&lt;code&gt;$EDITOR&lt;/code&gt;
to search for things.
&lt;/p&gt;

&lt;p&gt;
I also have a keyboard shortcut
in my window-manager
(&lt;a href="https://fluxbox.org/"&gt;Fluxbox&lt;/a&gt;)
to launch a
&lt;a href="https://blog.thechases.com/posts/vi/vim-knowledge-management/#save"&gt;shell-script&lt;/a&gt;
that uses
&lt;code&gt;zenity&lt;/code&gt;
to prompt me for a description,
then appends the current date+time,
the one-line description,
and the contents of the clipboard
(using &lt;code&gt;xsel&lt;/code&gt;)
to this file.
&lt;/p&gt;

&lt;h2 title="structured"&gt;Structured Data&lt;/h2&gt;

&lt;p&gt;
Depending on the nature of the structured
usually specific tooling gets used to manipulate it.
&lt;/p&gt;

&lt;h3 id="addressbook"&gt;Address book&lt;/h3&gt;

&lt;p&gt;
I keep my personal address book in
&lt;a href="https://www.gnu.org/software/recutils/"&gt;GNU RecUtils&lt;/a&gt;
format.
This plain-text database format
easily lets me add new fields as I have need.
&lt;/p&gt;

&lt;figure&gt;
&lt;pre&gt;
# people
id: davesmith
household: smith
last: Smith
first: David
nickname: Dave
mother: alicesmith
father: bobsmith
dob: Apr 1 2015
note: in 5th grade class with S

id: alicesmith
household: smith
last: Smith
first: Alice
spouse: bobsmith
phone: 972.555.1212 (c)
phone: 817.555.1234 (h)
email: alice@example.net

⋮

# households
hid: smith
anniversary: Jun 10 2006
street: 3141 Oak St.
city: Anytown
state: PA
zip: 31415
&lt;/pre&gt;
&lt;figcaption&gt;a sample &lt;code&gt;addressbook.txt&lt;/code&gt; excerpt&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;
Most of the time,
I find it easiest to just open the file in my
&lt;code&gt;$EDITOR&lt;/code&gt;
and search for things there
when I need to look someone up.
But I have a few canned queries for doing things like
generating the email contact list for our Christmas email letter.
&lt;/p&gt;

&lt;h3 id="calendar"&gt;Calendar&lt;/h3&gt;

&lt;p&gt;
I use
&lt;a href="https://dianne.skoll.ca/projects/remind/"&gt;Remind&lt;/a&gt;
for calendar-related data.
Thanks to
&lt;a href="https://www.gnu.org/software/recutils/manual/recutils.html"&gt;&lt;code&gt;recsel&lt;/code&gt;&lt;/a&gt;
and a little
&lt;code&gt;awk&lt;/code&gt;
scripting,
I can generate
&lt;code&gt;remind&lt;/code&gt;
entries for
birthdays,
anniversaries,
adoptions,
memorials,
etc.
Then
&lt;code&gt;remind&lt;/code&gt;
can
&lt;code&gt;INCLUDE&lt;/code&gt;
the resulting files.
&lt;/p&gt;

&lt;p&gt;
For other appointments,
they go directly into the corresponding reminder files
&amp;amp;emdash;
one for me,
one for my wife, 
one for each kid individually, 
one for the kids combined,
one for the whole household,
one for work,
one for church,
…
&lt;/p&gt;

&lt;p&gt;
I have a
&lt;code&gt;cron&lt;/code&gt;
job that sends each day's
&lt;code&gt;remind&lt;/code&gt;
output to my email,
so I have a copy of the day's reminders and
&lt;a href="https://blog.thechases.com/posts/vi/vim-knowledge-management/#todos"&gt;todo items&lt;/a&gt;.
&lt;/p&gt;

&lt;h3 id="finances"&gt;Finances&lt;/h3&gt;

&lt;p&gt;
I track these as
&lt;a href="https://plaintextaccounting.org/"&gt;plain-text accounting&lt;/a&gt;
plain-text 
which allows me to manage my finances using
&lt;a href="https://www.ledger-cli.org/"&gt;&lt;code&gt;ledger&lt;/code&gt;&lt;/a&gt;.
&lt;/p&gt;

&lt;h3 id="todos"&gt;&lt;strike&gt;Todos&lt;/strike&gt;&lt;/h3&gt;

&lt;p&gt;
For a long time I kept todo items in
&lt;a href="http://todotxt.org/"&gt;&lt;code&gt;todo.txt&lt;/code&gt;&lt;/a&gt;
format,
and had a symlink for my
&lt;code&gt;~/.plan&lt;/code&gt;
so I could use
&lt;code&gt;finger(1)&lt;/code&gt;
from other machines to fetch my current todo list.
&lt;/p&gt;

&lt;p&gt;
That said, since
&lt;code&gt;remind&lt;/code&gt;
has grown todo-tracking functionality,
most of my todo items have moved into a 
&lt;code&gt;todo.rem&lt;/code&gt;
reminder file.
And I can express repeating todo-items a
&lt;strong&gt;lot&lt;/strong&gt;
more easily now.
&lt;/p&gt;

&lt;h2 title="closing"&gt;Closing&lt;/h2&gt;
&lt;p&gt;
But the best part of all of this?
&lt;strong&gt;It's all plain text.&lt;/strong&gt;
I store it in
&lt;code&gt;git&lt;/code&gt;
and can edit it with any editor,
whether
&lt;code&gt;vim&lt;/code&gt;,
&lt;code&gt;vi&lt;/code&gt;,
&lt;code&gt;ed(1)&lt;/code&gt;,
or even (as noted above)
generated by shell commands.
&lt;/p&gt;

&lt;hr&gt;

&lt;p id="save"&gt;
If interested, here's the shell-script

&lt;/p&gt;&lt;pre&gt;
#!/bin/sh
SAVE_FILE="$HOME/notes.txt"
DESC="$(zenity --title 'Enter description' --entry --text 'Enter description of clipboard contents')"
if [ -n "${DESC}" ]
then
 echo &lt;gt&gt;&lt;gt&gt; $SAVE_FILE
 date +"%Y-%m-%d %H:%M" &lt;gt&gt;&lt;gt&gt; $SAVE_FILE
 echo "${DESC}" &lt;gt&gt;&lt;gt&gt; $SAVE_FILE
 xclip -o -selection clipboard &lt;gt&gt;&lt;gt&gt; $SAVE_FILE
 echo &lt;gt&gt;&lt;gt&gt; $SAVE_FILE
fi
&lt;/gt&gt;&lt;/gt&gt;&lt;/gt&gt;&lt;/gt&gt;&lt;/gt&gt;&lt;/gt&gt;&lt;/gt&gt;&lt;/gt&gt;&lt;/gt&gt;&lt;/gt&gt;&lt;/pre&gt;</description><category>vi</category><category>vim</category><guid>https://blog.thechases.com/posts/vi/vim-knowledge-management/</guid><pubDate>Mon, 15 Jun 2026 19:06:39 GMT</pubDate></item><item><title>Vim Carnival: Motion</title><link>https://blog.thechases.com/posts/vi/vim-carnival-motion-changed/</link><dc:creator>Tim Chase</dc:creator><description>&lt;p&gt;
&lt;a href="https://lazybear.social/@hyde"&gt;@hyde&lt;/a&gt;
over on Mastodon
issued a call for
&lt;a href="https://lazybea.rs/carnivals"&gt;"Vim Carnival"&lt;/a&gt;
posts, with this month's topic suggesting
&lt;a href="https://lazybea.rs/vim-carnival-202606/"&gt;the
&lt;code&gt;vim&lt;/code&gt; motion that changed everything&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Buckle up, because you get not
&lt;strong&gt;one&lt;/strong&gt;
but
&lt;strong&gt;multiple&lt;/strong&gt;
motions that changed things.
&lt;/p&gt;

&lt;h2 id="boring"&gt;The Boring Motion(s)&lt;h2&gt;

&lt;/h2&gt;&lt;/h2&gt;&lt;p&gt;
While boring,
you get 6 motions for the price of one:
&lt;code&gt;f&lt;/code&gt;/&lt;code&gt;F&lt;/code&gt;/&lt;code&gt;t&lt;/code&gt;/&lt;code&gt;T&lt;/code&gt;
jump forward/backward
landing on
(or immediately short of)
a target character;
and
&lt;code&gt;,&lt;/code&gt;/&lt;code&gt;;&lt;/code&gt;.
to repeat that motion
in either the same or opposite direction.
I use these
&lt;em&gt;all. the. time.&lt;/em&gt;
And when I find myself using other
&lt;code&gt;$EDITOR&lt;/code&gt;s
that lack this functionality,
it feels so slow moving around horizontally.
&lt;/p&gt;

&lt;h2 id="epiphany"&gt;The Epiphany Motion&lt;h2&gt;

&lt;/h2&gt;&lt;/h2&gt;&lt;p&gt;
While simple, the
&lt;code&gt;H&lt;/code&gt;/&lt;code&gt;L&lt;/code&gt;
motions hold a special place in my
&lt;code&gt;vim&lt;/code&gt;-learning path.
Not so much the raw motions themselves
(which I had used quite regularly),
but because they represent a step in
&lt;code&gt;vim&lt;/code&gt;
intuition.
At one point I wanted to jump a couple lines
&lt;em&gt;below&lt;/em&gt;
the top line on the screen.
Without knowing whether they accepted a
&lt;code&gt;{count}&lt;/code&gt;
I instinctively issued something like
&lt;code&gt;4H&lt;/code&gt;
and to my delight,
it worked exactly as I had hoped/expected.
So rather than search
or use relative line-numbers
(which tend to get a bit laggy
over a slow or high-latency
&lt;abbr title="Secure Shell"&gt;SSH&lt;/abbr&gt;
connection)
I often find it easier to make a coarse jump
to an estimated line near the top/bottom of the screen
and adjust up/down a line or two if needed.
&lt;/p&gt;</description><category>vi</category><category>vim</category><guid>https://blog.thechases.com/posts/vi/vim-carnival-motion-changed/</guid><pubDate>Mon, 15 Jun 2026 18:25:24 GMT</pubDate></item></channel></rss>