Skip to content

Commit 00d3f0a

Browse files
committed
Queue autocommands for VimEnter
This also uses `s:dobufread` for the `BufEnter` event (which enables `<nomodeline>` for it). Triggering `BufRead` during startup of Vim should be avoided, because it will also trigger `FileType` events, which can have unexpected side effects. Ref: vim/vim#2810
1 parent a78b28a commit 00d3f0a

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

plug.vim

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ let s:loaded = get(s:, 'loaded', {})
111111
let s:triggers = get(s:, 'triggers', {})
112112
let s:need_filetypeplugin_au = 0
113113
let s:need_filetypeindent_au = 0
114+
let s:autocmd_queue_for_vimenter = []
114115

115116
function! plug#begin(...)
116117
if a:0 > 0
@@ -302,8 +303,14 @@ function! plug#end()
302303
" NOTE: v:vim_did_enter might not exist with older Vims, and handling it
303304
" manually can be used in tests.
304305
let s:vim_did_enter = 0
306+
function! s:plug_on_vimenter()
307+
let s:vim_did_enter = 1
308+
for event in s:autocmd_queue_for_vimenter
309+
call s:doautocmd(event)
310+
endfor
311+
endfunction
305312
augroup PlugLOD
306-
autocmd VimEnter * let s:vim_did_enter = 1
313+
autocmd VimEnter * call s:plug_on_vimenter()
307314
augroup END
308315
else
309316
let s:vim_did_enter = 1
@@ -444,6 +451,12 @@ function! s:reorg_rtp()
444451
endfunction
445452

446453
function! s:doautocmd(...)
454+
if !s:vim_did_enter
455+
if index(s:autocmd_queue_for_vimenter, a:000) == -1
456+
call add(s:autocmd_queue_for_vimenter, a:000)
457+
endif
458+
return
459+
endif
447460
if exists('#'.join(a:000, '#'))
448461
execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000)
449462
endif
@@ -454,9 +467,7 @@ function! s:dobufread(names)
454467
let path = s:rtp(g:plugs[name]).'/**'
455468
for dir in ['ftdetect', 'ftplugin']
456469
if len(finddir(dir, path))
457-
if exists('#BufRead')
458-
doautocmd BufRead
459-
endif
470+
call s:doautocmd('BufRead')
460471
return
461472
endif
462473
endfor

0 commit comments

Comments
 (0)