For a long time, the best way to manage Vim plugins was to use a third party manager such as Pathogen, Vundle or vim-plug. Vim 8 (and therefore Neovim) has introduced a convenient (enough) way to manage them natively, but only relatively few people use it because:
First of all, let's make clear that the native management method is neither strictly superior or inferior to the use of plugin managers. It's advantages are that it requires no special installation, is more stable and offers more granular control. On the other hand, it doesn't provide a fancy UI or convenient commands to install/update everything at once and generate helptags.
So if you want to cut down on dependencies, avoid downloading random software and have a minimal, stable setup, you might want to try going without an external plugin manager.
Plugins can be put anywhere in the packpath
(type :set
packpath
to print it). By default, it includes ~/.vim/
in
Vim, and ~/.config/nvim/
and ~/.local/share/nvim/site/
in Neovim (unless you messed with your XDG environment variables).
Within those paths, the plugins must be put in pack/*/start/
or
pack/*/opt/
. It doesn't matter what the wildcard matches, so just
use plugins
or something. Plugins put in start/
are
automatically sourced after the user's config whereas the ones in
opt/
are optional and therefore only loaded on demand.
To explicitely load a plugin, simply use packadd plugin-name
, where
plugin-name
is the name of the directory in which the plugin is
stored. To load all plugins at once, use packloadall
.
To lazy load plugins, simply put them under opt/
and use either
an autocommand
or ftplugin
(i.e. call
packadd
from some after/ftplugin/*.vim
in your
runtimepath
).
You can get plugins any way you want, like manually downloading them, git
cloning them or using git submodules. For one-time installs, I recommend simply
putting them them in ~/.local/share/nvim/site
. If you keep your
configuration in version control, then I recommend using git submodules in
~/.config/nvim/
. In both cases, you can control which version you
use for each plugin and don't need to bloat your dotfiles repo.
Helptags are not automatically generated when plugins are loaded, so you wont
have tab completions when looking for documentation for your plugins and won't
be able to use tag features in their help files. To generate them for all
plugins at once, just use :helptags ALL
.