Title: How to Use Vim's Built-in Package Manager
Tags: vim
Many people use third-party Vim plugin managers like vim-plug, Vundle, Pathogen, etc.
I recommend just using the built-in package manager that was introduced in
[Vim 8.0](https://vimhelp.org/version8.txt.html) (released in 2016).
Here's a quick how-to...
See also: [`:help packages`](https://vimhelp.org/repeat.txt.html#packages)
Installing plugins and colorschemes
-----------------------------------
Here's how you'd install the [vim-commentary](https://github.com/tpope/vim-commentary)
plugin as a package:
```console
$ git clone https://github.com/tpope/vim-commentary.git ~/.vim/pack/plugins/start/vim-commentary
```
Now when you launch Vim the `commentary.vim` plugin will be loaded,
for example press gcc to comment or un-comment the current line.
If there's a way to install a plugin in an already-running instance of Vim
without quitting Vim and opening it again, I don't know how.
The plugin doesn't need to come from a git repo:
you can put any directory containing a Vim plugin in `~/.vim/pack/plugins/start/`
and it'll work.
Now let's add the [PaperColor](https://github.com/NLKNguyen/papercolor-theme) colorscheme,
the docs recommend putting colorschemes in `~/.vim/pack/*/opt` rather than
`~/.vim/pack/*/start`:
```console
$ git clone https://github.com/NLKNguyen/papercolor-theme.git ~/.vim/pack/colorschemes/opt/papercolor-theme
```
Restart Vim and the PaperColor colorscheme should be available,
run `:colorscheme PaperColor` to use it.
Installing plugins as "optional"
--------------------------------
It's also possible to install plugins as "optional" by putting them in an `opt`
directory instead of the `start` directory. Optional plugins aren't loaded
automatically when you start Vim, but you can manually load them in a given Vim
instance using the `:packadd` command. For example let's install
[copilot.vim](https://github.com/github/copilot.vim) as an optional plugin:
```console
$ git clone https://github.com/github/copilot.vim.git ~/.vim/pack/plugins/opt/copilot.vim
```
The plugin won't be loaded when you first launch Vim,
but you can load it when you need it by running `:packadd copilot.vim`
(`copilot.vim` here is the name of the ~/.vim/pack/plugins/opt/copilot.vim
directory that contains the plugin).
Generating the docs for plugins
-------------------------------
Many plugins come with documentation for viewing with Vim's `:help` command,
for example vim-commentary has a [`doc/commentary.txt`](https://github.com/tpope/vim-commentary/blob/master/doc/commentary.txt)
file.
At first after installing a plugin the plugin's documentation won't be available
in Vim. You have to generate it by running a `:helptags` command like this:
```
:helptags ~/.vim/pack/plugins/start/vim-commentary/doc
```
Now `:help commentary` should open vim-commentary's docs in Vim's built-in help system.
See [my post about Vim's built-in help]({filename}2020-08-02-how-to-use-vim's-built-in-help.md)
for how to use the help system.
You can also just run `:helptags ALL` to build the documentation for all
installed plugins.
Updating plugins
----------------
To update a plugin just replace the contents of its directory with the latest version.
If the plugin came from a git repo just `cd` into the plugin directory and run `git pull`:
```console
$ cd ~/.vim/pack/plugins/start/vim-commentary/
$ git pull
```
Packages can contain multiple plugins and colorschemes
------------------------------------------------------
Technically a Vim "package" is actually a collection of one or more plugins and
colorschemes that may depend on each other but I don't think anyone uses it
like that: I think everyone just installs each individual plugin or colorscheme
as a separate package as in the examples above.
The `~/.vim/pack/*` subdirs are arbitrary
------------------------------------------------
The directory names `plugins` and `colorschemes` that I used above are arbitrary:
you can organise your plugins and colorschemes into whatever `~/.vim/pack/*` subdirs you like.
You could put all your colorschemes and plugins together in a single `~/.vim/pack/foo/` directory.
Or you could organise them by author, for example `~/.vim/pack/tpope/` for all of Tim Pope's plugins.
It makes no difference.
I've decided to put all my plugins in a `plugins` directory
and all my colorschemes in a `colorschemes` directory 🤷
You do have to put each plugin and colorscheme in some `~/.vim/pack/*/start`
or `~/.vim/pack/*/opt` subdir,
putting them directly in `~/.vim/pack/start` or `~/.vim/pack/opt` doesn't work.