The tools: Vim & vimwiki

Now that we have an idea of how to make smart notes with the Zettelkasten method, we need the tools to implement it.

There is software out there that aims to make Luhmann's principles easy to put into place. Sadly, they are proprietary. I am not a fan of using proprietary software, as I have said. I learned a hard lesson when I wanted to export my notes from OneNote to other text editors---it is cumbersome and the result not at all satisfactory. Moreover, when I switched from Windows to Linux, I lost access to a bunch of my notes, as the full desktop version of OneNote is not compatible with Linux and the online version cannot import them. Caveat emptor!

So, ideally we want a text editor that is as "free" as pen & paper, i.e. free in the sense that they give you the freedom to write and carry your notes wherever you feel like it. Surprise, surprise, my choice is Vim! As a bonus, Vim also comes *free* of charge! Vim comes in two versions: as a terminal or command-prompt application (my pick!) or with a graphical interface (for n00bs). In the following, I have the terminal version in mind.

Now, "vanilla" Vim (without any custom configuration) creates individual plain text files---like Notepad---that you then have to figure out where to put in your computer's directory. That's obviously not what we are looking for. However, the beauty of Vim is that it is incredibly extensible by means of *plugins*. One such plugin is *vimwiki*, and it allows Vim to act as a personal wiki (think "Wikipedia"). Essentially, starting from an appropriately named file, vimwiki allows you to convert some selected text into a hyperlink, which upon clicking it automatically creates a new file. This is exactly what we want!

Vimwiki's default language is the wiki flavor of markdown. (For those not in the know, markdown is a way to mark where the formatting will go in a plain text file by means of special characters. For example, to mark a word for (future) highlighting, you surround it with a pair of asterisks, like *this!* This forces you to separate content from presentation.) Wiki markdown files are easily convertible to HTML, in case you want to publish your notes on the web. However, in my case, I want my notes to be convertible into PDF, as well as HTML and other file formats. This is not possible with wiki markdown. However, that's not a problem! It's a simple matter of changing the language to *pandoc's* markdown in Vim's configuration file. Pandoc is a separate program from Vim (it's also free), and its sole purpose is to convert from and to different file formats. So once your Vim-based Zettelkasten system is written in pandoc markdown, you can use pandoc to convert your notes into a wide variety of other formats.

An additional benefit of pandoc markdown is that the markup for hyperlinks allows you to more clearly separate the title or description of the link from its URL. So the title may be a short description of the note you want to create, while its URL will be the aforementioned string of numbers representing date & time. If you don't want to have to manually insert the URL, you can create a key-binding in Vim's configuration file so that upon pressing your choice of key(s), the URL will get created and inserted automatically.

This post is not meant to be a technical guide on how to set up Vim or vimwiki+pandoc. It would take me too long to go over all the little tweaks you'd have to make in order to have a setup like mine. For instance, to get proper syntax highlighting you need to add two plugins, namely, vim-pandoc & vim-pandoc-syntax. You also need to tweak Vim's config file to get it to recognize the file's ".md" (markdown) extension. And to convert all your files at once (if you're not using the wiki flavor of markdown), you'd need to create a script (e.g. a makefile) that you would then feed to pandoc. That said, if you don't need to have your notes in any other format than plain text or HTML, just stick with the default vimwiki configuration! Your Zettelkasten implementation will not suffer one bit.

One feature, though, that you might want to add by way of plugin, regardless of your choice of markdown language, is a "fuzzy finder"---a console program to search for words inside the files of your ZK directory. This is what should replace the use of tags.

Now, I know I said that the heart of the Zettelkasten method is interlinking. So why do we need a fuzzy finder? Well, as your "slip box" grows into the hundreds or thousands of notes (Luhmann reached an astounding 90,000 index cards!), interlinking becomes a real chore. While copy-pasting a file's URL onto other notes is easy enough, eventually due to the growing number of notes, this process takes more and more time. There is the risk of not following through (I'm guilty of this) and leaving notes without links, which then become orphans and are forgotten. At some point, a fuzzy finder becomes a necessity. Still, the search capability can never replace manually linking the notes. In fact, it is just a means to this specific end.


Vimwiki [HTTPS]

Pandoc [HTTPS]


Emacs is another great "text editor" that you can use to create your Zk. It is also free in both senses of freedom and free of charge.

There are a few "modes", such as Emacs Muse, that allow you to work with a wiki. It might even be easier with Emacs to convert to and from different file formats, view your notes in an embedded PDF viewer/web browser, organize a bibliography natively, etc. The only reason I don't use Emacs is that I've been using Vim for over 2 years now, and I've grown accustomed to its keybindings and workflow. I have been tempted to tinker with Emacs, but for me at this point the learning curve is simply too steep (steeper than Vim). If I can comfortably manage my Zk with Vim, I do not see the need to make the switch. I'm also a follower of the KISS principle (Keep It Simple, Stupid), and Vim is a much, much simpler *text editor*, while Emacs is almost a whole operating system unto itself.


Does this sound like too much work? Well, it should! The point of the Zettelkasten is not to eliminate knowledge work but to augment it. Interlinking reinforces active recall, fosters the active association of ideas, helps with writing (you are distilling ideas into publishable form after all!), etc. Yes, it might seem as if OneNote, Evernote, Joplin, etc. are easier in that you don't have to worry about all of this interlinking. But their ease of use is deceptive. Remember how often they are employed as dumping grounds for disconnected thoughts and media files. Such bad habits will never lead to real, connected knowledge. Most of the time you just write and forget it. Also, going through the trouble of interlinking might seem too cumbersome, but it's nothing compared to the *real* problem of getting stuck in the rigid frames of knowledge categorization.

Using Vim to implement the Zettelkasten method has enhanced my ability to create good notes enormously. If I compare my workflow in Vim to when I used OneNote, the difference is night and day. It's *that* good! However, the transition is not easy. There is a steep learning curve. But all of this is part of knowledge work. As a knowledge worker, you have to cast aside the idea that your tools will, by themselves, lead you to your ultimate goal. That is a trap. So, be weary of (proprietary) software that promises too much!

I hope this little guide made any sense and will be of some help to you. Regardless of whether you use Vim, I strongly encourage you to delve into the rabbit hole that is the Zettelkasten method. If you truly want to make good, quality notes with the aim of building up a knowledge base, no other method can compare!

Back to the Index