プラグインを条件付きでロードする方法


14

私はこれに対する答えを探していましたが、まだ何も見つかりませんでしたので、明白な何かを見逃した場合、私は謝罪します。すぐにグーグルで検索できると思ったので、思ったよりも複雑かもしれません。

編集中のファイルのタイプに基づいて、条件付きでプラグインをロードできるようにしたいと思います。たとえば、Pythonを編集する場合、vim-sexpインストールするキーバインドは必要ありませんが、clojureで作業する場合、そのプラグインをロードする必要があります。

現在、neovimと病原体を使用していますが、これを行う別のプラグインマネージャーがあれば、切り替えを受け入れます。これが存在しない場合も、ない:set syntax whateverプラグインを切り替えますか?それはスーパーだから:)

ヘルプ/指示を事前に感謝します!


1
あなたは質問をしていますが、実際には別のことを説明しています:プラグインがグローバルキーバインドをインストールする場合、それらを無効にし(方法についてはプラグインのドキュメントを読んでください)、そして(autocmdを使用して)ローカルに再度有効にします欲しいです。プラグインがきちんと書かれている場合、初期化を遅らせることであまり利益を得ることはありません。ただし、プラグインによってアクティブにされた不要なグローバルキーバインドを無効にしない場合、プラグインのロードも引き続き影響があります。
VanLaser

回答:


18

Vim-Plugでこれを行うことができます。READMEを参照してください。

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

プラグインを有効にする:set filetype whatever代わりに使用する必要があると思いますset syntax whatever

(他の一部のプラグインマネージャーでそれができる場合があります。vimプラグインマネージャーの違い何ですか?を参照してください


8

execute pathogen#infect()すべてのプラグインをロードするために呼び出す代わりに、すべてのプラグインを呼び出しpathogen#interposeます。つまり:

execute pathogen#interpose('bundle/unicode.vim')
execute pathogen#interpose('bundle/AnsiEsc.vim')

病原体APIはsourceの外部で文書化されていませんが十分に単純です(関数名が不明瞭で説明的でない場合でも)。pathogen#surround()絶対パスにも使用できます。

基本的にプラグインを条件付きでロードできますautocmd

" Always use this plugin
execute pathogen#interpose('bundle/unicode.vim')

" Only for Python
autocmd FileType python execute pathogen#interpose('bundle/vim-sexp')

これらのケースの多くが見つかった場合は、別のパスに分割することもできます。

  • ~/.vim/bundle/always 常に欲しいプラグイン
  • ~/.vim/bundle/<filetype> 特定のファイルタイプのプラグイン用
  • そして、次のようにロードします。

    " Always use this plugin
    execute pathogen#infect('bundle/always/{}')
    
    " Load filetype plugins if they exist
    autocmd FileType * if isdirectory('/home/martin/.vim/bundle/' . &ft) | execute pathogen#infect('bundle/' . &ft. '/{}') | endif
    

この方法ではautocmd、すべてのファイルタイプ/プラグインにs を追加する必要はありません。

これが存在する場合:set syntax whatever、プラグインを切り替えますか?それはスーパーだから:)

  • プラグインが読み込まれると、読み込まれます。「プラグイン」するだけの集まりであるfunctioncommandmapdefinitons。これを「アンロード」する簡単な方法は知りません。

  • それはありませんあなたが使用IFFファイルタイプの負荷のプラグインを:set filetype。一般的には、構文強調表示のみを設定し、インデントやその他の設定(例、など)ではなく、常に使用する必要が:set filetypeあります。 :set syntaxsyntaxiskeywordformatexpr

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.