Vim 8 đã được phát hành ngày hôm nay và ghi chú phát hành đề cập đến một tính năng "gói" mới. Nó là gì và tôi nên sử dụng nó như thế nào?
Quan trọng nhất, nó có thay thế các trình quản lý plugin cũ tốt không?
Vim 8 đã được phát hành ngày hôm nay và ghi chú phát hành đề cập đến một tính năng "gói" mới. Nó là gì và tôi nên sử dụng nó như thế nào?
Quan trọng nhất, nó có thay thế các trình quản lý plugin cũ tốt không?
Câu trả lời:
Trước hết, tài liệu liên quan có thể được tìm thấy :h packages
trê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:
start
thư mục chứa plugin đó sẽ được nạp tự động khi khởi động.opt
thư mục chứa plugin "bắt buộc", nạp với các packadd
lệnh.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 start
và làm cho các tệp opt
có 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ề helptags
lệnh. Cam kết Vim8 đã giới thiệu hai dòng trong helptag
tà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 ALL
tất cả các trợ giúp được tạo ra.
:helptags ALL
.
:helptag ALL
tôi sẽ có một cái nhìn và thêm nó, cảm ơn cho lời đề nghị!
update
plugin của bạn hoặc clean
chú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.
Để 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
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ỏ.
Tạo pack/*/start
thư 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/start
hoặc ~/.config/nvim/pack/bar/start
không ~/.config/nvim/pack/start
.
Đi đến pack/*/start
thư mục và sao chép gói ở đó.
: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
.: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 tags
tậ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.Đị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ý vimrc
bạ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.
package
tí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 chopathogen
, với điều kiện bạn không dựa vàopathogen
cá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.