Tính năng gói Vim8 là gì và tôi nên sử dụng nó như thế nào?


Câu trả lời:


74

Trước hết, tài liệu liên quan có thể được tìm thấy :h packagestrên phiên bản Vim8 mới được biên dịch và ở đây trên Github .

Một lưu ý quan trọng đầu tiên là về từ vựng: Trong Vim8, một gói được định nghĩa như thế này:

Gói Vim là một thư mục chứa một hoặc nhiều plugin.

Điều này có nghĩa là trình quản lý gói mới đã được tạo để giúp người dùng quản lý tất cả các plugin của họ trong cùng một kho lưu trữ. Tài liệu liệt kê các ưu điểm sau:

  • Một gói có thể được tải xuống như một kho lưu trữ và giải nén trong thư mục riêng của nó. Do đó, các tệp không được trộn lẫn với các tệp của các plugin khác. Điều đó làm cho nó dễ dàng để cập nhật và loại bỏ.

  • Một gói có thể là một kho git, mercurial, vv. Điều đó làm cho nó thực sự dễ dàng để cập nhật.

  • Một gói có thể chứa nhiều plugin phụ thuộc lẫn nhau.

  • Một gói có thể chứa các plugin được tải tự động khi khởi động và các plugin chỉ được tải khi cần :packadd.

Vì vậy, ý tưởng là tạo một thư mục chứa tất cả các plugin có cấu trúc sau:

$HOME/.vim/pack/my-plugins/
                        start/
                            foo/
                                plugin/
                                    foo.vim
                                syntax/
                                    some.vim
                            bar/
                                plugin/
                                    bar.vim
                        opt/
                            buzz/
                                plugin/
                                    buzz.vim

Vị trí của thư mục được xác định bởi tùy chọn packpath(Xem :h 'packpath').

Lưu ý tầm quan trọng của cấu trúc thư mục của bạn:

  • Các startthư mục chứa plugin đó sẽ được nạp tự động khi khởi động.
  • Các optthư mục chứa plugin "bắt buộc", nạp với các packaddlệnh.
  • Các thư mục con ( plugin, autoload, doc, ...) là những người bạn đang sử dụng để trong plugin.

Đây là một bản tóm tắt của các thư mục:

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

Khi các tệp này ở đúng vị trí, mở Vim sẽ tải các plugin vào startvà làm cho các tệp optcó sẵn :packadd.


Bây giờ, tính năng này có thể thay thế các trình quản lý plugin hiện có không?

Disclaimer: Phần này có thể là một chút quan điểm.

Tôi nghĩ rằng cách tiếp cận của trình quản lý gói mới này thực sự khác với một trong những trình quản lý plugin mà chúng ta đã từng sử dụng vì nó được tạo ra để quản lý một (hoặc một vài) kho lưu trữ có chứa một số plugin.

Ra khỏi hộp, trình quản lý gói không cung cấp các tính năng để cập nhật từng plugin một, để tự động tìm nạp chúng từ địa chỉ Github hoặc để chọn các plugin bạn muốn bật / tắt.

Tôi không chắc chắn sẽ rất tiện lợi khi sử dụng nó ngay lập tức (đặc biệt là vì việc xử lý kho lưu trữ kiểm soát phiên bản lồng nhau có thể là một nhiệm vụ khó khăn) nhưng có lẽ đây là dịp để làm cho trình quản lý plugin hiệu quả hơn?

Bây giờ cũng có thể tưởng tượng việc di chuyển các plugin hiện có để áp dụng cấu trúc theo yêu cầu của người quản lý gói và quản lý chúng trực tiếp từ hệ thống tệp. Có thể một số trình bao bọc sẽ được tạo để sử dụng tính năng mới này.


EDIT Theo đề xuất của @Sato Katsura, đây là một lưu ý về helptagslệnh. Cam kết Vim8 đã giới thiệu hai dòng trong helptagtài liệu :

: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.

Điều đó có nghĩa là trình quản lý gói mới dễ dàng tạo ra các trợ giúp được đưa vào kho lưu trữ của người dùng. Với lệnh duy nhất, :helptags ALLtất cả các trợ giúp được tạo ra.


11
Tóm tắt tốt. Các packagetính năng có nghĩa là để cuối cùng đặt dấu chấm hết cho vimballs và các loài khủng long có liên quan, chứ không phải để cạnh tranh với các nhà quản lý Plugin hiện đại. Đó là một sự thay thế khả thi cho pathogen, với điều kiện bạn không dựa vào pathogencác tính năng tối nghĩa hơn. Nó không cố gắng để thay thế, nói , Vundle. Khái niệm gói như một bộ sưu tập các plugin được cân nhắc kỹ lưỡng và có khả năng hữu ích, nhưng tôi sợ không ai sẽ sử dụng nó vì các trình quản lý plugin hiện đại không hỗ trợ nó. Và các nhà quản lý plugin sẽ không hỗ trợ vì không ai sử dụng. Đó là một chút vấn đề gà và trứng.
Sato Katsura

2
Không liên quan: bạn có thể muốn thêm một ghi chú về :helptags ALL.
Sato Katsura

1
@Sato cảm ơn bạn đã lưu ý về vimballs: vì tôi không bao giờ sử dụng chúng, tôi thậm chí không biết về nó nhưng bây giờ bạn đề cập đến nó có vẻ khá rõ ràng. Tôi đồng ý với bạn về lưu ý "không ai sẽ sử dụng nó" Tôi không thực sự lạc quan về điều đó. Đối với :helptag ALLtôi sẽ có một cái nhìn và thêm nó, cảm ơn cho lời đề nghị!
statox


4
minpac là trình quản lý gói mới cho Vim 8 (và NeoVim). Nó được xây dựng dựa trên các gói của Vim 8, cung cấp các lệnh cho updateplugin của bạn hoặc cleanchúng (loại bỏ các plugin không sử dụng). Đối với các điểm thưởng, nó cũng sử dụng tính năng kiểm soát công việc mới để thực hiện nhiều cập nhật song song. Tôi nghĩ rằng nó thực sự hứa hẹn, bởi vì nó tăng cường các gói tích hợp với UX tốt hơn.
nelstrom

11

Để mở rộng trên "nó có thể thay thế trình quản lý plugin",

Tôi đã từng sử dụng Vundle, điều này thật tuyệt vời, nhưng bây giờ đã thay thế nó bằng 18 dòng bash.

Tôi thấy hữu ích khi sử dụng các thư mục con trong thư mục pack để nhóm các plugin liên quan. Ví dụ: "Cú pháp" hoặc "Ruby".

Ví dụ bash có liên quan là dưới đây. Đặt trong một tập tin và chạy nó.

Thảo luận thêm về chủ đề tại: 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

4

Câu trả lời được cung cấp bởi @statox rất mô tả, nhưng đối với một người dùng mới có thể gây mất tập trung, vì họ có thể đọc tệp trợ giúp trực tiếp. Tôi muốn phác thảo những gì bạn cần làm trong con trỏ.

  1. Tạo pack/*/startthư mục theo bất kỳ thư mục được cung cấp bởi set packpath. Tôi đã làm trong ~/.config/nvim/pack/*/start. Lưu ý rằng bạn có thể sử dụng bất kỳ tên thư mục nào bạn muốn thay thế *nhưng bạn không thể bỏ qua nó hoàn toàn, tôi không biết tại sao. Ví dụ, bạn có thể sử dụng thư mục ~/.config/nvim/pack/foo/starthoặc ~/.config/nvim/pack/bar/startkhông ~/.config/nvim/pack/start.

  2. Đi đến pack/*/startthư mục và sao chép gói ở đó.

  3. Bật n / vim và làm :scriptnamesđể kiểm tra xem mọi thứ đã được tải chưa. Đừng lo lắng nếu không phải mọi phần đều được tải, bởi vì một số tệp có nghĩa là được tải sau một số hook, ví dụ autoload/plugin.vim.
  4. Để gỡ cài đặt, chỉ cần xóa thư mục mà bạn đã nhân bản gói. Đừng cần làm gì khác.
  5. Làm :helptags ALLđể tạo thẻ cho tất cả các tài liệu trợ giúp. Làm :helptags {dir}để tạo thẻ cho các tài liệu trợ giúp trong thư mục dir. Ví dụ, nếu bạn đặt plugin của bạn vào ~/.config/nvim/pack/foo/plugin_name, sau đó làm :helptags ~/.config/nvim/pack/foo/plugin_name/doc. Điều đó sẽ tạo ra một tagstập tin trong thư mục doc của plugin. Nếu bạn xóa plugin khỏi thư mục, tệp thẻ sẽ biến mất và vim sẽ không tìm thấy tệp trợ giúp, vì vậy bạn không cần phải gỡ cài đặt tệp tài liệu theo cách thủ công.

2

Định dạng mới có thể được coi là tương đương với mầm bệnh để vẫn còn chỗ cho người quản lý có thể tải xuống các plugin bạn muốn. Có một vài trình quản lý plugin mới tận dụng định dạng gói mới này nhưng tôi vẫn tạo ra Vire vì họ không muốn quản lý vimrcbạn. Nếu bạn có nhiều máy và muốn cùng một cấu hình, Vire làm cho nó siêu dễ dàng.


Nếu bạn có nhiều máy WINDOWS và muốn có cùng cấu hình ... FTFY
Dan J.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.