Sự khác biệt giữa các trình quản lý plugin vim là gì?


197

Tôi đã xem xét các trình quản lý gói khác nhau cho vim và người quản lý tôi đã quyết định sử dụng vim-plug nhưng tôi đã thấy những người khác như mầm bệnhvundle và tôi thực sự không biết sự khác biệt là gì.

Ai đó có thể cho tôi một cái nhìn tổng quan ngắn gọn về sự khác biệt để tôi có thể quyết định cái nào phù hợp nhất với tôi không?


Câu trả lời:


142

vim-plug là một thay thế tốt cho Vundle, nó làm mọi thứ hơi khác so với quan điểm kỹ thuật sẽ làm cho nó nhanh hơn ( xem phần này ). Nó có hầu hết (hoặc tất cả?) Các tính năng của Vundle.

  • Thủ tục nâng cấp song song cho Vim với bất kỳ +ruby, +pythonhoặc Neovim. Quay trở lại chế độ tuần tự bằng Vimscript nếu không có sẵn.
  • Tải chậm, để khởi động nhanh hơn ( xem cái này ).
  • Cài đặt plugin.
  • Cập nhật plugin.
  • Xem lại / cập nhật rollback.
  • Hỗ trợ các hệ thống OSX, Linux & UNIX và MS Windows.
  • Móc sau cập nhật, ví dụ tự động biên dịch lại YCM

Để bắt đầu sử dụng nó:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Và trong vimrc của bạn:

call plug#begin()
Plug 'tpope/vim-sensible'

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
call plug#end()

Sau đó ra lệnh

:PlugInstall

để cài đặt các plugin được liệt kê.


1
Cảm ơn vì lời giới thiệu; Tôi đã chống lại các trình tải trước đó bởi vì tôi thích thời gian tải của mình. Một điều không rõ ràng mà tôi phải nghiên cứu là :PlugInstallvề một plugin mới; ngay cả các tài liệu chính thức cũng che khuất điều này một chút.
msw

7
trong khi tôi thích vim-plug, hãy lưu ý rằng nó thay đổi một số giá trị mặc định của vim mà bạn có thể thấy đáng ngạc nhiên / khó hiểu github.com/junegunn/vim-plug/issues/379
laktak

Đối với Windows, vim có số phiên bản thư mục vim , chẳng hạn như vim81 cho vim 8.1. Trong bước đầu tiên khi sử dụng curl đảm bảo thư mục được ..\vim81\autoload\..và không ..\.vim\autoload\...
Stephen Jacob

56

Tác nhân gây bệnh rất đơn giản. Về cơ bản nó chỉ làm:

  • tự động tải plugin từ một thư mục
  • tạo thẻ trợ giúp cho các plugin này

Ưu điểm:

  • tối giản

Nhược điểm:

  • mọi thứ khác được thực hiện thủ công (cài đặt, cập nhật, xóa, v.v.)
  • không tải lười biếng

Để cài đặt nó tải pathogen.vimđến ~/.vim/autoload:

mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

Và thêm vào .vimrc:

call pathogen#infect()
call pathogen#helptags() "If you like to get crazy :)

Nếu bạn không muốn nổi điên, chỉ gọi :Helptagskhi bạn cần.

Plugin sau đó được thêm vào ~/vim/bundle.


20
Rõ ràng, mầm bệnh không phải là một trình quản lý plugin. Tất cả những gì nó làm là quản lý runtimepath. Đó là nó. Bất kỳ plugin nào bạn thêm vào ~ / .vim / bundle (tức là vị trí mặc định, bạn có thể thay đổi điều này), nó bổ sung các tệp của plugin vào runtimepath của vim để chúng có thể truy cập được. Việc cài đặt, cập nhật, gỡ bỏ thủ công không thực sự là một lừa đảo nếu bạn không cài đặt nhiều plugin đó. Ngoài ra, khi cập nhật plugin, bạn có thể chọn chỉ tìm nạp một tập hợp con các thay đổi và không cập nhật lên phiên bản mới nhất của plugin, điều này mang lại cho bạn nhiều quyền kiểm soát.
akshay 5/2/2015

1
@AkshayHegde Vâng, một khi tôi bắt đầu viết câu trả lời Vundle, tôi phải quay lại và chỉnh sửa "trình quản lý plugin" từ câu trả lời này. Thứ hai về con lừa, đó là lý do tại sao tôi tiếp tục sử dụng nó thay vì bất cứ thứ gì khác.
muru

1
đại dịch vim là một bổ sung tốt đẹp cho mầm bệnh. Nó xử lý các kho lưu trữ từ xa phía sau các plugin, để Pathogen xử lý runtimepath. Điều này không có nghĩa là người ta cần hai công cụ, nhưng đối với các nhiệm vụ khác nhau mà "nên" được xử lý riêng. Ưu điểm của Pathogen + Đại dịch mà tôi thấy thuyết phục nhất: không cần phải xử lý các mô đun con git cho các gói.
jalanb

2
Tôi sử dụng mầm bệnh như trình tải plugin của tôi. Nhưng tôi sử dụng các mô đun con git để kiểm soát các phiên bản của các plugin riêng lẻ. Vì vậy, phương pháp tối giản của nó hoạt động tốt cho trường hợp sử dụng của tôi. Làm thế nào để các nhà quản lý khác xử lý cập nhật phiên bản và plugin.
Martin York

2
@JaDogg Ồ, đó là từ README : "Thông thường, Vim mong bạn chạy: helptags trên mỗi thư mục với tài liệu (ví dụ: helptags ~ / .vim / doc). Được cung cấp với pathogen.vim là một lệnh: Helptags thực hiện điều này trên mọi thư mục trong 'runtimepath' của bạn. Nếu bạn thực sự muốn phát điên, bạn thậm chí có thể gọi Helptags trong vimrc của mình. Tôi không muốn phát điên. " Tôi muốn nói rằng nếu bạn có nhiều plugin, điều này có thể làm chậm quá trình khởi động một chút. Và bạn thực sự không cần phải chạy nó mỗi khi khởi động, một lần cho mỗi lần cài đặt / nâng cấp plugin là đủ.
muru

43

Vundle phức tạp hơn. Nó là một trình quản lý gói à la apthoặc yumcho các plugin. Nó có thể:

  • tìm kiếm một chỉ mục plugin
  • cập nhật plugin
  • tạo trợ giúp tự động
  • giữ, nhưng không sử dụng, các plugin trong thư mục tự động tải
  • làm sạch các plugin không sử dụng
  • Hoạt động trên Linux, OSX và MS Windows

Để cài đặt:

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Và sau đó thêm vào .vimrc:

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" more Plugin commands
" ...
call vundle#end()            " required
filetype plugin indent on    " required

Để cài đặt plugin, hãy sử dụng Pluginlệnh trong .vimrc(ví dụ khác về Github README):

" plugin on Github
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
Plugin 'L9'

Và sau đó gọi :PluginInstalltừ .vim(hoặc vim +PluginInstall +qall).


NeoBundle README mà bạn đã liên kết để nói rằng dự án hiện không được ủng hộ bởi github.com/Shougo/dein.vim
Jonathan Hartley

@JonathanHartley người có quyền lực "đen tối"? Tôi đoán tôi nên đã thấy rằng sắp tới.
muru

13

dein.vim : Để theo dõi câu hỏi này , tôi sẽ thêm vào đây trình quản lý plugin được tạo bởi Shougo nổi tiếng.

Theo README, plugin có các phụ thuộc sau:

  • Vim >7.4 or neovim: trong khi việc cập nhật Vim là một điều tốt, có thể có vấn đề với một số người dùng rằng các phiên bản trước không được hỗ trợ
  • git: khá phổ biến đối với người quản lý gói
  • rsync: không phổ biến như git

Tác giả tuyên bố rằng nó nhanh hơn NeoBundle. Một điểm chuẩn có thể được tìm thấy trên trang readme của dự án .

Một khái niệm ban đầu của trình quản lý plugin này là nó không cung cấp bất kỳ lệnh nào, mà chỉ có các chức năng: ví dụ: để cập nhật các plugin bạn không thể sử dụng một cái gì đó như :PlugUpdate, bạn sẽ phải gọi : :call dein#update(). Thành thật mà nói tôi đã không tìm thấy một sự khám phá về sự lựa chọn thiết kế này.

Ngoài ra, ai đó đã tạo một plugin cung cấp các lệnh "thiếu" này. Tôi không biết liệu đây có phải là một ý tưởng tốt hay nếu điều này trái với ý tưởng chính của trình quản lý plugin nhưng tác giả đề cập đến nó trong Câu hỏi thường gặp của tệp tài liệu.

Dein.vim hỗ trợ nhận các plugin từ Github (với quyền truy cập được hỗ trợ vào các plugin từ vimscript.org) và từ các thư mục địa phương.

Trình quản lý plugin cung cấp một số tính năng cổ điển như cập nhật và vô hiệu hóa các plugin. Nó cũng cho phép thực hiện các hook tại thời điểm cài đặt.

Lưu ý rằng theo Câu hỏi thường gặp, có vẻ như bạn phải tự xây dựng các trợ giúp của các plugin mà nó cài đặt.

Một điểm thú vị là tác giả muốn dein.vim dễ kiểm tra và duy trì để kho lưu trữ cũng chứa một số tập lệnh kiểm tra.

Cuối cùng, tôi muốn nói rằng trình quản lý plugin này dường như được thiết kế gọn nhẹ và nhanh, điều này rất thú vị, nhưng tôi nghĩ rằng nó ít thân thiện với người dùng hơn vim-plug hoặc Vundle chẳng hạn.


Ồ, còn nữa, Shougo mô tả dein.vim là một "trình quản lý plugin Vim / Neovim được hỗ trợ tối" nếu có ai biết ý nghĩa của nó, hãy thoải mái chỉnh sửa câu trả lời này: Tôi tò mò ;-)


1
"Dark Powered" là cụm từ mà bạn sẽ tìm thấy trong các plugin vim của Shougo có hỗ trợ / hoặc chỉ dành cho NeoVim.
Yonsy Solis

8
Tôi nghĩ rằng cụm từ "Dark Powered" xuất phát từ "Người dùng Light Vim" - những người chỉ sử dụng các tính năng mặc định và "Người dùng Dark Vim" - những người cố gắng sử dụng nó như IDE hoặc ít nhất là sử dụng nhiều plugin và có rất nhiều plugin của dòng họ thêm vào tập tin vimrc (thêm về nó ở đây trong presentation- Shougo của slideshare.net/Shougo/lets-talk-about-neovim - slide 6)
lewiatan

1
@lewiatan: Cảm ơn tôi nghĩ bạn đã có câu trả lời đúng. (Btw thuyết trình của
Shougo

1
@statox Shougo tuyên bố : "Dein.vim cũng bỏ qua việc sử dụng lệnh để ủng hộ việc gọi hàm, điều này cũng có thể đóng góp cho hiệu suất (mặc dù tôi không chắc chắn)."
Alexej Magura

1
@statox, Lulz, không có ai có lẽ không phải là lời của Shougo, sau đó, tôi đã không nhận ra rằng đó không phải là blog của mình.
Alexej Magura

13

Cả Vim 8.0 và Neovim đều có trình quản lý gói tích hợp riêng. Trong Vim 8.0, hãy tạo các thư mục sau : .vim/pack/*/start, *bất kỳ tên nào bạn muốn sử dụng; ví dụ .vim/pack/jimmy/start.

Sao chép plugin của bạn vào thư mục bắt đầu giống như bạn đang sử dụng mầm bệnh.

Với Neovim, các thư mục dài hơn một chút:

.local/share/nvim/site/pack/*/start. Từ đó làm tương tự như đối với Vim.

Không có nhu cầu nào cho trình quản lý plugin khác.

Trong Vim hoặc Neovim, hãy chạy :h packagesđể biết thêm chi tiết. Đọc phần về màu sắc vì chúng khác nhau, mặc dù không nhiều. Bạn không cần thêm hướng dẫn trong tập tin .vimrccủa bạn nvim/init.vim.

Mong rằng sẽ giúp.


8

Tôi đặc biệt thích VAM để tự triển khai: tất cả những gì bạn cần là của bạn .vimrcvà sau đó bắt đầu vim.

Vì vậy, bạn không cần To Installdòng được sử dụng bởi hầu hết các trình quản lý plugin khác (bước đầu tiên để cài đặt trình quản lý plugin).


6

Theo như tôi biết, tôi muốn trình quản lý plugin tôi sử dụng để hỗ trợ các phụ thuộc.

Lý do là tôi đang duy trì một số plugin và tôi có rất nhiều phụ thuộc lẫn nhau: một thư viện chung được sử dụng bởi tất cả, công cụ mẫu / đoạn mã được sử dụng bởi bộ C ++, plugin tái cấu trúc cũng sử dụng plugin thư viện ctags , v.v. Yêu cầu người dùng cuối thực hiện tối đa 10 dòng để cài đặt các plugin mà họ quan tâm không xuất hiện với tôi như một giải pháp tốt.

Cho đến nay, tôi chỉ biết đến hai plugin như vậy: vim-addon-managerNeoBundle . VAM đã phân tách mã cơ sở dữ liệu của mình thành vim-pi sau nhiều trao đổi trên danh sách gửi thư chính thức của vim. Ý tưởng là NeoBundle (và bất kỳ plugin nào khác quan tâm đến việc quản lý các phụ thuộc) cuối cùng có thể khai thác vim-pi.

Gần đây tôi đã bắt gặp hương vị vim cũng xử lý các phụ thuộc. Về chủ đề, nó kiểm tra các phiên bản plugin để cài đặt đúng.

Lưu ý: Vì câu trả lời ban đầu của tôi,

  • Phát triển NeoBundle đã dừng lại;
  • và trong khi vim-pi cập nhật thường xuyên cơ sở dữ liệu của mình từ các plugin trên vim.org và VAM vẫn có thể được sử dụng để thể hiện sự phụ thuộc, có vẻ như không còn có thể thêm bí danh vào cơ sở dữ liệu vim-pi: MR / PR không được hợp nhất nữa

AFAIK, không có plugin nào trong số các plugin này sao chép / cài đặt / cập nhật plugin ở chế độ nền / song song. Vì tôi không cài đặt môi trường vim mới, cũng như không cập nhật các plugin tôi đã cài đặt mỗi tháng một lần, thành thật mà nói, tôi không quan tâm. Họ tất nhiên cập nhật 'helptags', chăm sóc 'rtp', và như vậy.


vim-plugREADME có một ví dụ nói rằng "Phụ thuộc nhóm". Bạn đã thử điều đó chưa, hay nó khác với các phương thức của VAM / NeoBundle chưa?
muru

Tôi đã bỏ lỡ các phụ thuộc nhóm trong tài liệu vim-plug. Tuy nhiên, tôi đã thấy rằng họ đã loại bỏ nỗ lực hỗ trợ các phụ thuộc khỏi cơ sở mã. Về sự phụ thuộc nhóm, tôi không thấy nó có thể giúp gì. Phụ thuộc không nên được khai báo bởi người dùng cuối. Chúng nên được khai báo bởi các nhà văn plugin. Nếu bạn xem qua plugin lh-cpp và nhìn kỹ bạn sẽ thấy các phụ thuộc không phải là thứ gì đó tuyến tính. Đó là một biểu đồ định hướng, cần phải có tính chu kỳ để tránh các vấn đề.
Luc Hermitte

Cho đến nay, tôi đã sử dụng VAM hơn một thập kỷ và tôi hài lòng với nó. Tuy nhiên, tôi đã sử dụng hương vị vim vì việc tích hợp từ travis đơn giản hơn nhiều - để kiểm tra các plugin của tôi. Và thật không may, cả hai sử dụng một cú pháp khác nhau để khai báo các phụ thuộc.
Luc Hermitte

1
FYI: Sự phát triển của NeoBundle đã dừng lại (kể từ ngày 23 tháng 2 năm 2016). Nó đề nghị người kế nhiệm Dein.vim (của cùng một tác giả) thay vào đó.
Peter V. Mørch

3

Hầu hết các trình quản lý plugin này làm rất tốt việc quản lý các plugin nhưng lại khiến bạn phải đau đầu trong việc quản lý các plugin vimrc. 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. Bạn không cần git hoặc tìm ra các mô hình con hoặc bất kỳ nỗ lực bổ sung nào để có được thiết lập hoặc di chuyển.

  • Cài đặt Python, đây là những gì hầu hết các plugin Vim hiện đại được viết và yêu cầu
  • pip install vire
  • Đăng cái hiện có của bạn vimrclên Github như một ý chính và duy trì nó ở đó
  • Nếu trên Windows, vire -iđể cài đặt Vim mới nhất hoặc (Neovim với -i -n)
  • Xóa mọi cuộc gọi chức năng plugin hiện có và xác định các cuộc gọi nhận xét để cài đặt bất kỳ plugin nào " Plug 'tpope/vim-unimpaired'
  • vire gistID

Sau đó chạy virebất cứ lúc nào bạn muốn vimrchoặc các plugin của bạn được cập nhật hoặc -icập nhật ứng dụng.

Vire tận dụng packtính năng của Vim / Neovim để tải plugin. Bạn cũng có thể tiếp tục sử dụng trình quản lý plugin hiện tại của mình nhưng sử dụng Vire để chỉ cài đặt Vim vimrc, và trình quản lý plugin nếu muốn.


1

Đối với những người muốn có trình quản lý plugin đầy đủ bằng Pathogen, cũng có apt-vim. Bạn có thể cài đặt nó với curl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | sh (như được mô tả ở đây: https://www.linuxsecrets.com/1715-vi-editor-tips-trick-and-secrets-into-the-vi-vim-editor-part-ii ). Sau khi cài đặt, bạn có thể chỉ cần gõ apt-vim installtheo tên của kho lưu trữ gói, tương tự như trình quản lý gói apt apt.


1
Đây thực chất là một câu trả lời chỉ liên kết. Nếu bạn có thể đi vào chi tiết hơn một chút về cách cài đặt và sử dụng apt-vim, điều đó có thể được chấp nhận.
Tumbler41

Tôi đã cập nhật nó. Thực sự tôi nghĩ rằng nó nên là một bình luận trên bài đăng về Pathogen, nhưng tôi không có đủ điểm để đưa ra nhận xét
Ngày Melanie ngày

1
Liên kết bị thiếu với plugin. Ngoài ra một lần nữa một plugin gợi ý curl URL |sh. Tôi sẽ không bao giờ đề nghị bất cứ ai chạy một số mã ngẫu nhiên từ Internet. Thực sự đó là một hợi an ninh xấu.
Christian Brabandt

0

Tôi đang tìm cách sử dụng pathogennhưng cập nhật dễ dàng và làm cho nó di động, vì vậy có lẽ một bashtập lệnh có thể hữu ích (sử dụng vim-plugchức năng) -

#!/bin/sh

# inspired by https://github.com/thoughtbot/dotfiles/blob/master/hooks/post-up

if [ ! -e "$HOME"/.vim/autoload/pathogen.vim ]; then
  curl -fLo "$HOME"/.vim/autoload/pathogen.vim --create-dirs \
      https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim
fi

if [ -e "$HOME"/.vim/autoload/plug.vim ]; then
  vim -E -s +PlugUpgrade +qa
else
  curl -fLo "$HOME"/.vim/autoload/plug.vim --create-dirs \
      https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
fi
vim -u "$HOME"/.vimrc.bundles +PlugUpdate +PlugClean! +qa

Và sau đó là một ví dụ .vimrc.bundle-

"installed via the Githubs
call plug#begin('~/.vim/bundle')
Plug 'bling/vim-airline'
Plug 'scrooloose/syntastic'
Plug 'scrooloose/nerdtree'
Plug 'tpope/vim-fireplace'
Plug 'vim-scripts/paredit.vim'
" etc

call plug#end()

"disable vim-plug sugar-- actual config should be set via .vimrc
filetype plugin indent off 
syntax on

1
Bạn có thể thêm một số chi tiết cho điều này? Câu hỏi chính mà OP đặt ra là "Ai đó có thể cho tôi một cái nhìn tổng quan ngắn gọn về sự khác biệt [trong trình quản lý gói] để tôi có thể quyết định cách nào phù hợp nhất với mình không"? Làm thế nào để trình của bạn giúp trả lời đó? Bạn đang thêm gì vào mầm bệnh mà nó không có? Đó là một cách nghĩ.
Lớp B
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.