Shougo / dein.vim

:zap: Dark powered Vim/Neovim plugin manager
MIT License
3.43k stars 198 forks source link

Q: Why can I execute not-loaded plugin commands? #307

Closed takxlz closed 6 years ago

takxlz commented 6 years ago

Warning: I will close the bug issue without the minimal init.vim and the reproduce ways.

Problems summary

なぜか,lazy-load(on_cmd以外)に設定したいくつかのプラグインで,まだ読み込まれていないはずなのにそのプラグインのコマンドが実行できてしまいます.

例えば, vim-minimapはロードされていない状態なのに,なぜか「:Minimap」が実行できてしまいます. vim-cheatsheetというプラグインでは,ロードされていない状態では「:Cheat」は実行できません.

Expected

この現象が発生するプラグインと発生しないプラグインがあるので,対象のプラグインの実装の仕様でdein.vimには関係がないかもしれません.もしくは,私の設定ミスなどで私の環境だけで発生するだけかもしれません.ただ,試しにvim-plugでvim-minimapを同様のlazy設定にしてみたところ,この現象は発生しませんでした.

Environment Information (Required!)

Provide a minimal .vimrc with less than 50 lines (Required!)

" deinlazy.toml
[[plugins]]
repo = 'severin-lemaignan/vim-minimap'
on_ft = 'markdown'

[[plugins]]
repo = 'reireias/vim-cheatsheet'
# on_cmd = 'Cheat'  
on_ft = 'markdown'

The reproduce ways from Vim starting (Required!)

[vim-minimap]

  1. :echo dein#is_sourced('vim-minimap') => 0
  2. :Minimap => Executed (Invalid: 妥当でない)

[vim-cheatsheet]

  1. :echo dein#is_sourced('vim-cheatsheet') => 0
  2. :Cheat => Not executed(Valid: 妥当)
  3. Open markdown file
  4. :echo dein#is_sourced('vim-cheatsheet') => 1
  5. :Cheat => Executed(Valid: 妥当)
Shougo commented 6 years ago

これは仕様です。長くなりますが解説します。 dein の機能として、プラグインのコマンドのプレフィクスを自動認識する機能があり、プレフィクスにマッチしたコマンドは自動的にロードできるからです。 ただし自動認識は完璧ではありません。 プレフィクスはプラグイン名から計算されるので、 例えば vim-minimap なら minimap、vim-cheatsheet なら cheatsheet になります。 Minimap には minimap のプレフィクスがマッチしますが Cheat と cheatsheet はマッチしないのでロードできないのです。 もちろんこの機能は vim-plug にはありません。

Q.E.D.

takxlz commented 6 years ago

thank you.