Fullquote, because I am CC'ing Bram for comment
On Mi, 24 Mai 2017, Christian Brabandt wrote:
>
> On Mi, 24 Mai 2017, fREW Schmidt wrote:
>
> > Yes. "If I replace the contents of /usr/share/vim/vim80/syntax/vb.vim with
> > `let
> > b:current_syntax = "vb"` everything is fast and, as I would hope, the
> > support
> > files are not loaded N times per buffer but instead exactly once."
>
> Well, I see the problem, although I cannot reproduce it.
>
> The markdown syntax script sources the html syntax script and that one
> does include a couple of other syntax scripts, like css.vim,
> javascript.vim and also vb.vim. However from my testing vb.vim is not
> guilty alone. If I uncomment vb.vim, the overall loading time only
> shrinks by 0.2 seconds or so (it needs here a total of around 7
> seconds). So you would need to disable all other to be included syntax
> scripts as well (for a test, you could set main_syntax='java').
>
> However, I think you might have found a bug here. Your ftdetect script
> does this:
>
> autocmd BufNew,BufNewFile,BufRead *.md :set filetype=markdown
>
> The :args command does fill the argument list, calls ex_next() which
> calls eventually alist_set() and then iterates over the argument list
> and calls adlist_add(). This will finally call buflist_add() which in
> turn calls buflist_new(), which triggers the BufNew autocommand, which
> then triggers the FileType and finally the Syntax autocommands. So in
> the end, we are iterating over the whole list of arguments and call
> autocommands, for buffers that are not even going to be displayed next.
>
> So I wonder, if we can't do a little bit better, similar to how vimgrep
> sets the eventignore option to prevent at least the expensive FileType
> autocommand:
>
> diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
> index 36ee57e8e..e0fbbfb9b 100644
> --- a/src/ex_cmds2.c
> +++ b/src/ex_cmds2.c
> @@ -2757,8 +2757,22 @@ ex_next(exarg_T *eap)
> {
> if (*eap->arg != NUL) /* redefine file list */
> {
> + /* do_arglist() could trigger BufNew events, which might
> + * in turn trigger expensive FileType and Syntax autocommands
> + * prevent this for now */
> +#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
> + char_u *save_ei = au_event_disable(",Filetype");
> +#endif
> if (do_arglist(eap->arg, AL_SET, 0) == FAIL)
> + {
> +#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
> + au_event_restore(save_ei);
> +#endif
> return;
> + }
> +#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
> + au_event_restore(save_ei);
> +#endif
> i = 0;
> }
> else
>
I am not sure, if this behaviour is a bug. However after thinking some
more about it, I am wondering, whether the fact that the BufNew
autocommand triggers a FileType autocommand is a bug itself, since
autocommands shouldn't nest (see :h autocmd-nested). But I haven't
looked into the detail, why the FileType autocommand is triggered. (And
I have a feeling, that when this behaviour is changed, it might actually
break a lot of ftdetect scripts.)
Best,
Christian
--
Glaube heißt nicht wissen wollen, was wahr ist.
-- Friedrich Wilhelm Nietzsche (Der Antichrist)
--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.