Apa fitur paket Vim8 dan bagaimana saya harus menggunakannya?

108

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 ?

statox
sumber

Jawaban:

74

Pertama-tama, dokumentasi yang relevan dapat ditemukan :h packagespada 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:

  • The startfolder berisi plugin yang akan dimuat secara otomatis pada startup.
  • The optfolder berisi "opsional" plugin, sarat dengan packaddperintah.
  • Subfolder ( 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 startdan membuatnya opttersedia :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 helptagsperintah. Komit Vim8 memperkenalkan dua baris dalam helptagdokumen :

: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 ALLsemua helptag dihasilkan.

statox
sumber
11
Ringkasan yang bagus. The packagefitur dimaksudkan untuk akhirnya mengakhiri vimballs dan dinosaurus terkait, untuk tidak bersaing dengan manajer Plugin modern. Ini adalah pengganti yang layak pathogen, asalkan Anda tidak bergantung pada pathogenfitur yang lebih tidak jelas. Tidak ada upaya untuk mengganti, katakan Vundle,. 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.
Sato Katsura
2
Tidak terkait: Anda mungkin ingin menambahkan catatan tentang :helptags ALL.
Sato Katsura
1
@Sato, terima kasih atas catatan tentang vimballs: karena saya tidak pernah menggunakannya, saya tidak memahaminya, tetapi sekarang setelah Anda menyebutkannya sepertinya cukup jelas. Saya setuju dengan Anda tentang catatan "tidak ada yang akan menggunakannya" Saya tidak terlalu optimis tentang hal itu. Untuk :helptag ALLsaya akan melihat dan menambahkannya, terima kasih atas sarannya!
statox
Saya memindahkan diskusi di luar topik ke obrolan .
Martin Tournoij
4
minpac adalah manajer paket baru untuk Vim 8 (dan NeoVim). Itu dibangun di atas paket-paket Vim 8, memberikan perintah untuk updateplugin Anda atau cleanmereka (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.
nelstrom
11

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
Cam
sumber
4

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.

  1. Buat pack/*/startdirektori 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/startatau ~/.config/nvim/pack/bar/starttidak ~/.config/nvim/pack/start.

  2. Pergi ke pack/*/startdirektori dan klon paket di sana.

  3. Nyalakan n / vim dan lakukan :scriptnamesuntuk memeriksa apakah semuanya dimuat. Jangan khawatir jika tidak setiap bagian dimuat, karena beberapa file dimaksudkan untuk dimuat setelah kait, misalnya autoload/plugin.vim.
  4. Untuk menghapus instalasi, cukup hapus direktori tempat Anda mengkloning paket. Tidak perlu melakukan hal lain.
  5. Lakukan :helptags ALLuntuk 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 tagsfile 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.
klaus
sumber
2

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.

genotrance
sumber
Jika Anda memiliki beberapa mesin WINDOWS dan ingin konfigurasi yang sama ... FTFY
Dan J.