From 7c7ef8cf2f59fb95fd85ce5ff939e360e68c387d Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Mon, 23 May 2016 13:10:44 +0900 Subject: [PATCH] Trigger BufRead when a plugin is loaded by `on` condition Close #489 --- plug.vim | 22 +++++++++------------- test/regressions.vader | 17 +++++++++++++++-- test/run | 4 +++- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/plug.vim b/plug.vim index 15f4e1f..25dc7c6 100644 --- a/plug.vim +++ b/plug.vim @@ -397,7 +397,9 @@ function! s:reorg_rtp() endfunction function! s:doautocmd(...) - execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '' : '') join(a:000) + if exists('#'.join(a:000, '#')) + execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '' : '') join(a:000) + endif endfunction function! plug#load(...) @@ -415,9 +417,7 @@ function! plug#load(...) for name in a:000 call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) endfor - if exists('#BufRead') - doautocmd BufRead - endif + call s:doautocmd('BufRead') return 1 endfunction @@ -453,9 +453,7 @@ function! s:lod(names, types, ...) endif call s:source(rtp, a:2) endif - if exists('#User#'.name) - call s:doautocmd('User', name) - endif + call s:doautocmd('User', name) endfor endfunction @@ -463,21 +461,19 @@ function! s:lod_ft(pat, names) let syn = 'syntax/'.a:pat.'.vim' call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn) execute 'autocmd! PlugLOD FileType' a:pat - if exists('#filetypeplugin#FileType') - doautocmd filetypeplugin FileType - endif - if exists('#filetypeindent#FileType') - doautocmd filetypeindent FileType - endif + call s:doautocmd('filetypeplugin', 'FileType') + call s:doautocmd('filetypeindent', 'FileType') endfunction function! s:lod_cmd(cmd, bang, l1, l2, args, names) call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:doautocmd('BufRead') execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) endfunction function! s:lod_map(map, names, prefix) call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:doautocmd('BufRead') let extra = '' while 1 let c = getchar(0) diff --git a/test/regressions.vader b/test/regressions.vader index ad81a9e..5dd73ca 100644 --- a/test/regressions.vader +++ b/test/regressions.vader @@ -7,13 +7,13 @@ Execute (#112 On-demand loading should not suppress messages from ftplugin): redir => out tabnew a.c redir END - Assert stridx(out, 'ftplugin') >= 0 + Assert stridx(out, 'ftplugin-c') >= 0 * The same applies to plug#load()) redir => out call plug#load('ftplugin-msg') redir END - Assert stridx(out, 'ftplugin') >= 0 + Assert stridx(out, 'ftplugin-c') >= 0 q @@ -302,3 +302,16 @@ Execute (#474: Load ftdetect files in filetypedetect augroup): AssertEqual 'rust', &filetype Log &filetype bd + +********************************************************************** +Execute (#489 On-demand loading with 'on' option should trigger BufRead autocmd): + call plug#begin('$PLUG_FIXTURES') + Plug 'ftplugin-msg', { 'on': 'XXX' } + call plug#end() + + tabnew a.java + redir => out + silent! XXX + redir END + Assert stridx(out, 'ftplugin-java') >= 0 + q diff --git a/test/run b/test/run index ff0943b..4c8d37c 100755 --- a/test/run +++ b/test/run @@ -2,6 +2,7 @@ cd $(dirname "${BASH_SOURCE[0]}") +export HOME=/tmp export BASE="$PWD" export PLUG_SRC="$PWD/../plug.vim" export PLUG_FIXTURES="$PWD/fixtures" @@ -77,7 +78,8 @@ DOC rm -rf "$PLUG_FIXTURES/ftplugin-msg" mkdir -p "$PLUG_FIXTURES/ftplugin-msg/ftplugin" - echo "echomsg 'ftplugin'" > "$PLUG_FIXTURES/ftplugin-msg/ftplugin/c.vim" + echo "echomsg 'ftplugin-c'" > "$PLUG_FIXTURES/ftplugin-msg/ftplugin/c.vim" + echo "echomsg 'ftplugin-java'" > "$PLUG_FIXTURES/ftplugin-msg/ftplugin/java.vim" rm -rf /tmp/new-branch cd /tmp