Vim 8 został wydany dzisiaj, a informacje o wydaniu wspominają o nowej funkcji „pakietu”. Co to jest i jak go używać?
Co najważniejsze, czy zastępuje starych dobrych menedżerów wtyczek ?
Vim 8 został wydany dzisiaj, a informacje o wydaniu wspominają o nowej funkcji „pakietu”. Co to jest i jak go używać?
Co najważniejsze, czy zastępuje starych dobrych menedżerów wtyczek ?
Odpowiedzi:
Po pierwsze, odpowiednią dokumentację można znaleźć :h packages
w nowo skompilowanej wersji Vim8 i tutaj na Github .
Pierwsza ważna uwaga dotyczy słownictwa: w Vim8 pakiet jest zdefiniowany w następujący sposób:
Pakiet Vima to katalog zawierający jedną lub więcej wtyczek.
Oznacza to, że nowy menedżer pakietów został stworzony, aby pomóc użytkownikom w zarządzaniu wszystkimi wtyczkami w tym samym archiwum. Dokument przedstawia następujące zalety:
Pakiet można pobrać jako archiwum i rozpakować we własnym katalogu. Dlatego pliki nie są mieszane z plikami innych wtyczek. Ułatwia to aktualizację i usunięcie.
Pakiet może być repozytorium git, mercurial itp. To sprawia, że aktualizacja jest naprawdę łatwa.
Pakiet może zawierać wiele wtyczek, które są od siebie zależne.
Pakiet może zawierać wtyczki, które są automatycznie ładowane podczas uruchamiania i te, które są ładowane tylko w razie potrzeby z
:packadd
.
Pomysł polega więc na utworzeniu folderu zawierającego wszystkie wtyczki o następującej strukturze:
$HOME/.vim/pack/my-plugins/
start/
foo/
plugin/
foo.vim
syntax/
some.vim
bar/
plugin/
bar.vim
opt/
buzz/
plugin/
buzz.vim
Położenie folderu określa opcja packpath
(patrz :h 'packpath'
).
Zwróć uwagę na znaczenie struktury folderu:
start
Folder zawiera pluginy, które zostaną załadowane automatycznie przy starcie.opt
Folder zawiera „opcjonalne” wtyczek, załadowane z packadd
poleceniem.plugin
, autoload
, doc
, ...) są te masz w zwyczaju w wtyczek.Oto podsumowanie folderów:
start/foobar/plugin/foo.vim " always loaded, defines commands
start/foobar/plugin/bar.vim " always loaded, defines commands
start/foobar/autoload/foo.vim " loaded when foo command used
start/foobar/doc/foo.txt " help for foo.vim
start/foobar/doc/tags " help tags
opt/fooextra/plugin/extra.vim " optional plugin, defines commands
opt/fooextra/autoload/extra.vim " loaded when extra command used
opt/fooextra/doc/extra.txt " help for extra.vim
opt/fooextra/doc/tags " help tags
Gdy te pliki znajdą się we właściwym miejscu, otwarcie Vima załaduje wtyczki start
i udostępni te opt
z :packadd
.
Czy ta funkcja może zastąpić istniejących menedżerów wtyczek?
Oświadczenie: Ta część może być nieco uparta.
Myślę, że podejście tego nowego menedżera pakietów jest naprawdę inne niż menedżera wtyczek, do którego byliśmy przyzwyczajeni, ponieważ jest stworzony do zarządzania jednym (lub kilkoma) archiwami zawierającymi niektóre wtyczki.
Po wyjęciu z pudełka menedżer pakietów nie udostępnia funkcji aktualizowania wtyczek jeden po drugim, automatycznego pobierania ich z adresu Github lub wybierania wtyczek, które chcesz włączyć / wyłączyć.
Nie jestem pewien, czy naprawdę wygodne będzie używanie go od razu po wyjęciu z pudełka (szczególnie dlatego, że obsługa zagnieżdżonych repozytoriów kontroli wersji może być bolesnym zadaniem), ale może jest to okazja, aby zwiększyć efektywność menedżerów wtyczek?
Teraz można również wyobrazić sobie przeniesienie istniejących wtyczek w celu dostosowania struktury wymaganej przez menedżera pakietów i zarządzania nimi bezpośrednio z systemu plików. Być może zostanie utworzone opakowanie do korzystania z tej nowej funkcji.
EDYCJA Zgodnie z sugestią @Sato Katsura tutaj jest notatka dotycząca helptags
polecenia. Zatwierdzenie Vim8 wprowadziło dwie linie w helptag
dokumencie :
:helpt[ags] [++t] {dir} Generate the help tags file(s) for directory {dir}. When {dir} is ALL then all "doc" directories in 'runtimepath' will be used.
Co oznacza, że nowy menedżer pakietów ułatwia generowanie helptagów umieszczanych w archiwum użytkownika. Za pomocą jednego polecenia :helptags ALL
generowane są wszystkie helptagi.
:helptags ALL
.
:helptag ALL
zobaczenia i dodam, dzięki za sugestię!
update
wtyczek lub clean
ich (usuwając nieużywane wtyczki). W przypadku punktów bonusowych wykorzystuje także nową funkcję kontroli zadań do wykonywania wielu aktualizacji równolegle. Myślę, że to naprawdę obiecujące, ponieważ ulepsza wbudowane pakiety o lepszy UX.
Aby rozwinąć „czy może zastąpić menedżerów wtyczek”,
Kiedyś korzystałem z Vundle, co było fantastyczne, ale teraz zastąpiłem go około 18 liniami bash.
Uważam, że przydatne jest używanie podfolderów w katalogu pack do grupowania powiązanych wtyczek. Np. „Składnia” lub „Ruby”.
Odpowiedni przykład bash znajduje się poniżej. Umieść w pliku i uruchom go.
Dodatkowa dyskusja na ten temat pod adresem : https://stories.abletech.nz/get-rid-of-your-vim-plugin-manager-7c8ff742f643#.abnjauzgk
#!/usr/bin/env bash
# This file lives in ~/.vim/pack/install.sh
# Remember to add executable: chmod +x ~/.vim/pack/install.sh
#
# 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
Odpowiedź udzielona przez @statox jest bardzo opisowa, ale dla nowego użytkownika może być rozpraszająca, ponieważ może on bezpośrednio odczytać plik pomocy. Chcę nakreślić, co musisz zrobić we wskazówkach.
Utwórz pack/*/start
katalog w dowolnym katalogu podanym przez set packpath
. Zrobiłem to ~/.config/nvim/pack/*/start
. Pamiętaj , że możesz użyć dowolnej nazwy katalogu zamiast, *
ale nie możesz jej całkowicie pominąć, nie wiem dlaczego. Na przykład możesz użyć katalogu ~/.config/nvim/pack/foo/start
lub ~/.config/nvim/pack/bar/start
nie ~/.config/nvim/pack/start
.
Przejdź do pack/*/start
katalogu i sklonuj tam pakiet.
:scriptnames
sprawdź, czy wszystko jest załadowane. Nie martw się, jeśli nie każda część jest załadowana, ponieważ niektóre pliki mają być ładowane po pewnym zawieszeniu, np autoload/plugin.vim
.:helptags ALL
generować tagi dla wszystkich dokumentów pomocy. Wykonaj w :helptags {dir}
celu wygenerowania tagów dla dokumentów pomocy w katalogu dir
. Na przykład, jeśli wstawisz wtyczkę ~/.config/nvim/pack/foo/plugin_name
, to zrób :helptags ~/.config/nvim/pack/foo/plugin_name/doc
. To wygeneruje tags
plik w katalogu doc wtyczki. Jeśli usuniesz wtyczkę z katalogu, plik znaczników zniknie, a vim nie znajdzie pliku pomocy, więc nie musisz ręcznie odinstalowywać pliku doc.Nowy format można traktować jako ekwiwalent Pathogenu, więc nadal jest miejsce dla menedżera, który może pobrać żądane wtyczki. Jest kilku nowych menedżerów wtyczek, którzy wykorzystują ten nowy format paczki, ale nadal stworzyłem Vire, ponieważ pozostawiają ci problemy z zarządzaniem nimi vimrc
. Jeśli masz wiele komputerów i chcesz mieć taką samą konfigurację w całej sieci, Vire sprawia, że jest to bardzo łatwe.
package
funkcja ma wreszcie położyć kres vimballom i pokrewnym dinozaurom, a nie konkurować z nowoczesnymi menedżerami wtyczek. Jest to realny zamiennikpathogen
, pod warunkiem, że nie polegasz napathogen
bardziej niejasnych funkcjach. Nie próbuje, powiedzmy, zastąpićVundle
. Koncepcja pakietu jako kolekcji wtyczek jest dobrze przemyślana i potencjalnie przydatna, ale obawiam się, że nikt go nie użyje, ponieważ współczesni menedżerowie wtyczek go nie obsługują. A menedżerowie wtyczek nie będą go obsługiwać, ponieważ nikt go nie używa. To trochę problem z kurczakiem i jajkiem.