VIM csomagkezelés howto

packages felirat

Az egyre több erre hajazó kiegészítő szinte messziről jövő segélykiáltásként szelte át az internet-étert egy beépített csomagkezelőért.

Így lehetett, hogy Vim 8-ban debütált a csomagok támogatása. github.com/vim/vim/blob/master/runtime/doc/repeat.txt#L471

Sajnos vagy nem sajnos jó ideje Neovim felhasználóvá avanzsáltam és minden informálódás nélkül leírtam, hogy ez a package manageres móka csak Vim-ben van, Neovimben nincs. Viszont a minap a Neovim git logot böngészve mintha erre utaló szavakat olvastam volna. A megérzésem jó volt, Neovimben is van Vim 8 csomagkezelő.

Megjegyzés: A csomagkezelő kifejezés nem a legmegfelelőbb, a Vim 8 packages a csomagok betöltését végzi, de nem telepíti őket.

VIM 8 package könyvtárstruktúra

A Vim 8 a telepítésért nem felel, csupán a csomagok betöltéséért. A csomagokat két módon lehet betölteni, mindig vagy ha kell. Tehát külön kezelhetjük azokat a csomagokat, amiket csak alkalmanként használnunk, (pl. különböző programnyelvek szintaxis definícióit) és külön azokat, amikre úgy általában szükségünk van (pl. buffer kezelést megkönnyítő pluginek).

  • $VIMHOME/pack/*/start
  • $VIMHOME/pack/*/opt

Ahol $VIMHOME $HOME/.vim ha Vim-et használunk és $XDG_CONFIG_HOME/nvim ($HOME/.config/nvim), ha Neovim-et.

A * helyére nagyjából bármit beírhatunk, kategorizálhatjuk őket. A migráció első körében egy my_plugins nevet használtam, ezt később érdemes felülbírálni.

A start könyvtárba azokat a plugineket tesszük, amikre mindig szükségünk van. Az opt könyvtárba azokat, amiket csak alkalmanként használunk. Azzal, hogy így szétválasztjuk a plugineket, sokat gyorsíthatunk a Vim indulásán.

Új parancsok

Ahhoz, hogy az opt könyvtárba került csomagokat betölthessük 2 új parancsot kaptunk:

  • :packadd <csomagnév> - Egyetlen csomagot tölt be
  • :packloadall - Az összes csomagot betölti

Migráció

Nosza, migráljunk!

Vopher

Korábban egy roppant buta eszközt használtam, a vophert Nem próbált mindenféle gondot megoldani, csak egyet. A pathogen mellé készült, ami nagyon rossz pluginek beszerzéséből (nem tudja), a vopher meg pont csak erre való: letölti a csomagokat és kicsomagolja őket. A vopher konfigurációja a csomag repository URL-ek listája.

Innen indultam ki, megvan a csomagok listája amit használok, azokat szeretném az új csomagkezelővel betölteni.

Az új csomagkezelő valamelyest rugalmasabb, mint a pathogen, ezért a vophert is lecseréltem.

Csomagok installálása

A vopher nagyon fapados, de mondhatjuk, hogy ha szükség volt rá, akkor gyorsan lehetett vele installálni és frissíteni is. De milyen jó lenne valami újat kipróbálni!

Gyakorlatilag az összes cikk a git submodule dolgok használatát írta, amikor próbáltam informálódni a csomagok installálásának mikéntjéről, tehát én is ezt az utat jártam meg.

Korábban már kalandoztam git submodule-okkal, de nem igazán jött át, hogy hogyan tudnám én azt hatékonyan használni, talán éppen a Vim csomagokkal próbálkoztam akkor is.

Tehát az alaphelyzet:

  • Van egy privát git repository-m, ahol egyebek mellett a vim konfigurációt is tárolom, egy vim nevű mappában.
  • Van egy file-om egy adag Github URL-lel.

A git submodule dokumentációjából (git-scm.com/docs/git-submodule) megtudhatjuk, hogy új submodule-t egy ördögi paranccsal tudunk a repóba tenni, aztán lehet is commitolni és pusholni:

git submodule add https://valahol.org/egy/csomag csomaghelye/csomag

Esetemben:

git submodule add https://github.com/akarki/valami.vim.git vim/pack/my_plugins/start/valami.vim
git submodule add https://github.com/akarki/barmi.vim.git vim/pack/my_plugins/opt/barmi.vim
git commit -m "Add vim plugins"
git push origin master

Ez alapján összeállítottam egy shell scriptet, ami a korábbi URL listát vette alapul. Utána töröltem a pathogen scriptet, kivettem a pathogen dolgát a vimrc-ből és már kész is volt az új plug-in rendszer.

Dokumentáció generálás

A csomagok installálása nem jelenti azt, hogy lesz hozzá rendes vimdoc is. Erre szolgál a :helptags <csomagneve|ALL> parancs.

Terminálból:

vim --cmd ':helptags ALL' —-cmd ':q'

Ha nem működne, indíts egy vimet és úgy add ki a parancsot

:helptags ALL

Modulok frissítése

Git submodule kezeli a csomagverziókat, azzal is fogjuk őket frissíteni:

git submodule update --init --recursive --remote
git add .
git commit vim 'update vim modules'

Modulok törlése

A git 1.8.5.2 óta roppant könnyű:

git rm vim/pack/my_plugins/opt/barmi.vim
rm -rf .git/modules/vim/pack/my_plugins/opt/barmi.vim

Hibák

A színséma valamiért nem akarja az igazat, ha start könyvtárba kerül, így azt a colors/opt könyvtárba tettem és külön töltöm be, a vimrc-ből.

packadd yowish.vim
colo yowish

Reprodukció

Ha mondjuk egy szűz gépen is fel szeretnénk használni.

git clone git@somewhere.com/me/dotfiles.git
cd dotfiles
git pull origin master
git submodule init
git submodule update

Lehet vimezni ott is!


A kép eredetije: https://www.flickr.com/photos/49889874@N05/4772680734/