diff --git a/plug.vim b/plug.vim index 3005dc2..87a8036 100644 --- a/plug.vim +++ b/plug.vim @@ -440,7 +440,7 @@ function! s:add(repo, ...) call add(g:plugs_order, name) endif let g:plugs[name] = spec - let s:loaded[name] = 0 + let s:loaded[name] = get(s:loaded, name, 0) catch return s:err(v:exception) endtry diff --git a/test/regressions.vader b/test/regressions.vader index ccfbea2..28b2f55 100644 --- a/test/regressions.vader +++ b/test/regressions.vader @@ -34,6 +34,7 @@ Execute (#130 Proper cleanup of on-demand loading triggers): augroup END " Cleared on command + call ReloadPlug() call plug#begin('$TMPDIR/plugged') Plug 'junegunn/vim-emoji', { 'on': ['EmojiCommand', 'EmojiCommand2', '(EmojiMapping)'] } call plug#end() @@ -50,6 +51,7 @@ Execute (#130 Proper cleanup of on-demand loading triggers): Assert empty(mapcheck('(EmojiMapping)')), '(EmojiMapping) defined' " Cleared on FileType + call ReloadPlug() call plug#begin('$TMPDIR/plugged') Plug 'junegunn/vim-emoji', { 'on': ['EmojiCommandExtra', '(EmojiMappingExtra)'], 'for': ['emoji'] } call plug#end() @@ -189,6 +191,7 @@ Execute (#145: Merging on-demand loading triggers - cmd): Execute (#145: Merging on-demand loading triggers - map): unlet! g:xxx g:yyy + call ReloadPlug() call plug#begin() Plug '$PLUG_FIXTURES/xxx', { 'on': '(xxx)' } Plug '$PLUG_FIXTURES/yyy', { 'on': ['(xxx)' ,'(yyy)' ] } @@ -241,3 +244,26 @@ Execute (#184: Duplicate entries in &rtp): Log &rtp AssertEqual 3, len(filter(split(&rtp, ','), 'stridx(v:val, "plugged") >= 0')) +********************************************************************** +Execute (#236: Plugin removed from &rtp when .vimrc is reloaded): + unlet! g:loaded_easy_align_plugin + silent! delc EasyAlign + + call ReloadPlug() + call plug#begin('$TMPDIR/plugged') + Plug 'junegunn/vim-easy-align', { 'on': 'EasyAlign' } + call plug#end() + PlugInstall | q + + Assert &rtp !~ '/vim-easy-align', 'Plugin should not be in &rtp' + %EasyAlign= + Assert &rtp =~ '/vim-easy-align', 'Plugin should be in &rtp' + + call plug#begin('$TMPDIR/plugged') + Plug 'junegunn/vim-easy-align', { 'on': 'EasyAlign' } + call plug#end() + + redir => out + silent command EasyAlign + redir END + Assert &rtp =~ '/vim-easy-align', 'Plugin should still be in &rtp' diff --git a/test/test.vader b/test/test.vader index 839832d..0bd4e81 100644 --- a/test/test.vader +++ b/test/test.vader @@ -39,6 +39,19 @@ Execute (Initialize test environment): endif endfunction + " Reload vim-plug to reset s:-variables + function! ReloadPlug() + let tmp = tempname() + try + call writefile(readfile(globpath(&rtp, 'autoload/plug.vim')), tmp) + unlet g:loaded_plug + execute 'source' tmp + let &rtp = g:basertp + finally + call delete(tmp) + endtry + endfunction + Execute (Print Interpreter Version): redir => out if has('ruby') @@ -66,6 +79,7 @@ Execute (Cleanup): silent! delf AssertExpect silent! delf PlugUpdated silent! delf EnsureLoaded + silent! delf ReloadPlug silent! delc AssertExpect silent! unmap / silent! unmap ? diff --git a/test/workflow.vader b/test/workflow.vader index 50f30c3..9c0b023 100644 --- a/test/workflow.vader +++ b/test/workflow.vader @@ -354,6 +354,7 @@ Execute (Reuse Plug window in another tab): ********************************************************************** Execute (Trying to execute on-demand commands when plugin is not installed): + call ReloadPlug() call plug#begin() Plug 'junegunn/vim-easy-align', { 'on': ['EasyAlign', 'LiveEasyAlign'] } call plug#end() @@ -366,6 +367,7 @@ Execute (Trying to execute on-demand commands when plugin is not installed): Assert !exists(':LiveEasyAlign') Execute (New set of plugins): + call ReloadPlug() call plug#begin() Plug 'junegunn/vim-fnr' Plug 'junegunn/vim-pseudocl' @@ -778,6 +780,7 @@ Before (Clear global vars): set rtp-=$PLUG_FIXTURES/xxx/after Execute (Immediate loading): + call ReloadPlug() call plug#begin() Plug '$PLUG_FIXTURES/xxx' call plug#end() @@ -792,6 +795,7 @@ Execute (Immediate loading): endif Execute (Command-based on-demand loading): + call ReloadPlug() call plug#begin() Plug '$PLUG_FIXTURES/xxx', { 'on': 'XXX' } call plug#end() @@ -805,6 +809,7 @@ Execute (Command-based on-demand loading): AssertEqual ['xxx/ftdetect', 'xxx/after/ftdetect', 'xxx/plugin', 'xxx/after/plugin', 'xxx/ftplugin', 'xxx/after/ftplugin', 'xxx/indent', 'xxx/after/indent', 'xxx/syntax', 'xxx/after/syntax'], g:xxx Execute (Filetype-based on-demand loading): + call ReloadPlug() call plug#begin() Plug '$PLUG_FIXTURES/xxx', { 'for': 'xxx' } call plug#end() @@ -1006,6 +1011,7 @@ Execute (Plug directory with comma): ********************************************************************** Execute (Strict load order): let g:total_order = [] + call ReloadPlug() call plug#begin() Plug '$PLUG_FIXTURES/xxx' Plug '$PLUG_FIXTURES/yyy', { 'for': ['xxx'] } @@ -1019,6 +1025,7 @@ Execute (Strict load order): let len = len(split(&rtp, ',')) let g:total_order = [] + call ReloadPlug() call plug#begin() Plug '$PLUG_FIXTURES/xxx', { 'for': ['xxx'] } Plug '$PLUG_FIXTURES/yyy' @@ -1036,6 +1043,9 @@ Execute (Strict load order): AssertEqual len + 2, len(split(&rtp, ',')) let g:total_order = [] + call ReloadPlug() + set rtp^=manually-prepended + set rtp+=manually-appended call plug#begin() Plug '$PLUG_FIXTURES/xxx', { 'for': ['xxx'] } Plug '$PLUG_FIXTURES/yyy', { 'for': ['xxx'] }