nvim packages

Tuesday, Feb 23, 2021
#unix #rice #tips

neovim and vim8 now come with a built in package manager (or rather loader?) which is faster and simpler than nearly all previous attempts. You can read about it with :help packages. It works similarly to how pathogen worked in the past, it does not handle updating, removing, installing, or searching for packages. It simply loads them out of a folder and assumes you will manage them with git or another similar tool.

In neovim, there are a few options for where you store the package directory. I use .config/nvim/pack, which is right next to my init.vim. The structure of the pack directory is pack/*/start/repo with repo referring to a cloned repo for each of your packages. The star can be anything you’d like, but typically you would make a few different folders such as “themes”, “plugins”, or “syntax” to categorize your vim packages. The start folder is used to “autoload” the packages inside it. You may instead put them in an opt folder which will not automatically load them, but allows you to manually load them with :packadd packnamehere.

A shortened version of my directory looks like this.

~/.config/nvim/pack tree
.
├── plugins
│   └── start
│       └── ack
│           ├── autoload
│           │   └── ack.vim
│           ├── doc
│           │   ├── ack_quick_help.txt
│           │   └── ack.txt
│           ├── ftplugin
│           │   └── qf.vim
│           ├── LICENSE
│           ├── plugin
│           │   └── ack.vim
│           └── README.md
└── themes
    └── start
        └── black-pastel
            ├── colors
            │   └── black-pastel.vim
            ├── img.png
            ├── LICENSE.md
            └── README.md

I install and organize my packages using git submodules. First you’ll need to track your vim config directory with git, or you can do what I do and track all your configs with git and install them with stow. If you set things up like I have you can use the following commands.

To add a new package, cd into your “dots” repo and run something like this:

git submodule add https://github.com/tpope/vim-surround neovim/.config/nvim/pack/plugins/start/vim-surround

You may then use all the submodule commands for updating and deletion.

NOTE: You need to run git clone --recursive when you clone your dots onto a new computer.

git clone --recursive https://git.sr.ht/~kota/dots