Отървете се от вашия мениджър на плъгини Vim

С появата на Vim 8.0 вече има собствен начин за добавяне на плъгини (сега наричани пакети), така че можете най-накрая да се отървете от вашия мениджър на пакети Vundle/Pathogen/<insert flavour here>.

Аз съм щастлив потребител на Vundle от няколко години, но възможността да опростя конфигурацията си винаги е добре дошла.

Ако сте използвали Pathogen преди, ще намерите естественото управление на пакети на Vim 8 за интуитивно.

Просто поставете пакета си в път към директория по следния начин:

~/.vim/pack/<package group>/start/<your package>

Каква е тази папка start? Радвам се, че попитахте... Има две възможни папки, които можете да имате на това ниво.

  1. Папката start съдържа пакети, които се зареждат при стартиране на Vim.
  2. Папката opt съдържа „незадължителен“ пакет, който не се зарежда, но може да бъде зареден по избор с помощта на :packadd packagename във Vim.

Но Vundle ми липсва...

Ако управлението на вашите пакети с помощта на git подмодули не звучи забавно (и не е, според мен), с няколко реда bash можем да получим скрипт, който ще инсталира или актуализира вашите пакети. Точно като Vundle, но по-бързо!

Винаги намирам пример най-лесно, така че вижте по-долу. Двата метода в горната част са цялата функционалност за инсталиране и актуализиране на мениджъра на пакети!

На моята машина този файл се намира на: ~/.vim/pack/install.sh и стартирането му актуализира съществуващи пакети и инсталира нови. Много е бързо! Добавянето на нов пакет е един ред в този файл, така че според мен не съм загубил нищо от удобството на Vundle.

#!/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 ruby
package https://github.com/tpope/vim-rails.git &
package https://github.com/tpope/vim-rake.git &
package https://github.com/tpope/vim-bundler.git &
package https://github.com/tpope/vim-endwise.git &
wait
) &
(
set_group syntax
package https://github.com/kchmck/vim-coffee-script.git &
package https://github.com/tpope/vim-markdown.git &
package https://github.com/ap/vim-css-color.git &
wait
) &
(
set_group colorschemes
package https://github.com/altercation/vim-colors-solarized.git &
wait
) &
wait

Има малко баш, което може да е непознато:

  • ( <set_group and package invocations> ) & Това стартира нов подобвивка, така че можем да извлечем всички тези пакети бързо!
  • wait магическата ключова дума, която казва на bash да изчака, докато всички подобвивки завършат, преди да продължи. Bash ще изчаква само подчерупки, които са пряко дете на текущия процес, следователно защо имаме нужда от това извикване във всяка от нашите подчерупки, за да изчакаме всяко package извикване да завърши, преди да продължим.

Е, надявам се това да ви вдъхнови да насочите вашия мениджър на пакети и да преминете към по-родно изживяване на Vim! Намаляването на зависимостите винаги се чувства добре.

Можете да разгледате пълната конфигурация на Vim тук: https://github.com/camfowler/vim