The Neovim Wiki has comprehensive instructions on how to install Neovim on various platforms. On OS X, you can install Neovim with homebrew:
brew install neovim
When I recorded this video, the Neovim homebrew formula was available via the Neovim tap. Back then, you had to run brew install neovim/neovim/neovim
. Since then, the Neovim formula has been added to Homebrew core, which makes installation slightly simpler.
Reusing Vim configuration
Vim’s runtime files are typically kept in a ~/.vim
directory.
Neovim uses the XDG base directory specification, which means that your configuration files are kept in a ~/.config/nvim
directory.
Whereas Vim usually looks for a configuration file at either ~/.vimrc
(or ~/.vim/vimrc
), Neovim looks for a file at ~/.config/nvim/init.vim
.
If you like, you can maintain a different configuration for Vim and Neovim. Alternatively, you can set things up in such a way that both editors use the same configuration files. The second approach allows you to try out Neovim with minimal disruption.
You can find advice on how to reuse your Vim configuration in Neovim by looking up :help nvim-from-vim
. First, create a config directory for Neovim:
mkdir -p ~/.config/nvim
Then create a ~/.config/nvim/init.vim
file with the following contents:
set runtimepath^=~/.vim runtimepath+=~/.vim/after let &packpath = &runtimepath source ~/.vimrc
This way, all runtime files and packages in ~/.vim
will be loaded by Neovim.
Any customisations you make in your ~/.vimrc
will now apply to Neovim as well as Vim.
Plugin compatibility
Neovim can run most Vim plugins just fine. As a general rule, if a plugin has been around since before version 8 of Vim came out, then you can be confident that it will work fine in Neovim.
The one area where you have to be cautious is with any plugin that uses job control to perform work asynchronously. Neovim came out with this feature first, way back in 2014. Vim released a similar feature with version 8, but the job control APIs are different. Some plugins offer async functionality whether you run them in Vim 8 or in Neovim, but some plugins may only work in one or the other. This problem doesn’t affect that many plugins since the job control functionality is relatively new, but it is something to watch out for.
Neovim can run any plugin written in Vimscript. But it also supports remote plugins, which can be written in any language. These run in a separate process, using remote procedure calls (RPC) to communicate with the neovim process. Remote plugins are a game changer for plugin authors.
On the wiki, there’s a list of plugins that exploit Neovim’s features, such as remote plugins and the built in terminal. I expect to see this list growing over time.
Case study: Unite and Denite
The Unite plugin by Shougo makes an interesting case study. This is a popular plugin, but it’s always been plagued by poor performance. It’s implemented in Vimscript, which is too slow for the kind of work that Unite does.
The author has given up on trying to fix these performance issues and started a new plugin called Denite. In Denite, all of the heavy-lifting is performed in a separate Python process. Denite does not yet support all of the features of Unite, but it performs much more snappily. If you want to extend the functionality of Denite, you can do so by writing your own plugin in Python. It’s a good showcase for Neovim’s remote plugins.