vimプラグインマネージャーの違いは何ですか?


197

私はvimのさまざまなパッケージマネージャーとvim -plugを使用することを決めたパッケージマネージャーを見てきましたが、病原体バンドルなどの他のパッケージマネージャーを見てきましたが、その違いが正直わかりません。

違いを簡単に説明してくれるので、自分に最適な方法を判断できますか?


回答:


142

vim-plugはVundleの優れた代替手段であり、技術的な観点とは少し異なることを行うため、より高速になります(これを参照)。Vundleのほとんどの(またはすべての)機能を備えています。

  • いずれかとのVimの並列更新手順+ruby+pythonまたはNeovim。使用可能なものがない場合、Vimscriptを使用してシーケンシャルモードにフォールバックします。
  • 起動を高速化するための遅延読み込み(これを参照)。
  • プラグインをインストールします。
  • プラグインを更新します。
  • 更新の確認/ロールバック。
  • OSX、LinuxおよびUNIXシステム、およびMS Windowsをサポートします。
  • 更新後のフック。たとえば、YCMを自動的に再コンパイルします。

使用を開始するには:

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

そして、vimrcで:

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

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

次に、コマンドを与えます

:PlugInstall

リストされたプラグインをインストールします。


1
推奨してくれてありがとう。私は私のロード時間がジッピー好きなので、これまでローダーに抵抗していました。私が調査しなければならなかった1つの非自明なことは:PlugInstall、新しいプラグインについてでした。公式ドキュメントでさえ、これを少しあいまいにしています。
msw

7
私はvimのプラグを好む一方で、混乱/それはあなたが意外な見つけるかもしれないいくつかのvimのデフォルト値を変更することに注意してgithub.com/junegunn/vim-plug/issues/379
laktak

Windowsの場合、vimにはvim 8.1のvim81などのフォルダーvim バージョン番号があります。curlを使用する場合の最初のステップでは、フォルダーが..\vim81\autoload\..であるかどうかを確認します..\.vim\autoload\..
スティーブンジェイコブ

56

病原体は単純です。本質的にはそれだけです:

  • フォルダーからプラグインを自動ロードする
  • これらのプラグインのヘルプタグを生成する

長所:

  • ミニマリスト

短所:

  • 手動で行われる他のすべて(インストール、更新、削除など)
  • 遅延読み込みなし

ダウンロードpathogen.vimするには、~/.vim/autoload次の場所にダウンロードします。

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

に追加します.vimrc

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

夢中にならない:Helptags場合は、必要なときにだけ電話してください。

その後、プラグインがに追加され~/vim/bundleます。


20
明確にするために、病原体はプラグインマネージャーではありません。それは、runtimepathを管理するだけです。それでおしまい。〜/ .vim / bundleに追加するプラグイン(つまり、デフォルトの場所、これは変更できます)は、プラグインのファイルをvimのruntimepathに追加して、アクセスできるようにします。多数のプラグインがインストールされていない場合、手動でインストール、更新、削除することは実際には問題ではありません。さらに、プラグインを更新する場合、変更のサブセットのみを取得し、プラグインの最新バージョンに更新しないように選択できます。これにより、多くの制御が可能になります。
-akshay

1
@AkshayHegdeはい、Vundleの回答を書き始めたら、戻ってこの回答から「プラグインマネージャー」を編集する必要がありました。詐欺について二番目に、それが私が他の何かの代わりにそれを使い続ける理由です。
ムル

1
vim-pandemicは、病原体への素晴らしい追加です。プラグインの背後にあるリモートリポジトリを処理し、Pathogenがruntimepathを処理するようにします。これは、2つのツールが必要であることを意味しますが、個別に処理する必要がある異種のタスクの場合。Pathogen + Pandemicの利点は最も説得力がありました。バンドルのgitサブモジュールを扱う必要はありません。
-jalanb

2
プラグインローダーとして病原体を使用します。しかし、私はgitサブモジュールを使用して、個々のプラグインのバージョンを制御します。したがって、そのミニマリストのアプローチは私のユースケースに適しています。他のマネージャーがバージョン管理とプラグインの更新をどのように処理するか。
マーティンヨーク

2
@JaDoggああ、それはREADMEからです:「通常、Vimは各ディレクトリで:helptagsをドキュメント(たとえば、:helptags〜/ .vim / doc)で実行することを期待しています。pathogen.vimには、これを行う:Helptagsコマンドがあります「実行時パス」のすべてのディレクトリで。本当に夢中になりたければ、vimrcでヘルプタグを呼び出すこともできます。夢中になるのは嫌です。」プラグインがたくさんあると、起動が少し遅くなるかもしれません。そして、あなたは本当にすべてのスタートアップでそれを実行する必要はありません。プラグインのインストール/アップグレードごとに一度で十分です。
ムル

43

Vundleはより複雑です。これは、パッケージマネージャアラaptまたはyumプラグイン用です。できる:

  • プラグインインデックスを検索する
  • プラグインを更新する
  • ヘルプタグを自動的に生成する
  • autoloadフォルダーにプラグインを保持しますが、使用しません
  • そのような未使用のプラグインを一掃する
  • Linux、OSX、およびMS Windowsで動作します

インストールする:

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

そして、あなたのに追加.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

プラグインをインストールするには、Plugin次のコマンドを使用します.vimrc(Github READMEのその他の例):

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

そして、(または):PluginInstallから呼び出します。.vimvim +PluginInstall +qall


プロジェクトは、現在の非推奨されていることを述べているにリンクされているNeoBundle README github.com/Shougo/dein.vim
ジョナサン・ハートリー

@JonathanHartleyは「暗い」パワーの1つですか?私はそれが来るのを見るべきだったと思う。
ムル

13

dein.vimこの質問のフォローアップとして、有名なShougoによって作成されたプラグインマネージャーをここに追加します。

READMEによると、プラグインには次の依存関係があります。

  • Vim >7.4 or neovim:Vimを最新の状態に保つことは良いことですが、一部のユーザーにとっては、以前のバージョンがサポートされていないことが問題になる場合があります
  • git:パッケージマネージャーではかなり一般的です
  • rsync:gitほど一般的ではありません

著者は、NeoBundleよりも高速であると主張しています。ベンチマークは、プロジェクトのreadmeページにあります

このプラグインマネージャーの元の概念の1つは、コマンドを提供せず、機能のみを提供することです。たとえば、プラグインを更新するには、のようなものは使用できません:PlugUpdate:を呼び出す必要があります:call dein#update()。正直なところ、私はこの設計選択の説明を見つけていません。

また、誰かがこれらの「欠落」コマンドを提供するプラグインを作成しまし。これが良いアイデアなのか、プラグインマネージャーの主なアイデアに反するのかはわかりませんが、著者はdocファイルのFAQで言及しています。

Dein.vimは、Github(vimscript.orgからプラグインへのアクセスを容易にする)およびローカルディレクトリからのプラグインの取得をサポートしています。

プラグインマネージャーは、プラグインの更新や無効化などの古典的な機能を提供します。また、インストール時にフックを実行することもできます。

FAQによると、インストールするプラグインのヘルプタグ手動で作成する必要があるようです。

興味深い点は、著者がdein.vimのテストと保守を簡単にしたいので、リポジトリにいくつかのテストスクリプトが含まれていることです。

最後に、このプラグインマネージャーは軽量で高速に設計されているように思えますが、これは興味深いことですが、たとえばvim-plugVundleよりもユーザーフレンドリーではないと思います。


また、Shougoはdein.vimを「Dark powered Vim / Neovim plugin manager」と説明しています。もし誰かがその意味を知っていれば、この答えを自由に編集してください:私は興味があります;-)


1
「Dark powered」とは、NeoVimのみをサポートしている、またはNeoVim専用のShougoのvimプラグインで見つけるフレーズです。
ヨンシーソリス

8
「Dark powered」というフレーズは、「Light Vimユーザー」-デフォルト機能のみを使用するユーザーと「Dark Vimユーザー」-IDEとして使用するか、少なくとも多くのプラグインを使用して多くのvimrcファイルに追加された行(詳細については、Shougoのプレゼンテーション-slideshare.net/Shougo/lets-talk-about-neovim-スライド6を参照)
-lewiatan

1
@lewiatan:ありがとう、正しい答えが得られると思います。(興味深いShougoのプレゼンテーションbtw)
statox

1
@statox Shougo は次のように述べています。「Dein.vimは、関数呼び出しを優先してコマンドの使用法を廃止しますが、これもパフォーマンスに寄与する可能性があります(ただし、わかりません)。
アレクセイマグラ

1
@ statox、Lulz、おそらくそれらはShougoの言葉ではないでしょう。
アレクセイマグラ

13

Vim 8.0とNeovimの両方には、独自の組み込みパッケージマネージャーがあります。Vimの8.0では、以下のディレクトリを作成します .vim/pack/*/start。ここで、*使用したい任意の名前です。例えば.vim/pack/jimmy/start

病原体を使用している場合と同様に、プラグインを開始ディレクトリに複製します。

Neovimでは、ディレクトリがもう少し長くなります。

.local/share/nvim/site/pack/*/start。そこからVimと同じことを行います。

別のプラグインマネージャーはまったく必要ありません。

VimまたはNeovimで:h packages、もう少し詳細に実行します。色については、それほどではありませんが異なるため、一部を読んでください。あなたは、あなたの中に余分な命令を必要としない.vimrcか、あなたのnvim/init.vimファイルを。

お役に立てば幸いです。


8

私は特に自己展開のためにVAMが好きです。必要なのはあなただけで.vimrc、それからvimを起動します。

そのため、To Install他のほとんどのプラグインマネージャーが使用する行は必要ありません(プラグインマネージャー自体をインストールする最初のステップ)。


6

私に関する限り、依存関係をサポートするために使用するプラグインマネージャーが必要です。

その理由は、いくつかのプラグインを維持しており、相互依存関係が多いためです。汎用ライブラリがすべてで使用され、テンプレート/スニペットエンジンがC ++スイートで使用され、リファクタリングプラグインがctagsライブラリプラグインも使用します、 等々。エンドユーザーが関心のあるプラグインをインストールするために最大10行を実行することを要求することは、私には良い解決策とは思えません。

これまでのところ、私はそのようなプラグインを2つだけ知っています:vim-addon-managerNeoBundleです。VAMは、vim公式メーリングリストで多くの情報交換を行った後、データベースコードをvim-piに分岐させました。その考えは、NeoBundle(および依存関係の管理に関心のある他のプラグイン)が最終的にvim-piを悪用できるというものでした。

最近、依存関係も処理するvim-flavorに出会いました。件名については、プラグインのバージョンをチェックして正しいものをインストールします。

注:最初の回答以来、

  • NeoBundleの開発が停止しました。
  • また、vim-piはvim.orgのプラグインからデータベースを定期的に更新しますが、VAMを使用して依存関係を表現することはできますが、vim-piデータベースにエイリアスを追加することはできなくなりました。MR/ PRはもうマージされません

私の知る限り、これらのプラグインはどれもバックグラウンド/パラレルでプラグインをクローン/インストール/更新しません。私は新しいvim環境をインストールしたり、月に一度インストールしたプラグインを更新したりしないので、正直言って気にしません。もちろん'helptags'、彼らは更新し、世話を'rtp'します。


vim-plugのREADMEには「グループの依存関係」という例があります。あなたはそれを試しましたか、それともVAM / NeoBundleの方法と異なりますか?
ムル

vim-plugドキュメントでグループの依存関係を見逃しました。ただし、コードベースから依存関係をサポートする試みを削除したことがわかりました。グループの依存関係については、どのように役立つかわかりません。依存関係はエンドユーザーによって宣言されるべきではありません。プラグイン作成者が宣言する必要があります。lh-cppプラグインでよく見てみると、依存関係が線形ではないことがわかります。これは指向グラフであり、問​​題を回避するために非周期的である必要があります。
リュックエルミット

これまでのところ、私はVAMを10年以上使用してきましたが、満足しています。それでも、プラグインをテストするために、travisから統合する方がはるかに簡単なので、vim-flavorを使用しました。残念ながら、両方とも依存関係を宣言するために異なる構文を使用します。
リュックエルミット

1
参考NeoBundleの開発は停止しました(2016年2月23日以降)。代わりに、その継承者Dein.vim(同じ作者による)をお勧めします。
ピーターV.モルヒ

3

これらのプラグインマネージャーのほとんどは、プラグインを管理するのに優れた仕事をしますが、管理するのは頭痛の種vimrcです。複数のマシンがあり、同じ設定を使用する場合、Vireを使用すると非常に簡単になります。gitやサブモジュールを理解したり、セットアップや移行に余分な労力を費やす必要はありません。

  • Pythonをインストールします。これは、ほとんどの最新のVimプラグインが作成され、とにかく必要なものです
  • pip install vire
  • 既存のものvimrcを要点としてGithubに投稿し、そこで維持する
  • Windowsの場合vire -i、最新のVimまたは(Neovim with -i -n)をインストールするには
  • 既存のプラグイン関数呼び出しを削除し、コメントアウトされた呼び出しを定義してプラグインをインストールします " Plug 'tpope/vim-unimpaired'
  • vire gistID

その後、vireいつでも、vimrcまたはプラグインを更新したり-i、アプリを更新したりするために実行します。

VireはVim / Neovimのpack機能を利用してプラグインをロードします。既存のプラグインマネージャーを引き続き使用することもできますが、Vireを使用してvimrc、Vim、、および必要に応じてプラグインマネージャー自体のみをインストールします。


1

Pathogenを使用した完全なプラグインマネージャーが必要な場合は、apt-vimもあります。を使用してインストールできますcurl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | shhttps://www.linuxsecrets.com/1715-vi-editor-tips-trick-and-secrets-into-the-vi-vim-editor-part-iiを参照 )。インストールしたらapt-vim install、Ubuntu aptパッケージマネージャーと同様に、パッケージリポジトリの名前を入力するだけで入力できます。


1
これは本質的にリンクのみの回答です。apt-vimをインストールして使用する方法についてもう少し詳しく説明できれば、それで問題ありません。
タンブラー41

更新しました。本当に私はそれが病原体に関する投稿へのコメントであると思ったが、コメントをするのに十分なポイントを持っていない
メラニーデイ

1
プラグインへのリンクがありません。また、提案するプラグインcurl URL |sh。インターネットからランダムなコードを実行することを誰にも勧めません。本当にそれは悪いセキュリティ習慣です。
クリスチャンブラバンド

0

私は使用する方法を探していましたpathogenが、簡単に更新してポータブルにするので、おそらくbashスクリプトが役立つかもしれません(vim-plug機能を使用して)

#!/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

そして、例.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
これに詳細を追加できますか?OPが提起する主な質問は、「[パッケージマネージャー]の違いについて簡単に概要を教えてくれるので、どちらが最適かを判断できますか?」です。あなたの提出はどのようにそれに答えるのに役立ちますか?特に病原体にないものを何に追加しますか?そのようなこと。
Bレイヤー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.