Vim 8 dirilis hari ini dan catatan rilis menyebutkan fitur "paket" baru. Apa itu dan bagaimana saya harus menggunakannya?
Yang paling penting, apakah itu menggantikan manajer plugin lama yang baik ?
Vim 8 dirilis hari ini dan catatan rilis menyebutkan fitur "paket" baru. Apa itu dan bagaimana saya harus menggunakannya?
Yang paling penting, apakah itu menggantikan manajer plugin lama yang baik ?
Jawaban:
Pertama-tama, dokumentasi yang relevan dapat ditemukan :h packages
pada versi Vim8 yang baru dikompilasi dan di sini di Github .
Catatan penting pertama adalah tentang kosakata: Dalam Vim8 paket didefinisikan seperti ini:
Paket Vim adalah direktori yang berisi satu atau lebih plugin.
Ini berarti bahwa manajer paket baru dibuat untuk membantu pengguna mengelola semua plugin mereka di arsip yang sama. Doc mencantumkan keuntungan-keuntungan berikut:
Paket dapat diunduh sebagai arsip dan dibongkar di direktori sendiri. Dengan demikian file tidak tercampur dengan file dari plugins lain. Itu membuatnya mudah untuk memperbarui dan menghapus.
Paket dapat berupa repositori git, mercurial, dll. Itu membuatnya sangat mudah untuk diperbarui.
Paket dapat berisi beberapa plugin yang saling bergantung.
Suatu paket dapat berisi plugin yang secara otomatis dimuat pada saat startup dan yang hanya dimuat ketika diperlukan
:packadd
.
Jadi idenya adalah membuat folder yang berisi semua plugin dengan struktur berikut:
$HOME/.vim/pack/my-plugins/
start/
foo/
plugin/
foo.vim
syntax/
some.vim
bar/
plugin/
bar.vim
opt/
buzz/
plugin/
buzz.vim
Emplacement folder ditentukan oleh opsi packpath
(Lihat :h 'packpath'
).
Perhatikan pentingnya struktur folder Anda:
start
folder berisi plugin yang akan dimuat secara otomatis pada startup.opt
folder berisi "opsional" plugin, sarat dengan packadd
perintah.plugin
, autoload
, doc
, ...) adalah orang-orang yang Anda digunakan untuk di plugin.Berikut adalah rekap folder:
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
Setelah file-file ini berada di tempat yang tepat, membuka Vim akan memuat plugins start
dan membuatnya opt
tersedia :packadd
.
Sekarang, bisakah fitur ini menggantikan manajer plugin yang ada?
Penafian: Bagian ini mungkin sedikit dikemukakan pendapat.
Saya pikir pendekatan manajer paket baru ini benar-benar berbeda dari salah satu manajer plugin yang biasa kami gunakan karena dibuat untuk mengelola satu (atau beberapa) arsip yang berisi beberapa plugin.
Di luar kotak, manajer paket tidak menyediakan fitur untuk memperbarui plugin Anda satu per satu, untuk mengambilnya secara otomatis dari alamat Github atau untuk memilih plugin yang ingin Anda aktifkan / nonaktifkan.
Saya tidak yakin akan sangat nyaman untuk menggunakannya di luar kotak (terutama karena menangani repositori kontrol versi bersarang bisa menjadi tugas yang menyakitkan) tetapi mungkin ini adalah kesempatan untuk membuat pengelola plugin lebih efisien?
Sekarang mungkin juga membayangkan memindahkan plugin yang ada untuk mengadopsi struktur yang dibutuhkan oleh manajer paket dan mengelolanya langsung dari sistem file. Mungkin beberapa bungkus akan dibuat untuk menggunakan fitur baru ini.
EDIT Seperti yang disarankan oleh @Sato Katsura di sini adalah catatan tentang helptags
perintah. Komit Vim8 memperkenalkan dua baris dalam helptag
dokumen :
: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.
Yang berarti bahwa manajer paket baru memudahkan pembuatan tag bantuan yang dimasukkan ke dalam arsip pengguna. Dengan perintah tunggal :helptags ALL
semua helptag dihasilkan.
:helptags ALL
.
:helptag ALL
saya akan melihat dan menambahkannya, terima kasih atas sarannya!
update
plugin Anda atau clean
mereka (menghapus plugin yang tidak digunakan). Untuk poin bonus, itu juga menggunakan fitur kontrol pekerjaan baru untuk melakukan beberapa pembaruan secara paralel. Saya pikir ini sangat menjanjikan, karena meningkatkan paket bawaan dengan UX yang lebih baik.
Untuk memperluas pada "bisakah itu menggantikan manajer plugin",
Saya dulu menggunakan Vundle, yang fantastis, tetapi sekarang telah menggantinya dengan 18 atau lebih garis bash.
Saya merasa berguna untuk menggunakan subfolder dalam direktori paket untuk mengelompokkan plugin terkait. Misalnya "Sintaks" atau "Ruby".
Contoh bash yang relevan ada di bawah ini. Tempatkan dalam file dan jalankan.
Diskusi tambahan seputar topik di: 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
Jawaban yang diberikan oleh @statox sangat deskriptif, tetapi untuk pengguna baru yang dapat mengganggu, karena mereka dapat membaca file bantuan secara langsung. Saya ingin menguraikan apa yang perlu Anda lakukan dalam pointer.
Buat pack/*/start
direktori di bawah salah satu direktori yang disediakan oleh set packpath
. Saya melakukannya ~/.config/nvim/pack/*/start
. Perhatikan bahwa Anda dapat menggunakan nama direktori yang Anda inginkan *
tetapi Anda tidak dapat menghilangkannya sama sekali, saya tidak tahu mengapa. Misalnya, Anda dapat menggunakan direktori ~/.config/nvim/pack/foo/start
atau ~/.config/nvim/pack/bar/start
tidak ~/.config/nvim/pack/start
.
Pergi ke pack/*/start
direktori dan klon paket di sana.
:scriptnames
untuk memeriksa apakah semuanya dimuat. Jangan khawatir jika tidak setiap bagian dimuat, karena beberapa file dimaksudkan untuk dimuat setelah kait, misalnya autoload/plugin.vim
.:helptags ALL
untuk menghasilkan tag untuk semua dokumen bantuan. Lakukan :helptags {dir}
untuk membuat tag untuk dokumen bantuan di bawah direktori dir
. Misalnya, jika Anda memasukkan plugin ~/.config/nvim/pack/foo/plugin_name
, lakukan :helptags ~/.config/nvim/pack/foo/plugin_name/doc
. Itu akan menghasilkan tags
file di direktori doc plugin. Jika Anda menghapus plugin dari direktori, file tag akan hilang dan vim tidak akan menemukan file bantuan, jadi Anda tidak perlu menghapus instalan file doc secara manual.Format baru dapat dianggap sebagai setara dengan Patogen sehingga masih ada ruang bagi manajer yang dapat mengunduh plugin yang Anda inginkan. Ada beberapa pengelola plugin baru yang memanfaatkan format paket baru ini, tetapi saya masih membuat Vire karena mereka tidak bisa mengelola vimrc
. Jika Anda memiliki banyak mesin dan menginginkan konfigurasi yang sama, Vire membuatnya sangat mudah.
package
fitur dimaksudkan untuk akhirnya mengakhiri vimballs dan dinosaurus terkait, untuk tidak bersaing dengan manajer Plugin modern. Ini adalah pengganti yang layakpathogen
, asalkan Anda tidak bergantung padapathogen
fitur yang lebih tidak jelas. Tidak ada upaya untuk mengganti, katakanVundle
,. Konsep paket sebagai kumpulan plugin dipikirkan dengan baik dan berpotensi bermanfaat, tetapi saya khawatir tidak ada yang akan menggunakannya karena manajer plugin modern tidak mendukungnya. Dan pengelola plugin tidak akan mendukungnya karena tidak ada yang menggunakannya. Ini sedikit masalah ayam dan telur.