Deferred loading on autocmd (#event[#pattern])

e.g.
    Plug 'SirVer/ultisnips',  { 'on': '#InsertEnter' }
    Plug 'junegunn/goyo.vim', { 'on': ['Goyo', '#BufEnter#README'] }
This commit is contained in:
Junegunn Choi 2016-10-29 18:00:58 +09:00
parent abbbe914f0
commit d7f1846932
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627
2 changed files with 30 additions and 14 deletions

View File

@ -121,16 +121,16 @@ Reload .vimrc and `:PlugInstall` to install plugins.
### `Plug` options ### `Plug` options
| Option | Description | | Option | Description |
| ----------------------- | ------------------------------------------------ | | ----------------------- | ----------------------------------------------------------- |
| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use | | `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use |
| `rtp` | Subdirectory that contains Vim plugin | | `rtp` | Subdirectory that contains Vim plugin |
| `dir` | Custom directory for the plugin | | `dir` | Custom directory for the plugin |
| `as` | Use different name for the plugin | | `as` | Use different name for the plugin |
| `do` | Post-update hook (string or funcref) | | `do` | Post-update hook (string or funcref) |
| `on` | On-demand loading: Commands or `<Plug>`-mappings | | `on` | On-demand loading: Commands, `<Plug>`-mappings, or #autocmds |
| `for` | On-demand loading: File types | | `for` | On-demand loading: File types |
| `frozen` | Do not update unless explicitly specified | | `frozen` | Do not update unless explicitly specified |
### Global options ### Global options
@ -180,6 +180,9 @@ Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
" Multiple file types " Multiple file types
Plug 'kovisoft/paredit', { 'for': ['clojure', 'scheme'] } Plug 'kovisoft/paredit', { 'for': ['clojure', 'scheme'] }
" On autocmd
Plug 'SirVer/ultisnips', { 'on': '#InsertEnter' }
" On-demand loading on both conditions " On-demand loading on both conditions
Plug 'junegunn/vader.vim', { 'on': 'Vader', 'for': 'vader' } Plug 'junegunn/vader.vim', { 'on': 'Vader', 'for': 'vader' }

View File

@ -229,9 +229,16 @@ function! plug#end()
call s:assoc(lod.cmd, cmd, name) call s:assoc(lod.cmd, cmd, name)
endif endif
call add(s:triggers[name].cmd, cmd) call add(s:triggers[name].cmd, cmd)
elseif cmd[0] == '#' && exists('##'.split(cmd, '#')[0])
let tokens = split(cmd, '#')
let group = 'Plug/'.name
execute 'augroup' group
autocmd!
execute 'autocmd' tokens[0] get(tokens, 1, '*') printf('call s:lod_autocmd(%s)', string(name))
execute 'augroup END'
else else
call s:err('Invalid `on` option: '.cmd. call s:err('Invalid `on` option: '.cmd.
\ '. Should start with an uppercase letter or `<Plug>`.') \ '. Should start with an uppercase letter, `<Plug>`, or `#`.')
endif endif
endfor endfor
endif endif
@ -443,9 +450,7 @@ function! plug#load(...)
let s = len(unknowns) > 1 ? 's' : '' let s = len(unknowns) > 1 ? 's' : ''
return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', '))) return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', ')))
end end
for name in a:000 call s:lod(a:000, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
endfor
call s:dobufread(a:000) call s:dobufread(a:000)
return 1 return 1
endfunction endfunction
@ -526,6 +531,14 @@ function! s:lod_map(map, names, with_prefix, prefix)
call feedkeys(substitute(a:map, '^<Plug>', "\<Plug>", '') . extra) call feedkeys(substitute(a:map, '^<Plug>', "\<Plug>", '') . extra)
endfunction endfunction
function! s:lod_autocmd(name)
call s:lod([a:name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
call s:dobufread([a:name])
let group = 'Plug/'.a:name
execute 'autocmd!' group
execute 'augroup!' group
endfunction
function! plug#(repo, ...) function! plug#(repo, ...)
if a:0 > 1 if a:0 > 1
return s:err('Invalid number of arguments (1..2)') return s:err('Invalid number of arguments (1..2)')