Przez lata swojej historii Vim dorobił się stada package mangerów. Od wersji ósmej, są one zbędne. Jest to za sprawą nowej obsługi pakietów.

W sumie to nie zmieniło się aż tak wiele. Vim od zawsze pozwalał użytkownikowi dodawać użytkownikowi dodatkowe pliki, w katalogach rzędu ~/.vim/colors, ~/.vim/plugin, ~/.vim/doc i tak dalej. Żeby zapanować nad wieloma dodatkami, mieszającymi swoje pliki w całym tym lesie, powstało niemało maszynerii. W wersji ósmej dodano opcję, by każdy dodatek miał swój katalog, a w nim swoje .../plugin, .../doc i co tam jeszcze.

Dzięki temu przestają sobie wchodzić w drogę. Więc można po prostu rozpakowywać paczki ściągnięte z Internetu. Albo jeszcze lepiej: po prostu używać kopii roboczych repozytoriów. Dzięki temu instalacje i aktualizację można osiągnąć takim skryptem (świeża wersja robocza z okazji Ubuntu pod Windows):

#!/usr/bin/env bash

# Create new folder in ~/.vim/pack that contains a start folder and cd into it.
#
# Arguments:
#   package_group, a string folder name to create and change into.
#
# Examples:
#   set_group syntax-highlighting
#
function set_group () {
  package_group=$1
  path="$HOME/.vim/pack/$package_group/start"
  mkdir -p "$path"
  cd "$path" || exit
}

# Clone or update a git repo in the current directory.
#
# Arguments:
#   repo_url, a URL to the git repo.
#
# Examples:
#   package https://github.com/tpope/vim-endwise.git
#
function package () {
  repo_url=$1
  expected_repo=$(basename "$repo_url" .git)
  if [ -d "$expected_repo" ]; then
    cd "$expected_repo" || exit
    result=$(git pull --force)
    echo "$expected_repo: $result"
  else
    echo "$expected_repo: Installing..."
    git clone -q "$repo_url"
  fi
}

(
set_group analyzers
#package https://github.com/vim-syntastic/syntastic.git &
wait
) &
(
set_group navigation
package https://github.com/ctrlpvim/ctrlp.vim.git &
package https://github.com/tpope/vim-unimpaired.git &
wait
) &
(
set_group status
package https://github.com/vim-airline/vim-airline.git &
package https://github.com/vim-airline/vim-airline-themes.git &
) &
(
set_group colorschemes
package https://github.com/altercation/vim-colors-solarized.git &
package https://github.com/sickill/vim-monokai.git &
wait
) &
wait