Recently, I decided to look for new tools to improve my work efficiency, and very early in the endeavor to find new and better tools, I came across the fairly recent Neovim project. The aim of Neovim is to accomplish a full re-factoring of the source code of Vim, one of the oldest and most popular extensible text editors; this is sort of a big deal because Vim has historically been maintained only by its creator Bram Moolenaar, and not every change made to Vim has been done in a forward-thinking manner. Without going too much into why Vim – and similar tools like Emacs and GitHub’s much newer Atom – are so great, I just wanted to talk about a few of the features of Neovim, and why I would recommend anyone currently using Vim to at least give it a try.
Now, I’ve only been using Vim for about a year (and my adoption of Vim was
mostly motivated by a desire to work easily remotely), but in that relatively
short period (that is, some people have been using Vim for ~30 years), a few
problems became apparent to me. The three major problems I ran into were, in
reverse order of importance, (3) The lack of a nice GUI can make Vim hard to use
at times which, (2) It can be quite difficult to set up a productive customized
Vim of your own, and (1) Using Vim makes learning other tools like tmux
necessary if you want a productive and flexible work environment.
These problems made my use of Vim inconsistent and less productive than it could have been – but, once I moved over to Neovim, nearly all of these problems were solved, in part because I adopted a few new Vim packages along the way.
Problem 3: Vim doesn’t have a nice UI (unlike Sublime and Atom)
Right, Vim doesn’t have a nice, futuristic looking layout…but, does this
really matter all that much? I made extensive use of the Atom editor (and still
really enjoy using it), but I discovered that the consistency offered by using
Neovim really makes up for this. What I mean here is that, while I can use tools
like Atom (with its really nice and shiny UI) on both my MacBook and Chromebook
(after setting up Linux on the latter), I can’t make easy use of Atom when
working remotely via ssh
. While I’m sure there are solutions to this, the one
easiest to implement was to simply adopt Neovim as my main tool, and, really,
some of the Vim packages out there make me question why I bother to use other
tools entirely…
Problem 2: setting up a productive Vim environment is hard
There are some great packages managers written for use with Vim out there. When
I was still using Vim, I used
pathogen
, since it is well known and
relatively easy to use. When I switched to Neovim, I started using the newer
vim-plug
, which is an awesome, if
minimalist, manager for Vim plugins. vim-plug
lets you easily install, update,
and remove packages without dealing with keeping them as git submodules, which
you would have to do if using Git with your Vim pathogen
setup (you should of
course use Git, though git submodules can be a pain to learn). After adopting
this new plugin manager, a number of really cools tools can be easily added to
your Neovim setup – a couple of my favorites are
vim-airline
and
ctrlp.vim
.
Problem 1: a productive Vim environment requires tmux
…not with Neovim. In fact, one of the main features that drew me to Neovim in
the first place was that it comes with a full terminal emulator implementation
built in. This fact alone, and how easy it is to set up a tools for having a
multiplexed setup, makes Neovim an easy choice over Vim. The fact that there is
a built-in terminal emulator that is easily modifiable means that numerous tools
can be built on top of this (one of these being the really cool
Nvim-R
, which lets you generate
interactive R sessions linked to Neovim editor buffers). What’s more, this whole
setup does not require learning how to use tools other than Neovim (as I’ve
mentioned, doing this with Vim would require using the incredibly painful
tmux
). As an added bonus, after setting up a working Neovim configuration, I
have been able to use exactly the same tool on OSX, Linux Ubuntu, and various
remote hosts that I routinely work on (and I think it should work mostly the
same on any UNIX environment).
Anyway, my main point here is just that Neovim is awesome, and if you haven’t given it a try, you owe it to yourself to at least experiment with it. Here, look, my entire Neovim setup is basically just two scripts!